OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5885|回复: 2

串口接收中断和定时器的冲突

[复制链接]

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-1-19
在线时间
0 小时
发表于 2015-8-17 15:21:42 | 显示全部楼层 |阅读模式
5金钱
串口和定时器同时运行,串口的接收数据会丢失一部分数据。我的定时器里面做的事情已经很少了,只是在里面定时发送消息。
串口一次性接收200多字节数据,中间丢了很多。如果我把定时器的发送消息的代码屏蔽,就不会有问题。
我觉得是不是定时器里面的执行的代码的时间,超过了串口接收中断接收一个字节的时间,导致了丢失数据呢。请大神帮忙解答
串口接受中断:
void  BSP_IntHandlerUART5 (void)
{
    unsigned char uart5_data = 0;

    //OS_CPU_SR  cpu_sr = 0;
    OSIntEnter();    /* Tell uC/OS-II that we are starting an ISR          */
    if(USART_GetFlagStatus(UART5,USART_IT_RXNE)==SET)
    {
      uart5_data =(CPU_INT08U) USART_ReceiveData(UART5);
#ifdef BLE_ON
        ble_irq_handler(uart5_data);//接收蓝牙数据并处理
#endif
      USART_ClearITPendingBit(UART5, USART_IT_RXNE);
    }
    OSIntExit();            /* Tell uC/OS-II that we are leaving the ISR */
}
定时器3中断处理:
void  BSP_IntHandlerTIM3 (void)
{
    //OS_CPU_SR  cpu_sr = 0;
    OSIntEnter();    /* Tell uC/OS-II that we are starting an ISR          */
    if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
    {
#ifdef LOCK_STATUS
    send_msg_by_time3();//定时发送消息
#endif
        TIM_ClearFlag(TIM3, TIM_FLAG_Update);
    }
    OSIntExit();            /* Tell uC/OS-II that we are leaving the ISR */
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-4-28
在线时间
5 小时
发表于 2015-8-17 22:10:14 | 显示全部楼层
你把串口中断的级别设得比定时器中断高就可以了啊!
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-1-19
在线时间
0 小时
 楼主| 发表于 2015-8-19 14:56:19 | 显示全部楼层
回复【2楼】Llinuxu:
---------------------------------
谢谢建议,但是我试过提高中断优先级,没有效果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 07:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表