你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
bl2019 提问时间:2019-6-22 13:45 /
本帖最后由 bl2019 于 2019-7-2 13:36 编辑

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

举报

13个回答
废鱼 回答时间: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[uart1_index] = 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,大家一起来中断,定时器应付得了吗?

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

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

有这种可能,我改一下,谢谢
衔胆栖冰 回答时间:2019-6-23 15:03:49
为什么不用DMA

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

bl2019 回答时间:2019-6-24 08:57:49

需求不能
废鱼 回答时间:2019-6-24 09:44:43
问一下,发送中断是不是初始化时开启的?如果是,建议在if(uart1_count>0)增加else处理,进入后关闭串口中断。
bl2019 回答时间:2019-6-24 10:06:59
本帖最后由 bl2019 于 2019-7-1 15:59 编辑
安 发表于 2019-6-24 09:44
问一下,发送中断是不是初始化时开启的?如果是,建议在if(uart1_count>0)增加else处理,进入后关闭串口中 ...

void Uart1_Send(void)
{
        USART_SendData(USART1, tx_buf1[0]);
       USART_ITConfig(USART1, USART_IT_TC, ENABLE);
}
我是这么干的
废鱼 回答时间:2019-6-24 10:37:33
本帖最后由 安 于 2019-6-24 10:39 编辑

uart1_count这个怎么处理的?如果这个是0.那么就关闭不了中断了。楼主仿真一下,是不是一直在串口中断中运行。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

bl2019 回答时间:2019-6-26 08:06:59
解决了,但是该怎么结贴呢
说一下怎么解决的,修改了上位机,加长了帧之间的间隔,换了新版子,程序没有变动,就可以了
虽然解决了,但是我还是不知道问题出在那
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版