【自学】mspm0——串口通信

本文用于自学,资料均来自网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CCS配置:
在这里插入图片描述
在这里插入图片描述
参数介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码编写:

volatile unsigned char uart_data = 0;//定义接收数组

void uart0_send_char(char ch); //串口0发送单个字符
void uart0_send_string(char* str); //串口0发送字符串

//清除串口中断标志
    NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
    //使能串口中断
    NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
   
//串口发送单个字符
void uart0_send_char(char ch)
{
    //当串口0忙的时候等待,不忙的时候再发送传进来的字符
    while( DL_UART_isBusy(UART_0_INST) == true );
    //发送单个字符
    DL_UART_Main_transmitData(UART_0_INST, ch);
}
//串口发送字符串
void uart0_send_string(char* str)
{
    //当前字符串地址不在结尾 并且 字符串首地址不为空
    while(*str!=0&&str!=0)
    {
        //发送字符串首地址中的字符,并且在发送完成之后首地址自增
        uart0_send_char(*str++);
    }
}

//串口的中断服务函数
void UART_0_INST_IRQHandler(void)
{
    //如果产生了串口中断
    switch( DL_UART_getPendingInterrupt(UART_0_INST) )
    {
        case DL_UART_IIDX_RX://如果是接收中断
            //将发送过来的数据保存在变量中
            uart_data = DL_UART_Main_receiveData(UART_0_INST);
            //将保存的数据再发送出去
            uart0_send_char(uart_data);
            break;

        default://其他的串口中断
            break;
    }
}

值得注意的是,这个串口中断是根据字符个数来触发的,也就是说,我输入11,会触发两次中断,用起来没有hal库的串口函数好用

MSPM0系列单片机是由德州仪器(Texas Instruments)推出的一类微控制器,它们通常集成了多种外设,包括通用异步收发器(UART),用于实现串口通信。UART是一种常用的串行通信协议,广泛应用于嵌入式系统中,用于与PC、传感器、蓝牙模块等设备进行数据交换。 ### UART通信的基本原理 UART通信的基本原理是通过将数据从并行形式转换为串行形式,以实现设备之间的异步通信。UART模块通常包含一个发送器(Transmitter)和一个接收器(Receiver),分别用于发送和接收数据。发送器将并行数据转换为串行数据流,而接收器则执行相反的操作。 UART通信的关键参数包括: - **波特率**(Baud Rate):每秒传输的数据位数,决定了数据传输的速度。 - **数据位**(Data Bits):每次传输的数据位数,通常是7或8位。 - **停止位**(Stop Bits):表示一个字符传输结束的位数,可以是1或2位。 - **校验位**(Parity Bit):用于错误检测的额外位,可以是偶校验、奇校验或无校验。 ### MSPM0 UART配置步骤 在MSPM0系列单片机上配置UART通信通常涉及以下几个步骤: 1. **初始化UART模块**:设置UART的工作模式、波特率、数据位、停止位和校验位。 2. **配置GPIO引脚**:将用于UART通信的GPIO引脚配置为复用功能模式。 3. **中断配置**(可选):如果需要使用中断来处理数据接收或发送完成事件,则需要配置相应的中断。 4. **数据发送与接收**:编写发送和接收数据的函数。 以下是一个简化的MSPM0 UART初始化示例代码,假设使用的是MSPM0G3507型号[^2]: ```c #include "driverlib.h" // UART配置结构体 UART_Config uartConfig; // 初始化UART void UART_Init(void) { // 配置UART参数 uartConfig.baudRate = 9600; // 设置波特率为9600 uartConfig.dataLength = UART_DATA_LENGTH_8; // 数据长度为8位 uartConfig.parity = UART_PARITY_NONE; // 无校验位 uartConfig.stopBits = UART_STOP_BITS_1; // 1个停止位 // 初始化UART模块 UART_init(UART0_BASE, &uartConfig, SYSCLK_FREQ); // 配置GPIO引脚为UART功能 GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION); // 使能UART模块 UART_enable(UART0_BASE); } ``` ### 数据发送与接收 一旦UART模块被正确初始化,就可以通过调用相应的库函数来发送和接收数据。例如,发送单个字符可以使用`UART_transmitData`函数,而接收单个字符则可以使用`UART_receiveData`函数。对于中断驱动的通信,需要编写中断服务例程来处理接收到的数据[^2]。 下面是一个简单的发送字符串的示例: ```c void UART_SendString(char *str) { while (*str) { UART_transmitData(UART0_BASE, (uint8_t)*str++); } } ``` 对于接收数据,如果使用中断方式,可以在中断服务例程中读取接收到的数据并进行处理: ```c volatile uint8_t data; void UART0_IRQHandler(void) { data = UART_receiveData(UART0_BASE); // 接收数据 UART_transmitData(UART0_BASE, data); // 回显接收到的数据,便于调试 } ``` 以上代码片段展示了如何配置MSPM0系列单片机上的UART通信,并提供了基本的数据发送和接收功能。实际应用中可能还需要考虑更多细节,如错误处理、缓冲区管理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值