波特率自适应
我准备做一个波特率自适应的串口通信程序,在STM32芯片上,但是在测波特率时,总是死循环,
原理是:在给定的UART的电平跃变中,找到一个孤立的"0"或"1"位,测出它所占的时间,就是我们要自适应的波特率
求各位大神帮忙指点指点啊
下面是程序:
void GPIOA_10_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
u32 USART1_Baud(void)
{
u16 t1=0,t2,t=0;
u32 b1,b2;
u32 i;
TIMER3_Init();
b1 = GPIO_ReadInputDataBit(GPIOA,10);
for(i=0;i<32;)
{
b2 = GPIO_ReadInputDataBit(GPIOA,10);
if(b2 != b1)
{
t2 = TIM3->CNT;
b1 = b2;
if((t1 == 0)&&(t==0))
{
t1 = t2;
}
else
{
if(t == 0)
{
t = t2-t1;
}
else
{
if((t2-t1)< t)
{
t = t2-t1;
}
}
t1 = t2;
}
i++;
}
}
TIM_Close(TIM3);
return ((u32)t*403/400);
}
int main()
{
KEY_Init();
GPIOA_10_init();
LED_Init();
delay_init();
while(1)
{
if(KEY0==0)
{
USART1_Baud();
}
LED0=!LED0;
delay_ms(100);
}
}