您的位置 首页 电路

根据STM32定时器的红外遥控数据接纳规划原理

基于STM32定时器的红外遥控数据接收设计原理-定时器就是按照一个特定的频率对计数值进行加一或减一操作,当数值溢出时则产生一个标志或中断。
定时器的输入捕获就是可以测量输入信号的脉冲宽度。
本次就是通过普通计数和输入捕获的结合来实现的.

一、原理

1、红外发射协议

红外发射协议已经在之前的文章中写过,在此就不赘述。

2、定时器计数和输入捕获

定时器便是依照一个特定的频率对计数值进行加一或减一操作,当数值溢出时则发生一个标志或中止。

定时器的输入捕获便是能够丈量输入信号的脉冲宽度。

本次便是经过一般计数和输入捕获的结合来完结的。

3、完结办法

运用定时器记载输入信号高脉冲的时刻,经过该时刻来判别数据是否是同步头信息、数据 1 或许数据 0。

二、完结

1、装备 定时器2 输入捕获通道

示例代码中运用 PA1 管脚,装备为上拉输入形式,复用功用为定时器2的通道2。

定时器选用一般定时器,定时器2,该定时器具有输入捕获功用。

装备定时器的两种作业形式,一个是一般计数器TIM_TImeBaseInit,一个是输入捕获形式TIM_ICInit。

装备定时器2的中止源,有两个中止源,一个是更新中止TIM_IT_Update,一个是输入捕获中止TIM_IT_CC2。

装备代码如下:

根据STM32定时器的红外遥控数据接纳规划原理

根据STM32定时器的红外遥控数据接纳规划原理

2、增加定时器2的中止服务函数

运用了两种定时器中止源,分别为计数溢出中止和输入捕获中止。可是这两种方法触发中止的中止服务函数是同一个,即void TIM2_IRQHandler(void)。

定时器运用的是 TIM2 通用定时器,形式为向上计数。在该形式中,计数器从 0 计数到主动加载值 (TIMx_ARR计数器的内容) ,然后从头从 0 开端计数而且发生一个计数器溢出事情。定时器计数溢出的周期为10ms,该中止的发生阐明在10ms内都没有输入捕获来清空计数值,也便是输入信号没有发生变化,阐明 10ms 没有收到红外信号了,因而可判别为接纳完结。

输入捕获是为了丈量高电平的持续时刻,因而选用上升沿触发中止,对计数值清零,切换下一次为下降沿触发;在下降沿触发中止时,记下计数值,切换下一次为上升沿触发。因而在下降沿记下的时刻即为高电平的时序时刻。记载高电平持续时刻的原因,是因为红外信号在表明逻辑0、逻辑1时低电平的持续时刻的相同的,而高电平的持续时刻不同的。

示例代码如下:

根据STM32定时器的红外遥控数据接纳规划原理

根据STM32定时器的红外遥控数据接纳规划原理

3、红外按键扫描函数

该函数放在主循环中,轮训判别按键是否接纳完结。假如接纳完结则开端剖析键值。

该函数回来一个16位的数值,其中低八位表明键值,高八位表明按下的次数,顺次来剖析长按键和短按键。这一点主要是经过红外协议中重复码的规则来完结的。

红外协议中规则,若按下一个键后没有铺开,则会以 108ms 为一个周期发送重复码。重复码表现为2.25ms的高电平。

示例代码如下:

根据STM32定时器的红外遥控数据接纳规划原理

根据STM32定时器的红外遥控数据接纳规划原理

4、主函数

在 main 函数中,对 IO 口和 定时器进行初始化。

主循环中,经过判别接纳完结标志位,对接纳完结的按键操控码进行打印。

SystemKeyHandle()函数处理每一个按键的操作逻辑。

示例代码如下:

根据STM32定时器的红外遥控数据接纳规划原理

三、演示

如下图为串口打印出接纳的红外按键值信息:

根据STM32定时器的红外遥控数据接纳规划原理

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/348024.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部