串口数据发送放在定时器中断中,导致死循环,程序出不来,500ms进一次定时器中断

2019-07-20 08:21发布

//定时器3中断 500ms进一次
void TIM3_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//检查TIM3更新中断发生与否  
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update);// 清除TIM3更新中断标志
//                LED0 = !LED0;
                RS485_Send_Data(RS485_TX_BUF,8);

        }
}

//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len)
{
        u8 t;
        RS485_TX_EN = 1;                        //设置为发送模式
          for(t=0; t<len; t++)                //循环发送数据
        {                       
                while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);        //程序死在这里,出不去!!!!!  
                USART_SendData(USART2,buf[t]);

        }         
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);//等待发送完成               
        RS485_RX_CNT = 0;          //数据长度清零
        RS485_TX_EN = 0;         //设置为接收模式               
}
程序在这里出不去:
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);        //程序死在这里,出不去!!!!!  
什么原因啊,RS485_Send_Data(RS485_TX_BUF,8);放在主循环中就没问题,把它放在定时器中断中就不可以,为什么?来个大神讲讲吧,小白一个,唉


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
风忆柔情
1楼-- · 2019-07-21 09:50
程序帅霸霸 发表于 2018-5-4 17:49
中断的优先级设没。或者if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接受数据必须是0x0d,0x ...

中断分组设为2,定时中断抢占和响应都为3,串口中断设为2,串口接收中断暂时屏蔽,应该不是接收的事,现在是发送数据有问题,单步调试发现,只发送了一个字节然后就卡住了
JImLu
2楼-- · 2019-07-21 13:14
 精彩回答 2  元偷偷看……

一周热门 更多>