细说ARM MCU的串口发送数据的实现过程

目录

1、条件及工程配置 

2、实现串口发送的库函数

3、修改whlie(1)中的代码

4、修改回调函数

5、下载运行


        前面的文章介绍了用串口的接收中断来接收数据,本文介绍通过串口从MCU向外发送数据。

1、条件及工程配置 

         文章依赖的硬件及工程配置同本文作者的其他文章:细说ARM MCU的串口接收数据的实现过程-CSDN博客  https://wenchm.blog.csdn.net/article/details/139541112

        设计目的: 如果收到0x10,则MCU送出字符串:Everything is OK;如果收到的数据不是0x10,则MCU送出字符串:Received Error Data。

2、实现串口发送的库函数

        在HAL固件库中,常用的串口发送数据函数有以下两个:

HAL_UART_Transmit(*huart,pData,Size,Timeout)
HAL_UART_Transmit_IT(*huart,pData,Size)

首先在main函数前定义两个放置MCU要发送的字符的数组,可以与前面定义的RxBuffer放到相同的注释对中:

/* USER CODE BEGIN PV */
uint8_t CommOkMessage[]="Everything is OK\r\n";
uint8_t CommErrMessage[]="Received ErrorData\r\n";
uint8_t CommFlag =0;
uint8_t RxBuffer[RXBUFFERSIZE]={0};
/* USER CODE END PV */

        定义了一个用作标志的CommFlag变量。字符串后的\r和\n称为转义字符,分别指回车和换行。所谓换行,实际就是将光标转移到下一行的起始处。

        发送CommOkMessage字符串可以用如下语句:

HAL_UART_Transmit(&huart2,CommOkMessage,19,1000);

        参数中的“19”是指CommOkMessage字符串共有19个字符(加上回车、换行符以及字符串结束符),“1000”是指超时时间。

3、修改whlie(1)中的代码

        在while(1)循环中编写代码实现:如果接收到的是0x10,则发送字符串CommOkMessage;如果接收到的不是0x10,则发送字符串CommErrMessage。为了避免MCU一直往外送数据,利用标志变量CommFlag进行控制。

while(1)
{
    /* USER CODE BEGIN 3 */
    if((RxBuffer[0] == 0x10) && (CommFlag == 1))
    {
        CommFlag =0;
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
        HAL_UART_Transmit(&huart2,CommOkMessage,19,1000);
    }
    else if((RxBuffer[0] != 0x10) && (CommFlag == 1))
    {
        CommFlag = 0;
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
        HAL_UART_Transmit(&huart2,CommErrMessage,22,1000);
    }
}
/*USER CODE END 3 */

4、修改回调函数

        串口中断收到数据之后,把标志变量CommFlag的置位。可以在回调函数中将CommFlag置位:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    CommFlag = 1;
    HAL_UART_Receive_IT(&huart2,(uint8_t *)RxBuffer,RXBUFFERSIZE);
}

5、下载运行

下载、在串口助手中发送0x20,3次,收到3次错误提示;修改发送的数据为0x10,发送3次,收到3次数据正确提示。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 11:30:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 11:30:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 11:30:04       82 阅读
  4. Python语言-面向对象

    2024-06-15 11:30:04       91 阅读

热门阅读

  1. Nginx网站服务

    2024-06-15 11:30:04       32 阅读
  2. Web前端三大主流框架详解及应用

    2024-06-15 11:30:04       32 阅读
  3. C语言中的弱函数是什么?

    2024-06-15 11:30:04       34 阅读
  4. ESP8266发送WOL幻数据包实现电脑远程唤醒

    2024-06-15 11:30:04       36 阅读
  5. Unity3D MMORPG多玩家状态同步详解

    2024-06-15 11:30:04       29 阅读
  6. 在 macOS 上使用 Homebrew 安装和配置 Python 及 Tk 库

    2024-06-15 11:30:04       28 阅读
  7. ECharts 数据的视觉映射

    2024-06-15 11:30:04       34 阅读
  8. C++小游戏 合集

    2024-06-15 11:30:04       27 阅读
  9. XML 编辑器:功能、选择与使用技巧

    2024-06-15 11:30:04       32 阅读
  10. 自动驾驶基础一车辆模型

    2024-06-15 11:30:04       28 阅读
  11. 自动驾驶域控制器nvidia环境搭建

    2024-06-15 11:30:04       32 阅读
  12. 【发射火箭game】

    2024-06-15 11:30:04       36 阅读
  13. GIS之arcgis系列09:arcpy实现克里金差值

    2024-06-15 11:30:04       34 阅读