| 
 
| 前两天看别的东西了,没来得及写,现在发上来,请看一下。 问题如下:使用USART1发送一串数据(这里是30个),发送到不定个数量时(有时12,有时18,有时其他),会产生一个IDLE中断。
 main function:
 int main(void)
 {
 #ifdef DEBUG
 debug();
 #endif
 
 /* System Clocks Configuration */
 RCC_Configuration();
 
 /* NVIC configuration */
 NVIC_Configuration();
 
 /* Configure the GPIO ports */
 GPIO_Configuration();
 GPIO_SetBits(GPIOC,GPIO_Pin_7);
 
 USART_InitStructure.USART_BaudRate = 9600;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 USART_InitStructure.USART_Clock = USART_Clock_Disable;
 USART_InitStructure.USART_CPOL = USART_CPOL_Low;
 USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
 USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
 
 /* Configure USART1 */
 USART_Init(USART1, &USART_InitStructure);
 
 
 /* Enable the USART1 */
 USART_Cmd(USART1, ENABLE);
 i = USART_ReceiveData(USART1);
 USART_SendData(USART1, TxBuffer[TxCounter]);
 TxCounter += 1;
 USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
 
 USART_ITConfig(USART1,USART_IT_TC,ENABLE);
 
 while (1)
 {
 }
 }
 interrupt function:
 void USART1_IRQHandler(void)
 {
 if((USART_GetITStatus(USART1, USART_IT_TC) != RESET) && (GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7) == 1))
 {
 USART_ClearITPendingBit(USART1, USART_IT_TC);
 USART_SendData(USART1, TxBuffer[TxCounter]);
 TxCounter += 1;
 if(TxCounter > 29)
 {
 USART_ITConfig(USART1, USART_IT_TC, DISABLE);
 TxCounter =0;
 }
 }
 else if(USART_GetITStatus(USART1,USART_IT_IDLE) != RESET)
 {
 TxCounter = 40;
 }
 }
 
 
 | 
 |