用的是STM32CUBEMX 5.3.0版做的工程,在实验STM32F103VCT6的串口空闲中断 一直不成功,附件1,是下载别人的工程不是用CUBE做的,没有问题,空闲中断可以正常进入,我又实验我的老的一些工程,也可以正常进入的。 附件2 是用CUBEMX 做的工程,串口的一字节一中断 是正常的,打开IDEL 不正常。 不想用DMA +IDEL,哪位有空又兴趣帮看下,或是非用CUBE 做的非DMA的 IDEL 中断工程给一个研究下,谢了。 主程序里打开了 __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); 在串口中断函数里放了2个计数器,没打印,用跟踪的方式在观察那2个计数器了,比如一次发了5个字节,就可以看到一个计数器增了5(5字节),令一个计数器增了1(一帧)。 而用CUBE 做的工程, if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)!= RESET) { ReceiveDATA=(uint8_t)(USART1->DR & 0x1FF); buf[tk++]=ReceiveDATA; tk2++; } if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_IDLE)!= RESET) { USART1->SR; USART1->DR; tk=0; tk1++; // __HAL_UART_CLEAR_IDLEFLAG(&huart1); // __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_IDLE); } 如果是采用if() if() 并列的,2个计数器就会同步增长。而采用if() else if() , 只有if()进去了。 |
也跟踪寄存器了,水平有限,我看到的都是没问题的。