访问电脑版页面

导航:老古开发网手机版STM32单片机STM32单片机定时器

基于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定时器的红外遥控数据接收设计原理

来源:网络整理   作者:工程师3  2018/4/30 17:52:00
栏目: [ STM32单片机定时器]

相关阅读

STM32F407定时器TIM1中断

STM32单片机使用定时器中断方式实现毫秒级延时的设计

stm32定时器中断与误区

STM32单片机输出比较模式解析

STM32定时器配置定时时间总结

STM32定时器时间的计算方法

基于STM32定时器的三种中心对齐计数模式

STM32系列芯片定时器的主要功能及应用解析

STM32定时器基本计数原理解析

STM32之系统时钟基定时器

STM32定时器原理与使用

STM32F429的定时器的使用方法

STM32单片机通用定时器的编程设计

一个关于STM32定时器的CCR清零话题

STM32单片机定时器的时钟源设置

关于STM32F4定时器时钟频率问题

基于STM32定时器实现毫秒延时函数

STM32单片机通用定时器对lED灯的翻转控制设计

stm32 系统时钟设置

STM32 TIM1 输出脉冲范例