赞
踩
NEC Protocol是目前广泛使用的红外遥控的编码,其载波频率位为38khz,即每秒可产生38000个脉冲,每个脉冲周期为:1000000us/38000=26.3us。
NEC协议采用脉冲间隔的方式编码每一位数据,用不同数据位的时间间隔来表示不同的逻辑位。
发送的数据高位在前。
注:遥控接收头在收到脉冲的时候为低电平,在空闲的时候为高电平。
逻辑"0":562.5µs的有效脉冲 + 562.5µs的空闲间隔,总时长为1.125ms。
逻辑"1":562.5µs的有效脉冲 + 1.6875ms的空闲间隔,总时长为2.25ms。
起始位:9ms的有效脉冲 + 4.5ms的空闲间隔,总时长为13.5ms。
以此为基础,NEC发送一帧数据:起始位 + 地址码 + 地址码反码 + 命令码 + 命令码反码
重复码:当一直按着一个按键不放,在发送了一帧数据后,每隔110ms会发一个重复码。
9ms的有效脉冲 + 2.25ms的空闲间隔 ,总时长为11.25ms。
原理图如下:
STM32CubeMX配置如下:
分频系数为71,而主频为72mhz,因此定时器频率为72mhz/(71+1)=1mhz,即每1µs计数一次。
计数方式为向上计数。
自动加载值为最大值65535,65.535µs会溢出,大于所有的逻辑位,因此不用担心溢出问题。
使能自动加载。
下降沿触发。
使能中断、引脚设置上拉。
在TIM3初始化后启动输入捕获
- /* USER CODE BEGIN TIM3_Init 2 */
-
- HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_3); //启动输入捕获
-
- /* USER CODE END TIM3_Init 2 */
定义全局变量
- uint16_t IRTimer_Data = 0;//存放计数值
- uint32_t IRCode = 0;//存放红外码
- uint8_t IR_Flag = 0;//IR解析完成标志位
- uint8_t IR_LeaderCode = 0;
中断处理函数及解析函数
- /* USER CODE BEGIN 4 */
- void Paser_IRCode(uint16_t PData)
- {
- if((PData>12000)&&(PData<15000))//获得引导码,理论值13500
- IR_LeaderCode = 1;
-
- if(IR_LeaderCode==1)
- {
- if((PData>1000)&&(PData<1300))//0,理论值1125
- {
- IRCode=(IRCode<<1);
- i++;
- }
- else if((PData>2000)&&(PData<2500))//1,理论值2250
- {
- IRCode = (IRCode<<1)|0x01;
- i++;
- }
- if(i==32)
- {
- i = 0;
- IR_LeaderCode = 0;
- IR_Flag = 1;
- }
- }
- }
-
- void TIM_IRQHandler(void)
- {
- IRTimer_Data = HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_3);//获取当前的捕获值.
- __HAL_TIM_SET_COUNTER(&htim3,0); //设置计数寄存器的值变为0
- Paser_IRCode(IRTimer_Data);
- }
记得将函数放进中断函数里面
- void TIM3_IRQHandler(void)
- {
- /* USER CODE BEGIN TIM3_IRQn 0 */
-
- /* USER CODE END TIM3_IRQn 0 */
- TIM_IRQHandler();
- /* USER CODE BEGIN TIM3_IRQn 1 */
-
- /* USER CODE END TIM3_IRQn 1 */
- }
在main函数里打印NEC码
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
-
- if(IR_Flag ==1)
- {
- printf("%08x\r\n",IRCode);
- IR_Flag = 0;
- }
-
- }
- /* USER CODE END 3 */
遥控器在按下按键1的结果如下,可以看出,地址码是0x00,地址反码是0xff,命令码是0x68,命令反码是0x97。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。