MSPM0L1306例程学习系列
1.背景介绍
写在前边的话:
- 这个系列比较简单,主要是围绕TI官网给出的SDK例程进行讲解和注释。并没有针对模块的具体使用方法进行描述。
- 所有的例程均来自MSPM0 SDK的安装包,具体可到官网下载并安装: https://www.ti.com.cn/tool/cn/download/MSPM0-SDK/
- 因为例程多数包含sysconfig文件,也就是配合图形配置工具进行的外设初始化。因此在学习时,不能只看主函数的代码,还要重点看下系统是怎么配置的。因此,每个例程都有一部分内容是PPT截图,来讲解图形配置文件。
- 使用时,可以直接把添加注释的代码拷贝到自己的工程中进行阅读,比较方便。
UART部分的例程有10个,按照内容顺序重新排序整理如下:
2.例程描述
本节讲解的例程是uart_rw_multibyte_fifo_poll.c。
UART模块通过FIFO+查询方式收发字符串的功能演示。启用了内部环回(RX和TX内部短接),MCU发什么就收什么。
3.SysConig配置描述
各部分的配置如下:
4.代码注释
代码简单注释如下:
/** UART模块使用的SDK例程* 文件名:uart_rw_multibyte_fifo_poll.c* 描述:* UART模块通过FIFO+查询方式收发字符串的功能演示。* 1、系统的时钟配置:LFCLK=32kHz,MCLK=ULPCLK=CPUCLK=32MHz;* 2、串口的基本配置:BUSCLK, 波特率9600,数据位8,无校验位,停止位1,未使用硬件流控* 3、使用UART0,发送和接收,引脚为RX-PA9, TX-PA8* 使用发送FIFO和接收FIFO,未使用中断,未使用DMA;* 4、PA0引脚连接有LED灯;** 操作描述:* 1、下载程序,设置断点;* 2、添加数组txPacket和rxPacket到变量观察窗口;* 3、点击RUN全速运行;* 4、查看变量;** 注意事项:* 1、可以直接通过设置断点的方式来观察实验现象;* 2、如果不用环回模式,那么可以配合串口助手来做相关实验;* 3、PC端需要安装串口调试助手;* 也可以直接使用CCS的调试终端, 菜单栏/View/Terminal 打开新的窗口,Open a terminal...** 思考:* 1、不用环回模式,实验应该怎么设计?* 2、如果数组长度超过了4个,怎么办?** 修改:* 基于官方的sdk例程增加注释,xie_sx@126.com**/#include "ti_msp_dl_config.h"//宏定义:配置系统环回模式
//RX外部引脚会断开,外部发来的数据被忽略
#define ENABLE_LOOPBACK_MODE true//宏定义:数据包的大小
//例程使用查询FIFO的方式,FIFO最大深度为4
#define UART_PACKET_SIZE (4)//延时5ms,确保在启动传输前,UART TX处于空闲状态
#define UART_TX_DELAY (160000)//数组,存放要发送的数据
uint8_t txPacket[UART_PACKET_SIZE] = {'M', 'S', 'P', '!'};//数组,存放接收的数据
uint8_t rxPacket[UART_PACKET_SIZE];int main(void)
{//SysConfig图形配置工具初始化配置函数SYSCFG_DL_init();//延时(可选),系统启动后等待TX准备OKdelay_cycles(UART_TX_DELAY);//通过宏定义配置是否启用内部环回模式,即内部RX接TX
#if (ENABLE_LOOPBACK_MODE == true)DL_UART_enableLoopbackMode(UART_0_INST);
#endif//点亮LED灯,指示传输开始DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);//往TX FIFO中写入数据并传输数据//往发送数据寄存器写数据就自动发送(FIFO不需要用户参与)DL_UART_Main_fillTXFIFO(UART_0_INST, &txPacket[0], UART_PACKET_SIZE);//等待所有的字节被传输并且TX FIFO为空//非busy状态,说明数据已经传输完成while (DL_UART_Main_isBusy(UART_0_INST));//等待UART接收数据并读取//读取RXFIFO中的数据,循环读取UART_PACKET_SIZE次for (uint8_t i = 0; i < UART_PACKET_SIZE; i++){rxPacket[i] = DL_UART_receiveDataBlocking(UART_0_INST);}//传输成功后,led灯闪烁指示while (1){DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);delay_cycles(5000000);}
}
5.实验现象