当前位置:   article > 正文

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

细说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固件库中,常用的串口发送数据函数有以下两个:

  1. HAL_UART_Transmit(*huart,pData,Size,Timeout)
  2. HAL_UART_Transmit_IT(*huart,pData,Size)

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

  1. /* USER CODE BEGIN PV */
  2. uint8_t CommOkMessage[]="Everything is OK\r\n";
  3. uint8_t CommErrMessage[]="Received ErrorData\r\n";
  4. uint8_t CommFlag =0;
  5. uint8_t RxBuffer[RXBUFFERSIZE]={0};
  6. /* 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进行控制。

  1. while(1)
  2. {
  3. /* USER CODE BEGIN 3 */
  4. if((RxBuffer[0] == 0x10) && (CommFlag == 1))
  5. {
  6. CommFlag =0;
  7. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
  8. HAL_UART_Transmit(&huart2,CommOkMessage,19,1000);
  9. }
  10. else if((RxBuffer[0] != 0x10) && (CommFlag == 1))
  11. {
  12. CommFlag = 0;
  13. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
  14. HAL_UART_Transmit(&huart2,CommErrMessage,22,1000);
  15. }
  16. }
  17. /*USER CODE END 3 */

4、修改回调函数

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

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

5、下载运行

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/712652
推荐阅读
相关标签
  

闽ICP备14008679号