波特率自适应

TTMAKER 2015-08-19 10:16:45
我准备做一个波特率自适应的串口通信程序,在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);
}
}
...全文
388 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
TTMAKER 2015-08-19
  • 打赏
  • 举报
回复
谢谢!!!!!!!
  • 打赏
  • 举报
回复
你的while(1)的退出条件呢?
jiqiang01234 2015-08-19
  • 打赏
  • 举报
回复
版块发错了,到“嵌入式/硬件”

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧