串口通信函数汇总-ing

 谢谢各位佬的阅读,本文是我自己的理解,如果您发现错误,麻烦请您指出,谢谢

相比于串口发送,本人认为串口接收难度更高

首先谈谈我自己对于串口的理解,随便拿一个嵌入式的板子,它上面有两个引脚,一个是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;//先用后加
        //每次只能接收一位,每进一次中断就会把上一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值