MSP430F5529库函数学习——串口

这篇具有很好参考价值的文章主要介绍了MSP430F5529库函数学习——串口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

波特率计算网站;导入MSP430Ware,查看例程;原理图和中文开发手册获取

目录

GPIO_setAsPeripheralModuleFunctionInputPin()和GPIO_setAsPeripheralModuleFunctionOutputPin

函数声明

 作用

参数

selectedPort

selectedPins

使用

USCI_A_UART_init()

函数声明

 作用

参数

baseAddress

param

 USCI_A_UART_enable()

函数声明

作用

参数

baseAddress 

使用

USCI_A_UART_clearInterrupt()

函数声明

作用

参数

baseAddress

mask

使用

 USCI_A_UART_enableInterrupt()

串口中断函数

中断函数中的switch

串口中断服务函数框架

printf函数支持

printf函数

使用

浮点数据打印

实验

串口1所在位置


首先,我们看MSP430F5529的库函数里面,会发现有两个跟串口有关的头文件"eusci_a_uart.h"和"usci_a_uart.h"。我查阅了资料后发现,其实就是一个普通的串行通讯模块,一个是增强型串行通讯模块。然后寄存器不太一样。我看TI的例程里面用的是"usci_a_uart.h"里面的函数,我就也只讲这给里面的了。        

GPIO_setAsPeripheralModuleFunctionInputPin()和GPIO_setAsPeripheralModuleFunctionOutputPin

大家一看,这个不是GPIO的函数吗?对的,不过你进行串口通讯需要用到他,我看手册里面说MSP430F5xx/6xx不具备这个功能,但是例程里面有,卡了我好久。我猜手册写错了。

函数声明

void GPIO_setAsPeripheralModuleFunctionInputPin (uint8_t selectedPort,uint16_t selectedPins )
void GPIO_setAsPeripheralModuleFunctionOutputPin (uint8_t selectedPort,uint16_t selectedPins )

 作用

GPIO_setAsPeripheralModuleFunctionInputPin ()该函数在所选引脚的输入方向上配置外围模块函数。该函数为所选引脚的主、次或三元模块函数模式的输入方向配置外围模块函数。

GPIO_setAsPeripheralModuleFunctionOutputPin()该函数为所选引脚的输出方向配置外围模块函数。该函数在输出方向为所选引脚配置外围模块函数,用于主、次或三元模块函数模式。 

这个是官方库函数手册翻译的结果,说实话我也看不懂,反正我们只需要用,知道用用法就行。

需要注意的一点就是,外设功能方向引脚看具体功能,有些外设不需要哦设置方向。例如uart,设置为引脚之后,系统会自动设置输入输出方向。所以我们直接选择GPIO_setAsPeripheralModuleFunctionInputPin ()这一个函数就可以了。

参数

selectedPort

//!        - \b GPIO_PORT_P1
//!        - \b GPIO_PORT_P2
//!        - \b GPIO_PORT_P3
//!        - \b GPIO_PORT_P4
//!        - \b GPIO_PORT_P5
//!        - \b GPIO_PORT_P6
//!        - \b GPIO_PORT_P7
//!        - \b GPIO_PORT_P8
//!        - \b GPIO_PORT_P9
//!        - \b GPIO_PORT_P10
//!        - \b GPIO_PORT_P11
//!        - \b GPIO_PORT_PA
//!        - \b GPIO_PORT_PB
//!        - \b GPIO_PORT_PC
//!        - \b GPIO_PORT_PD
//!        - \b GPIO_PORT_PE
//!        - \b GPIO_PORT_PF
//!        - \b GPIO_PORT_PJ

selectedPins

//!        - \b GPIO_PIN0
//!        - \b GPIO_PIN1
//!        - \b GPIO_PIN2
//!        - \b GPIO_PIN3
//!        - \b GPIO_PIN4
//!        - \b GPIO_PIN5
//!        - \b GPIO_PIN6
//!        - \b GPIO_PIN7
//!        - \b GPIO_PIN8
//!        - \b GPIO_PIN9
//!        - \b GPIO_PIN10
//!        - \b GPIO_PIN11
//!        - \b GPIO_PIN12
//!        - \b GPIO_PIN13
//!        - \b GPIO_PIN14
//!        - \b GPIO_PIN15
//!        - \b GPIO_PIN_ALL8
//!        - \b GPIO_PIN_ALL16

使用

MSP430F5529好像就两个串口,记住这下面两个就行,记不住收藏博客,需要用的时候过来抄。

需要注意,不需要我们像stm32那样配置3.4为输入,3.5为输出,直接像我下面这样写就可以了。

//Usart0   P3.4 = USCI_A0 RXD     P3.3 = USCI_A0 TXD
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3, GPIO_PIN3+GPIO_PIN4);

//Usart1   P4.5 = USCI_A1 RXD     P4.4 = USCI_A1 TXD
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4, GPIO_PIN5+GPIO_PIN4);

USCI_A_UART_init()

函数声明

可能有人不知道bool是什么意思,bool就是布尔值,将人话就是0和非0。要么为真,要么为假,只有两种状态,这称之为布尔值。而非0就是1。

bool USCI_A_UART_init (uint16_t baseAddress,USCI_A_UART_initParam ∗ param )

 作用

初始化串口

参数

baseAddress

说实话,TI这个老6库函数手册里面就一句话is the base address of the USCI_A_UART module。我尼玛怎么知道他们的地址。于是我找了一段时间,找到了以下参数,只有两个。

USCI_A0_BASE    //串口0基地址
USCI_A1_BASE    //串口1基地址

param

param是一个结构体,我娓娓道来。

(1)首先我先介绍 param1.selectClockSource,他是负责选择串口波特率发生时钟的。只有两个参数,ACLK= TACLK 32768Hz, MCLK= SMCLK= default DCO ~ 1048576Hz。

注意,对于较低的波特率(9600bps以下),可以选择ACLK作为时钟源(注意,是可以选择,不是只能选择)。在波特率高于9600bps的情况下,应选择频率较高的SMCLK作为时钟源。

USCI_A_UART_CLOCKSOURCE_SMCLK   //1048576Hz
USCI_A_UART_CLOCKSOURCE_ACLK    //32768Hz

(2)然后是这4个,这四个负责配置串口波特率的,至于传入数值怎么算呢?点击这个网站,先根据我们之前设置的时钟,USCI/EUSCI选择USCI,然后波特率你自己选。下面这个就是SMCLK时钟频率下,波特率为9600的配置。

    param1.clockPrescalar = 6;
    param1.firstModReg = 13;
    param1.secondModReg = 0;
    param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;


#define USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION                       0x01
#define USCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION                      0x00

(3)接下来这几个是选择,这三个都是基础。还有不清楚,你可以看一下你电脑端串口助手一般都有这几个要配置,你就按照我的来就可以了。然后下面这三个参数你也不用改,跟我的一样即可。

msp430库函数手册,MSP430F5529,学习,单片机

    param1.parity = USCI_A_UART_NO_PARITY;              //校验位,无
    param1.msborLsbFirst = USCI_A_UART_LSB_FIRST;       //数据低位先发
    param1.numberofStopBits = USCI_A_UART_ONE_STOP_BIT; //一停止位

(4)最后一个参数 ,是用来配置串口模式的。就使用USCI_A_UART_MODE模式即可,其他几个我也不知道是做什么的。

 param1.uartMode = USCI_A_UART_MODE;

 详细解释,我们查看 USCI_A_UART_MODE定义发现还有三个其他的定义,而这四个定义本质如下

#define USCI_A_UART_MODE                                               UCMODE_0
#define USCI_A_UART_IDLE_LINE_MULTI_PROCESSOR_MODE                     UCMODE_1
#define USCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE                   UCMODE_2
#define USCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE                  UCMODE_3


#define UCMODE_0               (0x00)         /* Sync. Mode: USCI Mode: 0 */
#define UCMODE_1               (0x02)         /* Sync. Mode: USCI Mode: 1 */
#define UCMODE_2               (0x04)         /* Sync. Mode: USCI Mode: 2 */
#define UCMODE_3               (0x06)         /* Sync. Mode: USCI Mode: 3 */

 我们查看USCI_A_UART_init()的内部函数实现,看到其实就算再操作UCAxCTL0这个寄存器,我们可以直接看手册。最后发现模式0,就是UART模式。模式1,空闲线路多处理器模式。模式2,地址位多处理器模式。模式3,自带动波特率检测UART模式。

注意,我们这个是UART模块,所以不能同步

    //Configure  UART mode.
    HWREG8(baseAddress + OFS_UCAxCTL0) |= param->uartMode ;

msp430库函数手册,MSP430F5529,学习,单片机

msp430库函数手册,MSP430F5529,学习,单片机

 USCI_A_UART_enable()

函数声明

void USCI_A_UART_enable (uint16_t baseAddress )

作用

使能UART。

参数

baseAddress 

串口基地址,参数下面两个

USCI_A0_BASE    //串口0基地址
USCI_A1_BASE    //串口1基地址

使用

    //Enable UART module for operation
    USCI_A_UART_enable(USCI_A0_BASE);

    //Enable UART module for operation
    USCI_A_UART_enable(USCI_A1_BASE);

USCI_A_UART_clearInterrupt()

函数声明

void USCI_A_UART_clearInterrupt (uint16_t baseAddress,uint8_t mask )

作用

清除UART中断标志位

参数

baseAddress

与上面一样,懒得再啰嗦

mask

就一个是接收中断,一个是发送中断。注意,我们发送数据一般是不需要中断,如果是发送一连串字符就需要了。但是接收数据一定要中断处理,这样能高效准确处理接收到的数据

参数就两个

USCI_A_UART_RECEIVE_INTERRUPT_FLAG   //接收中断标志位
USCI_A_UART_TRANSMIT_INTERRUPT_FLAG  //发送中断标志位

使用

//Usart0
USCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);  //清除接收中断
USCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_TRANSMIT_INTERRUPT); //清除发送中断
USCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT + USCI_A_UART_TRANSMIT_INTERRUPT);   //清除接收和发送中断

//Usart1
USCI_A_UART_clearInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);  //清除接收中断
USCI_A_UART_clearInterrupt(USCI_A1_BASE,USCI_A_UART_TRANSMIT_INTERRUPT); //清除发送中断
USCI_A_UART_clearInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT + USCI_A_UART_TRANSMIT_INTERRUPT);   //清除接收和发送中断

 USCI_A_UART_enableInterrupt()

与USCI_A_UART_clearInterrupt参数与使用一摸一样。

作用是使能串口中断,使用方法如下

//Usart0
USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);  //使能接收中断
USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_TRANSMIT_INTERRUPT); //使能发送中断
USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT + USCI_A_UART_TRANSMIT_INTERRUPT);   //使能接收和发送中断

//Usart1
USCI_A_UART_enableInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);  //使能接收中断
USCI_A_UART_enableInterrupt(USCI_A1_BASE,USCI_A_UART_TRANSMIT_INTERRUPT); //使能发送中断
USCI_A_UART_enableInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT + USCI_A_UART_TRANSMIT_INTERRUPT);   //使能接收和发送中断

串口中断函数

中断函数中的switch

因为MSP430F5529的中断,是多个中断标志位公用同一个中断向量,所以我们需要加上Switch语句。如下

msp430库函数手册,MSP430F5529,学习,单片机

串口中断服务函数框架

串口中断服务函数框架如下

注意,我们只需要在case 2:里面增加或者减少内容即可

//UART0串口中断服务函数
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR (void)
{
    uint8_t receivedData = 0;
    switch (__even_in_range(UCA0IV,4))
    {
        //Vector 2 - RXIFG
        case 2:
            receivedData = USCI_A_UART_receiveData(USCI_A0_BASE);
            USCI_A_UART_transmitData(USCI_A0_BASE,receivedData);
            break;
        default:
            break;
    }
}

//UART1串口中断服务函数
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR (void)
{
    uint8_t receivedData = 0;
    switch (__even_in_range(UCA1IV,4))
    {
        //Vector 2 - RXIFG
        case 2:
            receivedData = USCI_A_UART_receiveData(USCI_A1_BASE);
            USCI_A_UART_transmitData(USCI_A1_BASE,receivedData);
            break;
        default:
            break;
    }
}

printf函数支持

printf函数

拜读了大佬的博客。MSP430F5529的重定向fputc(int ch, FILE *f)直接使用printf的方法只有字符串和%s打印正常,数字打印不出来。所以采用下面这个

//这三个头文件都要加上,不然会报错
#include <string.h>
#include <stdarg.h>
#include <stdio.h>

void UART_printf(uint16_t baseAddress, const char *format,...)
{
    uint32_t length;
    va_list args;
    uint32_t i;
    char TxBuffer[128] = {0};

    va_start(args, format);
    length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args);
    va_end(args);

    for(i = 0; i < length; i++)
        USCI_A_UART_transmitData(baseAddress, TxBuffer[i]);
}

使用

函数使用方法很简单,和printf函数几乎一样。唯一区别是,此处的UART_printf需要提前告知是串口0还是串口1。

//串口0发送
UART_printf(USCI_A0_BASE, "数字测试:%d,字符串测试:%s\r\n", 2333, "能收到就算成功");

//串口1发送
UART_printf(USCI_A1_BASE, "数字测试:%d,字符串测试:%s\r\n", 2333, "能收到就算成功");

浮点数据打印

如果你不设置工程编译环境,那么你可能打印不出来浮点型数据。步骤如下:

右键工程文件——>properties

msp430库函数手册,MSP430F5529,学习,单片机

 然后是build——>Advanced Optionsmsp430库函数手册,MSP430F5529,学习,单片机

 

 

实验

以下就是串口0将接收到的数据发送出去。同时每个1s给上位机发送一串字符。

#include "driverlib.h"
#include <string.h>
#include <stdarg.h>
#include <stdio.h>

#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

void UART_printf(uint16_t baseAddress, const char *format,...)
{
    uint32_t length;
    va_list args;
    uint32_t i;
    char TxBuffer[128] = {0};

    va_start(args, format);
    length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args);
    va_end(args);

    for(i = 0; i < length; i++)
        USCI_A_UART_transmitData(baseAddress, TxBuffer[i]);
}

//9600
void Usart1_Init()
{
    //P4.4=UCA1TXD      P4.5=UCA1RXD
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4, GPIO_PIN5+GPIO_PIN4);

    USCI_A_UART_initParam param1 = {0};
    param1.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
    param1.clockPrescalar = 6;
    param1.firstModReg = 13;
    param1.secondModReg = 0;
    param1.parity = USCI_A_UART_NO_PARITY;   //无校验位
    param1.msborLsbFirst = USCI_A_UART_LSB_FIRST;  //低位先行
    param1.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;  //1停止位
    param1.uartMode = USCI_A_UART_MODE;
    param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;

    if (STATUS_FAIL == USCI_A_UART_init(USCI_A1_BASE, &param1)){
       return;
    }
    //Enable UART module for operation
    USCI_A_UART_enable(USCI_A1_BASE);

    //Enable Receive Interrupt
    USCI_A_UART_clearInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
    USCI_A_UART_enableInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
}
void Usart0_Init(void)
{
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3, GPIO_PIN3+GPIO_PIN4);

    USCI_A_UART_initParam param1 = {0};
    param1.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
    param1.clockPrescalar = 6;
    param1.firstModReg = 13;
    param1.secondModReg = 0;
    param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
    param1.parity = USCI_A_UART_NO_PARITY;
    param1.msborLsbFirst = USCI_A_UART_LSB_FIRST;
    param1.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;
    param1.uartMode = USCI_A_UART_MODE;

    if (STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param1)){
        return;
    }

    //Enable UART module for operation
    USCI_A_UART_enable(USCI_A0_BASE);

    //Enable Receive Interrupt
      USCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
      USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
}


void main(void)
{
    WDT_A_hold(WDT_A_BASE);

    Usart0_Init();

    //interrupts enabled
    __bis_SR_register(GIE);

    while(1)
    {
        UART_printf(USCI_A0_BASE, "数字测试:%d,字符串测试:%s\r\n", 2333, "能收到就算成功");
        delay_ms(1000);
    }
}


#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR (void)
{
    uint8_t receivedData = 0;
    switch (__even_in_range(UCA0IV,4))
    {
        //Vector 2 - RXIFG
        case 2:
            receivedData = USCI_A_UART_receiveData(USCI_A0_BASE);
            USCI_A_UART_transmitData(USCI_A0_BASE,receivedData);
            break;
        default:
            break;
    }
}

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR (void)
{
    uint8_t receivedData = 0;
    switch (__even_in_range(UCA1IV,4))
    {
        //Vector 2 - RXIFG
        case 2:
            receivedData = USCI_A_UART_receiveData(USCI_A1_BASE);
            USCI_A_UART_transmitData(USCI_A1_BASE,receivedData);
            break;
        default:
            break;
    }
}

串口1所在位置

可能有些人发现P4.4和P4.5位置找不到,其实是在开发板这个地方。这里有跳线帽连着,需要把跳线帽摘下来,然后连接上USB转串口的模块。 

msp430库函数手册,MSP430F5529,学习,单片机文章来源地址https://www.toymoban.com/news/detail-570054.html

到了这里,关于MSP430F5529库函数学习——串口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

    平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) (1)5个时钟来源         时钟系统模块具有5个时钟来源。 ① XT1CLK :低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK :内部超低功耗低频振荡

    2024年02月16日
    浏览(51)
  • MSP430F5529学习笔记(6)——导入MSP430Ware,查看例程

    MSP430WARE下载; 目录 在线版本 下载MSP430Ware 查看例程 导入例程  离线版本 下载MSP430Ware  查看例程 导入例程 MSP430Ware里面有很多例程和库函数使用手册,我们可以查看学习。非常重要 (1) 打开CCS——view——Resource Explorer  之后我们会进入如下界面 (2)  点击MSP430——Embe

    2024年02月13日
    浏览(54)
  • msp430f5529学习笔记(2)时钟系统

    写在前~本章将会详细的讲解msp430f5529单片机的时钟系统及其使用方法。如有不妥的地方欢迎各位大佬斧正!!! 目录 什么是时钟系统和时钟源 MSP430f5529时钟源和时钟系统介绍 产生时钟信号的时钟源: 时钟配置        在单片机中,单片机每开始一个周期的工作就需要一个节

    2024年02月17日
    浏览(45)
  • MSP430F5529库函数定时器A——捕获实验

    需提前学习:MSP430F5529库函数学习——串口;MSP430F5529库函数定时器A——硬件PWM 目录 引脚手册获取 实验目的 代码 代码解析 串口数据发送部分 数据捕获部分 定时器部分可选参数 设置定时器部分 捕获部分可选参数 设置捕获引脚部分 中断处理 TA2IV_TACCR2解析 TA2IV_TAIFG解析 主函

    2024年02月13日
    浏览(40)
  • MSP430F5529单片机入门学习笔记1

    本笔记整理自B站教程 MSP430F5529单片机学习视频汇总 右边部分写错了,看的时候注意 注意#include“driverlib.h”头文件时要注意: 添加MSP430F5xx_6xx文件夹到当前工程下 MSP430F5xx_6xx文件夹是在导入的msp430ware_3_80_13_03包中找 把上述MSP430F5xx_6xx文件夹的路径包含进来 有三个系统时钟可

    2024年02月06日
    浏览(47)
  • 【2023电赛备赛】msp430f5529学习笔记(一)

    【写在前】 本人目前是大二在读生,第一次参加电赛,准备不充分,结果熬了四天,最后成绩却不如人意。有51和32的基础,然后想立一个flag系统的学习一下主打超低功耗的msp430f5529单片机为比赛做准备(毕竟电赛限制TI的板子)。另一方面也是给电协的后继者留下一些参考的

    2024年02月11日
    浏览(47)
  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看:MSP430F5529库函数学习——串口   目录 代码 ADC初始化部分 引脚复位 ADC12_A_init() 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable() ADC12_A_setupSamplingTimer() ADC12_A_configureMemory() memoryBufferControlIndex  inputSourceSelect positiveRefVolta

    2024年02月16日
    浏览(49)
  • MSP430F5529库函数定时器A——硬件PWM

    需提前学习:MSP430F5529库函数定时器A——定时中断;引脚手册获取; 目录 先上代码 详解 引脚复用 选择引脚 获取引脚手册 看手册  时钟选择 分频 周期 REGISTER选择 比较输出模式 模式类型  增计数模式下的比较输出 连续计数模式下的比较输出 增减计数模式下的比较输出 占

    2024年02月16日
    浏览(59)
  • MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

    ​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,

    2024年02月16日
    浏览(49)
  • MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕

    平台:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) P3.0为SDA,P3.1为SCL OLED.c OLED.h OLED_Font.h

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包