实验介绍
STM32F10ZET6为主控,使用TIM定时器输入捕获功能解析红外接收NEC。
使用硬件:正点原子精英板、HS0038红外接收头。
NEC通信协议介绍
红外协议有多种,NEC是常用的通信协议,载波频率38kHZ,接收的红外协议格式如下:
引导码为13.5ms的周期,然后为16个字节的用户码以及8个字节的数据码和8个字节的数据反码。
注意:红外接收头内部的三极管电路具有反向功能,也就是0变1,1变0的过程。所以在接收数据时候可以设置为下降沿捕获。
前者为数据“1”周期为2.25ms低电平所占时间约0.56ms, 数据“0”周期为1.12ms低电平所占时间一样,此信号为反向后的信号。
定时器输入捕获
输入捕获模式可以用来测量信号周期频率以及脉冲宽度。在捕获配置中可设置为下降沿捕获,每来一个下降沿就保存一次CHxCV寄存器里面的值,然后清空寄存器值,就不需要使用第二次上升沿和第一次上升沿做差值运算。
配置流程如下:
1.配置HS0038红外接收头数据接收端口,我这里使用的为PB9,还需要对应上定时器的通道。
2.确认定时器以及通道号,我这里PB9对应TIM4的通道4。
3.初始化定时器,stm32103zet6到TIM4的时钟频率为72MHZ,我配置预分配为72 - 1,重装载为65536 - 1,为1MHZ,溢出值为655.36毫秒。
4.初始化输入捕获,配置滤波、极性、信号选择、分频,在标准库的结构体中都可配置。我这里没有设置滤波,这里的极性选择捕获下降沿;信号选择有两种,直接输入和间接输入两种,在这里有两路输入选择,直接输入就是对应的通道号所捕获的信号,间接输入可以捕获其他通道的信号,如通道一可以捕获通道二的信号,通道二也可以捕获通道一输入信号,这里两两分组通道1,2为组,通道3,4为组,使用到的场景为捕获一个周期里面高电平或者低电平所占的时长或者比例;分频也设置的默认值1。
5.功能使能