现在用STM32F0芯片,做串口接收实验。初始化中只是开了接收中断。接收中断如下所示:
volatile uint8_t Usart1RxTerm = 0;
uint32_t Usart1RxCount = 0;
uint8_t Usart1RxBuffer[256];
void USART1_IRQHandler(void)
{
if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
{
USART_ReceiveData(USART1); //(1)
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
if (0 == Usart1RxTerm)
{
Usart1RxBuffer[Usart1RxCount++] = SART_ReceiveData(USART1);
}
if(Usart1RxCount==256)
{
Usart1RxCount = 0; //(2)
Usart1RxTerm = 1;
}
}
}
程序运行后,在中断服务程序的(1)和(2)位置设置断点后全速运行。电脑使用串口助手首次发送256个字节到STM32F0可以正常运行到断点(2)。
然后电脑上串口助手再次发送256字节后,就停在断点(1)了。这是为什么?
网上说中断服务中判断到ORE时,读一次接收缓冲就行了。但是没作用啊
if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
{
USART_ReceiveData(USART1);
}
|