ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于stm2cumx生成的串口通信USART的使用(1)

2021-11-28 13:31:35  阅读:161  来源: 互联网

标签:HAL 函数 USART 中断 串口 Receive UART stm2cumx


在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有