MSPM0L1306例程学习-UART部分(3)

发布时间:2024年01月21日

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准备OK
    delay_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.实验现象

在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/xie_sx/article/details/135699155
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。