节选了部分程序,
如果设置断点了,此问题就暴露不出来。
请见星号标注处,我加了3000个Nop的空延时,后面那一句,就会ENABLE成功(2500都不行)。
现在程序虽可正常运行了,却有点不太好理解,特此请教,谢谢!
USART_ITConfig(USART1, USART_IT_TC, ENABLE); //使能USARTx USART_IT_TC发送完成中断
//发送中断
if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) //RESET = 0 检查USARTx USART_IT_TXE发送中断发生与否
{
GPIO_SetBits(GPIOA,GPIO_Pin_1); //TxInd=485 On 485转为发送模式
// Delay_me(1);
itm61=0;
USART_SendData(USART1, tx1[It1]);
It1++;
if (tx1_len == It1 || It1 > 250)
{
//发送字节结束
USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //失能USARTx USART_IT_TXE发送中断
****** DelayNop(3000);
****** USART_ITConfig(USART1, USART_IT_TC, ENABLE); //使能USARTx USART_IT_TC发送完成中断
It1=0;
tx1_fre=2;
}
//发送完成
if (USART_GetITStatus(USART1, USART_IT_TC) != RESET) //检查USARTx USART_IT_TC发送完成中断发生与否
{
USART_ClearITPendingBit(USART1,USART_IT_TC); //清除USARTx USART_IT_TC发送完成中断
USART_ITConfig(USART1, USART_IT_TC, DISABLE); //失能USARTx USART_IT_TC发送完成中断
// Delay_me(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_1); //TxInd=485 Off 485转为接收模式
tx1_fre=(tx1_fre|1);
itm61=0;
Ir1=0;
}
一周热门 更多>