hpdell 发表于 2015-12-26 09:51:17

HAL_UART_Receive_IT 这个接收中断函数是在哪里调用 ??


请教下,关于这个 HAL_UART_Receive_IT接收中断函数,是在主循环里面调用还是中断 HAL_UART_IRQHandler 里面调用 ???

liuyu-419812 发表于 2015-12-26 10:02:12

这个函数只是用来开启中断接收的,接收完成后,中断函数会调用相应的接收回调函数

hpdell 发表于 2015-12-26 12:28:09

liuyu-419812 发表于 2015-12-26 10:02
这个函数只是用来开启中断接收的,接收完成后,中断函数会调用相应的接收回调函数 ...

这个刚刚试了一下,需要在主循环里面不停的调用才行,但是如果主循环程序比较大,此时如果串口接收的数据量比较大,就貌似不怎么好了,接收数据会丢失,而且程序貌似会假死,

liuyu-419812 发表于 2015-12-26 13:34:29

hpdell 发表于 2015-12-26 12:28
这个刚刚试了一下,需要在主循环里面不停的调用才行,但是如果主循环程序比较大,此时如果串口接收的数据 ...

在主循环之前调用一次,开启中断接收,然后在中断回调函数里调用,这样接收完成一次后,在开启下一次

党国特派员 发表于 2015-12-26 13:46:47

楼上的说的才是正确的。

发表于 2015-12-26 13:57:17

HAL_UART_Receive_IT 开启以后,可以通过判断RxXferCount个数,来判断是否接收完成。RxXferCount=0时,接收完成数据,这时处理数据,再重新开启接收。

hpdell 发表于 2015-12-27 16:53:10

本帖最后由 hpdell 于 2015-12-27 16:54 编辑

安 发表于 2015-12-26 13:57
HAL_UART_Receive_IT 开启以后,可以通过判断RxXferCount个数,来判断是否接收完成。RxXferCount=0时,接收 ...
你好,你说的这个方法,是在已知的情况下,但是如果我不知道串口有多少个数据来时,该如何是好啊 ????

还有感觉这个 串口中断接收数据,数据量大了后,实时性貌似没有那么好了啊 ?? 有什么比较好的方法没有 ?


anobodykey 发表于 2015-12-28 12:03:19

HAL_UART_Receive_IT一般除第一次在主函数调用后其他都是在中断函数调用的,且是每次接收一个字节,可以参考下博客:http://blog.csdn.net/anobodykey/article/details/44959527

yushan210 发表于 2015-12-28 13:49:59


HAL_UART_Receive_IT();
do{
延时;}while(接收完毕);

逍遥李 发表于 2015-12-28 14:34:44

一般都是一个字节接收然后中断中调用再次接收
页: [1] 2
查看完整版本: HAL_UART_Receive_IT 这个接收中断函数是在哪里调用 ??