关于stm2cumx生成的串口通信USART的使用(1)
作者:互联网
在stm32cumx中的设置如下
并开启中断
初始化
在主函数中,这个函数完成串口初始化
这个函数先是初始化,串口通信的配置。再接着进入这个函数
执行了这个函数
这个函数则是完成了串口通信底层,硬件上的一些初始化,配置了引脚,并开启了中断
使能串口通信?(设置进行回调函数的条件)
主函数中,上一个函数只不过是以非阻塞的方式发送了a1这个变量的值
关键是,后一个函数。定义一个字符数组Rx_dat作为缓冲区,参数Size设定为1。即每接收1个字符,就进入一次回调函数。
没啥好说的,进入这个函数
设置串口对象的存储指向位置,空间大小,和接受计数count。并使能一些中断
当有数据来的时候,就需要依靠中断函数来处理了。
开始工作
这个是串口通信的中断,生成的代码里面就一个函数,进入看看。(注意是每接收/发送一个字符进入这个中断函数(应该是这样))
这个函数挺长的的,就是一些判断啥的。图中这个指向的这个函数,是真正接收字符的函数
上面3张图,第一个箭头之前的,就是串口接收字符的实际操作。
第一个箭头的count的数值大小(根据后面两张图片可以得知,这个if里面是进行回调函数的调用),就是前面HAL_UART_Receive_IT函数里设置的的count的大小(这里我设置为1),可以看出,并不是每一次进入中断处理函数都会进行回调函数的调用(我是设置了缓存区为1,所以才会每进入中断处理函数都会调用回调函数)
若我改为HAL_UART_Receive_IT(&huart1,&RX_dat,10),则进入10次中断处理函数,才会调用1次回调函数
后面几个箭头,是几种不同事件的回调函数调用。我们要重写的是HAL_UART_RxCpltCallback这个会回调函数
同时有点要注意,图中画圈部分,既是将串口中断关闭了,就是每调用回调函数都会将串口中断关闭,得需要自己重新开启中断才行
重新开启串口中断,这样才可以实现多次数据返回
总结
- 要注意HAL_UART_Receive_IT跟UART_Receive_IT的区别。一个是用户自己设置缓冲区的大小,进入回调函数的要求,一个是系统自身接收字符的实际操作
- HAL_UART_Receive_IT配置后,有数据来,计数会在调用中断函数之后自动减1。只有到计数为0时,才会关闭中断并调用回调函数。至此有数据来不再调用中断函数,因为中断已经失效。
- HAL_UART_Receive_IT和HAL_UART_Receive的区别就是:中断接收是有数据到了才去读;直接接收是直接读取,如果超时就返回
标签:HAL,函数,USART,中断,串口,Receive,UART,stm2cumx 来源: https://www.cnblogs.com/KingZhan/p/15614860.html