bl2019 发表于 2019-6-22 13:45:53

STM32F091RCT6的8个串口收发干扰问题

本帖最后由 bl2019 于 2019-7-2 13:36 编辑

通过串口1为主串口发送到设备,其他的7个串口作为子串口接收上位机数据,都通过中断接收发送,现在的问题是,不用的串口的中断在代码中必须屏蔽掉,否则就会使另外的串口发送数据或者接收数据延迟或者卡死,半个月了一直不明白为什么,中断中对数据的处理都是复制粘贴改一下串口名的,不存在处理不相同。只要屏蔽掉不用的串口就什么事情都没有,不屏蔽掉就会丢数据。

发表于 2019-6-22 14:01:31

楼主怎么写的中断,理论是不会的。最好把中断中的代码贴出来。

bl2019 发表于 2019-6-22 14:24:18

本帖最后由 bl2019 于 2019-7-1 15:58 编辑

void USART1_IRQHandler()
{
      if(USART_GetITStatus(USART1, USART_IT_RXNE)!=RESET)//接收数据
      {
      
                rx_buf1 = USART_ReceiveData(USART1);
               
      }
}

bl2019 发表于 2019-6-22 14:25:05

安 发表于 2019-6-22 14:01
楼主怎么写的中断,理论是不会的。最好把中断中的代码贴出来。

见三楼

wenyangzeng 发表于 2019-6-22 14:57:21

本帖最后由 wenyangzeng 于 2019-6-22 15:00 编辑

接收中断里的变量usart1_index貌似未限制长度,rx_buf1[]数组很容易越界的。

bl2019 发表于 2019-6-22 15:04:37

wenyangzeng 发表于 2019-6-22 14:57
接收中断里的变量usart1_index貌似未限制长度,rx_buf1[]数组很容易越界的。

我用定时器判断接收完成,接收完成后,每次首先将uart1_index清零

wenyangzeng 发表于 2019-6-22 15:10:33

bl2019 发表于 2019-6-22 15:04
我用定时器判断接收完成,接收完成后,每次首先将uart1_index清零

接收完成使用定时器来判断确实不是好主意,有时接收已经完成而定时器中断还未到来,况且有8个Usart,大家一起来中断,定时器应付得了吗?

bl2019 发表于 2019-6-22 15:17:21

wenyangzeng 发表于 2019-6-22 15:10
接收完成使用定时器来判断确实不是好主意,有时接收已经完成而定时器中断还未到来,况且有8个Usart,大家 ...

有这种可能,我改一下,谢谢

衔胆栖冰 发表于 2019-6-23 15:03:49

为什么不用DMA

bl2019 发表于 2019-6-24 08:57:49

衔胆栖冰 发表于 2019-6-23 15:03
为什么不用DMA

需求不能
页: [1] 2
查看完整版本: STM32F091RCT6的8个串口收发干扰问题