STM32 UART串口在中断中能循环接收数据帧的问题
我要用STM32的串口接收一帧这样的类型的数据:01 xx xx xx xx xx xx xx FD 这个数据总长度不超过30个,但是不定长,也许是3个,也许是25个等等,结束字节是FD(数据里面没有FD)。我的程序设计是这样的,当接收到串口数据后进中断处理,循环接收数据,直到接收到的数据是FD就推出中断。程序思路如:进中断后,关闭接收中断,通过读取USART_FLAG_RXNE标志来接收数据。我现在遇到的问题是不能这样接收,不知道为什么啊????????????现在的问题是能进中断,只能接收到第一个数据,后面的数据就无法接收到了,为什么呢?比特率是9600。如果不在中断里面接收完数据的话,那么用一次只接收一个数据,好像很难处理到什么时候是这一帧的数据噢?因为数据长度是不一定的啊!!????请赐教,谢谢!!!代码如下:
void SysTick_Handler(void)
{
if (TimingDelayBuffer != 0x00)
{
TimingDelayBuffer--;
}
}
void USART1_IRQHandler (void)
{
unsigned char i = 0;
if (USART1->SR & USART_FLAG_RXNE) // read interrupt
{
USART1->CR1 &= USART_FLAG_RXNE; // Disable the USART Receive interrupt
RxCounter = 0;
RxBuffer[RxCounter++] = ((int)(USART1->DR & 0x1FF));
USART1->SR &= ~USART_FLAG_RXNE; // clear interrupt flag
for (i=0; i<30; i++)
{
SysTick->CTRL |= SysTick_Counter_Enable; //允许计数//用SysTick做的一个定时器。
TimingDelayBuffer = 1000;
while (!(USART1->SR & USART_FLAG_RXNE))
{
if (TimingDelayBuffer == 0) //定时一秒没有数据就退出
{
USART1->CR1 |= USART_FLAG_RXNE; //Eneble the USART Receive interrupt
return;
}
}
SysTick->CTRL &= SysTick_Counter_Disable; //禁止计数
SysTick->VAL = SysTick_Counter_Clear; //计数器清0
RxBuffer[RxCounter] = ((int)(USART1->DR & 0x1FF));
USART1->SR &= ~USART_FLAG_RXNE; // clear interrupt flag
if (RxBuffer[RxCounter] == 0xFD)
{
RxdDisposeFlag = 1;
return;
}
RxCounter++;
}
USART1->CR1 |= USART_FLAG_RXNE; //Eneble the USART Receive interrupt
}
}
用户377235 2013-3-18 12:55
呵呵。
用户1017182 2009-12-24 20:55
用户1409704 2009-12-22 13:46
用户1017182 2009-12-9 20:20
cnchip_906380433 2009-12-7 21:10
用户1383868 2007-5-5 09:12
C1是降压电容
R1是关断电源后C1的电荷泄放电阻