谢谢各位佬的阅读,本文是我自己的理解,如果您发现错误,麻烦请您指出,谢谢
相比于串口发送,本人认为串口接收难度更高
首先谈谈我自己对于串口的理解,随便拿一个嵌入式的板子,它上面有两个引脚,一个是rx,一个是tx,rx用于接收来自上位机,也就是电脑的数据,就是我们在串口调试助手的对话框输入的东西,我们需要串口接收函数来接收读取的数据,并将这个数据存放到一个数组中供我们的后续使用
这个函数就是串口回调函数void HAL_UART_RxCpltCallBack(UART_HandleTypeDef *huart)
什么是串口回调函数?
串口中断定长&不定长接收数据
铁头山羊stm32HAL库入门教程:


当所有size个字节接收完成后,单片机会调用我们写的这个回调函数
在while循环执行的过程中,每当串口收到数据的时候,就会产生一个中断,这个中断就是
usart1 global interrupt,,每发生一次中断,就会调用一次中断响应函数HAL_UART_Receive_IT,![]()
在中断响应函数里边,我们把串口收到的数据读出来,存到dataRcvd数组中,经过5次中断后
dataRcvd接收完成,然后就会调用HAL_UART_RxCpltCallback回调函数,我们可以在回调函数中对dataRcvd数组进行处理
当然,上述写法只能每次接收固定数量的数据
当我们想接收不定长的数据时

这样形成的效果就是串口每接收到一个数据,调用一次中断响应函数,在中断响应函数中,把数据保存在刚才的变量中,然后每次都去调用这个回调函数,在回调函数中,首先对接收到的这个字节进行处理,然后再调用中断响应函数来接收下一个字节,这样就形成了一个循环,通过这种循环往复的方式,就可以接收不定长的数据
void HAL_UART_RxCpltCallBack(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
rxdata[rx_pointer++]=rxdat;//先用后加
//每次只能接收一位,每进一次中断就会把上一次

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



