欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 细说ARM MCU的串口发送数据的实现过程

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

2024/10/25 18:30:00 来源:https://blog.csdn.net/wenchm/article/details/139598451  浏览:    关键词:细说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次数据正确提示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com