在人员监控设备研发过程中,如何使用自适应波特率?

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在人员监控设备研发过程中,如何使用自适应波特率?相关的知识,希望对你有一定的参考价值。

笔者最近在忙着人员监控设备的研发工作。人员监控设备具有很多实用功能,例如可以实时精确定位人员的位置情况,对于年纪大的老人、需要被监管的孩子或是园区内的工人都非常的适用。管理者只需要通过云端后台就可以实时可视化的了解到被监管人员的位置情况,误差不会超过5米。
在这里插入图片描述
管理者还可以设置电子围栏,被监管人员如果超过电子围栏区域,人员监控设备就会发出报警提醒,管理者也会及时收到提醒。这可以适用在工业园区危险区域监管、矿山施工危险区域监控、取保候审人员移动位置监管、老年痴呆老人移动位置监管的多种应用环境之中。
在这里插入图片描述
我们在进行人员监控设备的单片机开发过程中,需要使用自适应波特率。相信很多产品研发人员都需要进行这个操作。那么具体如何实时呢?下面笔者来进行详细的阐述。

自适应波特率使用方法
在单片机开发过程中,串口是使用最多的通信方法,有时候产品的波特率并不是固定的,因此有时候会使用的自适应波特率,下面介绍一种自适应波特率的方法。
在这里插入图片描述

u32 USART1_Baud(void)

{

u16 t1=0,t2,t=0; // 定时器寄存器为16位

u32 b1,b2;

u32 i;

GPIO_Init(GPIOA, 10, GPIO_IN_FLOAT); // GPIOA.10浮空输入

TIM_Open(Tim3); // 开TIM3的时钟

TIM_Enable(TIM3); // 开启TIM3

b1 = GPIO_Pin_Get(GPIOA,10); // 读GPIOA.10的电平

for(i=0;i<32;) // 连续检测GPIO.10引脚32次电平变更

{

b2 = GPIO_Pin_Get(GPIOA,10); // 读GPIOA.10的新值

if(b2 != b1) // 如果有电平变更

{

t2 = TIM3->COUNT; // 读定时器中的值

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++; // 电平变更数+1

}

}

TIM_Close(Tim3); // 关闭TIM3的时钟

return ((u32)t*403/400);

// 修正波特率值(加上电平变更的斜率,大概为0.75%,经验值)

}

上述函数返回值直接填入串口波特率寄存器即可,以上算出的波特率与实际有一定偏差,但不影响正常通讯。

以上是关于在人员监控设备研发过程中,如何使用自适应波特率?的主要内容,如果未能解决你的问题,请参考以下文章

在人员监控设备的研发中,如何进行低功耗处理?

在人员监控设备研发中,如何对单片机的通用定时器进行配置?

资产监测设备研发中,如何提高光照监测精确度

对话巨杉核心研发团队:分布式数据库自研之路

浅谈移动端的自适应问题——响应式rem/em利用Js动态实现移动端自适应

喜马拉雅自研网关架构演进过程