STM32F0串口中断接收的奇怪问题
本帖最后由 eagle0754 于 2015-3-24 21:22 编辑现在用STM32F0芯片,做串口接收实验。初始化中只是开了接收中断。接收中断如下所示:
volatile uint8_t Usart1RxTerm = 0;
uint32_t Usart1RxCount = 0;
uint8_t Usart1RxBuffer;
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 = 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);
}
不懂帮顶 路过帮顶!!! 第二次停在了断点1……是不是就说你ORE置位了? 咋感觉是这个的问题volatile ,不太懂:lol:lol:lol 帮顶吧,顺便学习学习 先读取数据,然后再清除溢出标志位。 安 发表于 2015-3-25 10:16
先读取数据,然后再清除溢出标志位。
谢谢版主,这个中断没有问题。是外部清接收完标志时出错 if (0 == Usart1RxTerm)
{
Usart1RxBuffer = SART_ReceiveData(USART1);
}
这里注意,你把Usart1RxTerm = 1;数据不在接收,这里可以改为,
c=SART_ReceiveData(USART1);
if (0 == Usart1RxTerm)
{
Usart1RxBuffer = c;
}
这样就可以了.
支持
页:
[1]
2