STM32F091RCT6的8个串口收发干扰问题
本帖最后由 bl2019 于 2019-7-2 13:36 编辑通过串口1为主串口发送到设备,其他的7个串口作为子串口接收上位机数据,都通过中断接收发送,现在的问题是,不用的串口的中断在代码中必须屏蔽掉,否则就会使另外的串口发送数据或者接收数据延迟或者卡死,半个月了一直不明白为什么,中断中对数据的处理都是复制粘贴改一下串口名的,不存在处理不相同。只要屏蔽掉不用的串口就什么事情都没有,不屏蔽掉就会丢数据。
楼主怎么写的中断,理论是不会的。最好把中断中的代码贴出来。 本帖最后由 bl2019 于 2019-7-1 15:58 编辑
void USART1_IRQHandler()
{
if(USART_GetITStatus(USART1, USART_IT_RXNE)!=RESET)//接收数据
{
rx_buf1 = USART_ReceiveData(USART1);
}
} 安 发表于 2019-6-22 14:01
楼主怎么写的中断,理论是不会的。最好把中断中的代码贴出来。
见三楼 本帖最后由 wenyangzeng 于 2019-6-22 15:00 编辑
接收中断里的变量usart1_index貌似未限制长度,rx_buf1[]数组很容易越界的。 wenyangzeng 发表于 2019-6-22 14:57
接收中断里的变量usart1_index貌似未限制长度,rx_buf1[]数组很容易越界的。
我用定时器判断接收完成,接收完成后,每次首先将uart1_index清零
bl2019 发表于 2019-6-22 15:04
我用定时器判断接收完成,接收完成后,每次首先将uart1_index清零
接收完成使用定时器来判断确实不是好主意,有时接收已经完成而定时器中断还未到来,况且有8个Usart,大家一起来中断,定时器应付得了吗? wenyangzeng 发表于 2019-6-22 15:10
接收完成使用定时器来判断确实不是好主意,有时接收已经完成而定时器中断还未到来,况且有8个Usart,大家 ...
有这种可能,我改一下,谢谢
为什么不用DMA 衔胆栖冰 发表于 2019-6-23 15:03
为什么不用DMA
需求不能
页:
[1]
2