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

在stm32cumx中的设置如下

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

 

 

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

 

 并开启中断

初始化

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

 

在主函数中,这个函数完成串口初始化 

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

 

 这个函数先是初始化,串口通信的配置。再接着进入这个函数

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

 

 执行了这个函数

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

 这个函数则是完成了串口通信底层,硬件上的一些初始化,配置了引脚,并开启了中断

 

使能串口通信?(设置进行回调函数的条件)

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

 

 主函数中,上一个函数只不过是以非阻塞的方式发送了a1这个变量的值

关键是,后一个函数。定义一个字符数组Rx_dat作为缓冲区,参数Size设定为1。即每接收1个字符,就进入一次回调函数。

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

 没啥好说的,进入这个函数

 

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

设置串口对象的存储指向位置,空间大小,和接受计数count。并使能一些中断

当有数据来的时候,就需要依靠中断函数来处理了。

 

开始工作

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

 

 这个是串口通信的中断,生成的代码里面就一个函数,进入看看。(注意是每接收/发送一个字符进入这个中断函数(应该是这样))

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

这个函数挺长的的,就是一些判断啥的。图中这个指向的这个函数,是真正接收字符的函数

 

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

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

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

上面3张图,第一个箭头之前的,就是串口接收字符的实际操作。

第一个箭头的count的数值大小(根据后面两张图片可以得知,这个if里面是进行回调函数的调用),就是前面HAL_UART_Receive_IT函数里设置的的count的大小(这里我设置为1),可以看出,并不是每一次进入中断处理函数都会进行回调函数的调用(我是设置了缓存区为1,所以才会每进入中断处理函数都会调用回调函数)

若我改为HAL_UART_Receive_IT(&huart1,&RX_dat,10),则进入10次中断处理函数,才会调用1次回调函数

后面几个箭头,是几种不同事件的回调函数调用。我们要重写的是HAL_UART_RxCpltCallback这个会回调函数

同时有点要注意,图中画圈部分,既是将串口中断关闭了,就是每调用回调函数都会将串口中断关闭,得需要自己重新开启中断才行

 

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

重新开启串口中断,这样才可以实现多次数据返回

 

总结

  • 要注意HAL_UART_Receive_IT跟UART_Receive_IT的区别。一个是用户自己设置缓冲区的大小,进入回调函数的要求,一个是系统自身接收字符的实际操作
  • HAL_UART_Receive_IT配置后,有数据来,计数会在调用中断函数之后自动减1。只有到计数为0时,才会关闭中断并调用回调函数。至此有数据来不再调用中断函数,因为中断已经失效。
  • HAL_UART_Receive_IT和HAL_UART_Receive的区别就是:中断接收是有数据到了才去读;直接接收是直接读取,如果超时就返回
上一篇:scoket通信(基础)


下一篇:RDMA技术详解(二):RDMA Send Receive操作