你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
查看全部评分
zhao.zhao 发表于 2018-4-20 16:44 HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 10);//6 这个函数是每次串口1接收到了设置的10个字节 ...
uglyclown 发表于 2018-7-7 15:51 那为什么把10改成1就好了
zhao.zhao 发表于 2018-8-12 10:41 传统串口应该是接收1个字节,中断一次,如果你的程序是这样设计的,就把10改成1就可以了。 其实本质上这 ...
ringsp 发表于 2018-8-12 11:59 改成1之后,如果在接收回调函数里面做数据解析并给线程发送消息,那么很可能紧接着的第二个字节overflow ...
cczhw 发表于 2018-8-21 08:53 那是你没做好。
ringsp 发表于 2018-9-8 07:10 一大帮干单片机的,看到st的驱动库惊为高科技。用过环形队列做串口收发吗?真正理解钩子函数吗?用过链表 ...
反正当上次接收还没有结束的时候调了也没用,但是当上次接收结束了,调一下又进入接收状态了呀,本来HAL库就是这么设计的。
非要在中断回调中再开启中断接收,似乎没有必要。而且万一这个时候由于其他原因串口接收被占了,你调用中断接收失败,整个链条就断了。还是放在while(1)中保险。
评分
查看全部评分
那为什么把10改成1就好了
传统串口应该是接收1个字节,中断一次,如果你的程序是这样设计的,就把10改成1就可以了。
其实本质上这个串口也是接收1个字节,中断一次的,只不过接收的字符没有达到用户设定的数量时,它没有进入接收中断回调函数。
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 10);
用上面这个函数设置也就在接收定长帧数据时比较方便。不定长的帧数据为了避免遗漏数据,确实要把10改成1的。
改成1之后,如果在接收回调函数里面做数据解析并给线程发送消息,那么很可能紧接着的第二个字节overflow,因为串口只有1个字节的硬件FIFO,非常奇怪st的库用的那么广,难道大家都没遇到问题吗?
那是你没做好。
一大帮干单片机的,看到st的驱动库惊为高科技。用过环形队列做串口收发吗?真正理解钩子函数吗?用过链表数据结构吗?用过动态内存分配吗?对编译器和arm架构理解吗?有没有用散转文件去定义程序段和数据段的位置?用cube生成一个上百M的工程上来就可以写print hello world就是高手了?
DMA了解一下
void MX_USART1_UART_Init(void) 函数中最后增加
void USART1_CharReception_Callback(void)
这个函数就可以了