//定时器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);放在主循环中就没问题,把它放在定时器中断中就不可以,为什么?来个大神讲讲吧,小白一个,唉
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>