请教一个STM32F030F4的串口问题

2019-12-27 18:45发布

节选了部分程序,
如果设置断点了,此问题就暴露不出来。
请见星号标注处,我加了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;


                }
0条回答

一周热门 更多>