范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

STM32定时器实现红外接收与解码

  1.NEC协议
  红外遥控是一种比较常用的通讯方式,目前红外遥控的编码方式中,应用比较广泛的是NEC协议。NEC协议的特点如下:载波频率为 38KHz 8位地址和 8位指令长度 地址和命令2次传输(确保可靠性) PWM 脉冲位置调制,以发射红外载波的占空比代表"0"和"1"
  其逻辑1与逻辑0的表示如图所示:
  可以看到,逻辑1的 位时间 为2.25ms,脉冲时间560us;逻辑0的 位时间 为1.12ms,脉冲时间560us。
  一个完整的NEC数据包如下:
  首次发送的是9ms高电平+4.5ms低电平,为引导码。
  接下来是8bit的地址码+8bit地址码的反码+8bit命令码+8bit命令码的反码。
  以上是一个正常的数据包,但可能存在一种情况:当长按某个键时,发送的是以110ms为周期的重复码,如下图:
  重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。
  2.解码程序
  在上面的图中可以看到,逻辑1和逻辑0的位时间是不同的,占空比也不同。所以我们可以根据位时间的长短来解码,也可以根据占空比的不同(1/2或1/4)来解码,或者二者同时作为解码条件。这里我们介绍根据位时间来解码。
  需要注意的是,很多红外一体接收头为了提高接收灵敏度。输入高电平,其输出的是相反的低电平。下图为示波器实际捕获的一组数据:
  可以看到,空闲时为高电平,引导码为9ms低电平+4.5ms高电平。根据位时间解码的话,我们就不必关系高低电平各自的时间,只需关系总时间就行,即:引导码-13.5ms,逻辑1-2.25ms,逻辑0-1.12ms。
  首先用STM32CubeMx配置定时器。系统时钟等的配置这里不再赘述,参考其它教程。
  这里使用TIM3的Channel1作为捕获通道配置如下:
  定时器时钟为内部时钟Channel1配置为输入捕获模式分频系数为63,因为系统时钟为64M,这样定时器实际时钟为64/(63+1)=1M,主要是为了程序中方便计算。捕获方式为下降沿捕获最后别忘了打开定时器的中断
  最后生成代码。在生成的TIM3中断函数中,屏蔽生成的中断处理还是,添加自己的解码程序如下:uint32_t TIM3_Over_Cnt = 0;//tim3溢出次数 uint32_t TIM3_Sum_Cnt = 0;//两次下降沿之间的时间间隔 uint32_t cnt0 = 0; uint8_t IR_Data[60];   void TIM3_IRQHandler(void) {   /* USER CODE BEGIN TIM3_IRQn 0 */     /* USER CODE END TIM3_IRQn 0 */ //  HAL_TIM_IRQHandler(&htim3);   /* USER CODE BEGIN TIM3_IRQn 1 */     if(__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE))      //定时器溢出中断     {         __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);    //清除中断标记         TIM3_Over_Cnt++;     }     cnt0 = __HAL_TIM_GET_COUNTER(&htim3);     TIM3_Sum_Cnt = (TIM3_Over_Cnt << 16) + cnt0;//获取计数器的值     __HAL_TIM_SetCounter(&htim3,0);//清零重新计数     TIM3_Over_Cnt = 0;//清零重新计数       if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_CC1) != RESET)//TIM3CH1捕获中断     {        if(StartRevFlag == 1)//接收到引导码,开始解码        {          if(TIM3_Sum_Cnt > 36000)//大于36ms认为是结束          {            RevComplete = 1;//解码完成            IR_Tick = 0;          }          else if(RevComplete == 0)          {            if(TIM3_Sum_Cnt > 1000 && TIM3_Sum_Cnt < 1300)//1ms~1.3ms认为是低电平             IR_Data[IR_Idx] = 0;            else  if(TIM3_Sum_Cnt > 2100 && TIM3_Sum_Cnt < 2400)//2.1ms~2.4ms认为是高电平             IR_Data[IR_Idx] = 1;            else //接收错误,重新开始              StartRevFlag = 0;            IR_Idx++;            if(IR_Idx > 59)              IR_Idx = 59;         }          }        else        {          if(TIM3_Sum_Cnt > 13000 && TIM3_Sum_Cnt < 14000)//13~14ms引导码          {            StartRevFlag = 1;          }          IR_Tick = 0;          RevComplete = 0;//解码完成标志置零          IR_Idx = 0;//有效解码位          TIM3_Over_Cnt = 0;          TIM3_Sum_Cnt = 0;//定时器计数清零        }         __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_CC1);     }     /* USER CODE END TIM3_IRQn 1 */ }
  解码程序根据每次捕获下降沿之间的间隔判断是引导码还是逻辑1或逻辑0。接收到引导码之后,再开始将解码的数据保存下来。最后通过也是时长来判断解码结束。这里没有判断重复码,有兴趣的小伙伴可以自己加上。
  中断函数中,只是将每一位解码并保存,最后还需要在主程序中组合成字节并判断处理。void IR_Rev() {   uint8_t num = IR_Idx / 8;   uint8_t IRValue[8];     if(RevComplete == 1 && StartRevFlag == 1 && IR_Tick > 20)   {     if(num > 7)       num = 7;       for(uint8_t j=0;j>1;         if(IR_Data[j*8+i])           IRValue[j] |= 0x80;       }     }     if(IRValue[0] == 0x00 && IRValue[1] == 0xFF)//地址码正确     {       switch(IRValue[2])//判断数据码       {         case 0x46:           KeyValue = S_key_Menu;           break;         case 0x43:           KeyValue = S_key_Set;           break;         case 0x40:           KeyValue = S_key_Rst;           break;         case 0x15:           KeyValue = S_key_Down;           break;         case 0x09:           KeyValue = S_key_Up;           break;       }     }     StartRevFlag = 0;     RevComplete = 0;     IR_Tick = 0;   } }

祝我们银婚纪念日快乐今天是2022年11月15日,我们的结婚纪念日。可是我却差点忘了。直到我下午读到余光中先生的诗珍珠项链,才陡然想起。珍珠项链作者余光中滚散在回忆的每一个角落半辈子多珍贵的日子以为再傍晚的乡村CFP供图陈振昌傍晚,是落日的余晖渐渐隐去,与夜的帷幕倏忽降临的那段时光,这是一段祥瑞美好的时光,难怪古人造字时,要在旁的一边站立一个人。人类与自然共生共存琴瑟和鸣的日子,得有个点福建8地入选2022年中国美丽休闲乡村名单近日,农业农村部正式公布2022年中国美丽休闲乡村名单,全国共255个乡村入选。福建8地上榜,其中2地被列入农家乐特色村。2022年中国美丽乡村名单(福建)福建省三明市沙县区夏茂镇有备而行精彩无限道朗镇中心幼儿园备课检查活动备课是教育教学过程的基础,是提高教学质量的先决条件。有效备课也是提高教师专业素质,促进教师个人成长的重要途径。为及时了解我园教师的备课情况,更好地加强教学常规管理,近日,我园开展了幼儿园里全是梓萱浩宇,怎么给孩子取一个好名字?这里有妙招前几天同学聚会,看见很多很久不见的小学同学,大家聊起之前的故事,就聊到了名字上。班长亚男是个男生,大家都说当时听这个名字以为是女生,没想到见面之后才发现是个大男生。后来班主任也以为上回送的该吃完了,大海又来给烟台人补货就在上个月肥美海鲜陆续造访烟台海边先是开发区的海肠再是牟平区的泸沽虾继而螃蟹甚至海参都纷纷上岸10月,烟台开盲盒式赶海屡屡冲上热榜市民捡到的海肠(图片来源网络)市民捡到的泸沽虾(图支持女性科技人才发挥更大作用的十条意见出台一年效果显著山东省农科院女性科技人才干事创业环境更加优化党的二十大报告首次明确提出加快建设农业强国,对农业科技创新工作提出了更高要求,也对农业科技人才的培养使用提出了更高要求。围绕党的二十大的重要部署,山东省农科院积极落实人才是第一资源喝白酒会长胖吗?各种酒类都含有数量不等的酒精,白酒成分98以上为酒精和水,酒的度数越高,酒精含量越多。酒精在体内可以代谢成水二氧化碳以及能量。产生的热量正常人都能够完全吸收掉,导致喝酒人普遍肥胖的吃晚饭时,坚持喝点白酒的人,身体最后咋样了?医生说出了实话过量酗酒容易伤身,对肝脏的伤害特别大,很多人因为长时间饮酒会容易引起肝硬化酒精肝,甚至是肝癌。有些人为了身体的健康,会选择控制喝酒的数量,还会减少喝酒的次数,但是也有一些人表示适量中老年人喝完羊奶,会对身体产生什么变化随着我国经济水平的提高,人们的健康意识也逐渐增强,尤其是中老年人更是关注的重点。中老年人随着年龄的增长,机体各器官功能逐渐衰退,各种疾病也随之而来,例如骨质疏松肠胃功能减退失眠多梦中老年朋友入冬后少喝绿茶,常喝这4种茶叶,茶香性温好处多多中老年朋友入冬后少喝绿茶,常喝这4种茶叶,茶香性温好处多多。茶叶是我们生活中的一个必需品,也是中华茶文化的一部分,茶叶的内含物质丰富,冲泡之后不仅茶香四溢,而且能够提神醒脑,多喝茶
最新消息!国乒2023年赛程公布,事关奥运名额,刘国梁如何排兵过去的2022年,对于国球乒乓来说,是不容易的一年,面对错综复杂的国际形势,应对内部新老交替等因素,乒乓人一次次迎难而上,虽有些许遗憾,但也给我们带来诸多荣耀。展望2023年,作为写在AB两组决战之前世界杯突然就没了六点场,也没了九点场。原来的一点点因为主办洲成员国的优越感自豪感荡然无存。低开高走又高开低走的亚洲之光们,两轮过后谁也不肯第一个取得第四个积分。于是除了东道主,所有哈亚关察者说丨你永远可以相信巴西队卡塞米罗禁区内的一脚撩射,终于为久攻不下的巴西队打破僵局。那一刻,场边替补席上的老帅蒂特,激动地与身边的助手深情相拥,久久无语。图说蒂特在场边新华社图1比0拿下瑞士,也许在外人看来A组上演大结局!荷兰队塞内加尔队晋级16强北京日报客户端记者赵晓松北京时间11月29日晚,卡塔尔世界杯A组第三轮(最后一轮)两场小组赛同时开踢。经过90分钟的激战,荷兰队2比0击败东道主卡塔尔队,塞内加尔队2比1击败厄瓜多NBA总得分破40000分有多难?75年历史仅3人做到常规赛40000分还没人做到,虽然詹姆斯有望,但是距离这个纪录还是有不小差距。但是如果是常规赛季后赛得分破40000分,这难度肯定下滑了一点。只要你常规赛35000分,季后赛500朱婷好闺蜜中国女排第一美女姚迪最新照片出炉!肤白貌美啊11月30日,在李盈莹全力带着天津女排冲刺2022年排超赛季冠军朱婷血战意大利女排甲级联赛的时候,张常宁也没有闲着,因为颜值很高,广告很多,张常宁挣钱非常多,在电视上好几个娱乐节目NBA常规赛步行者胜湖人11月28日,湖人队球员勒布朗詹姆斯(左)在比赛中上篮。新华社发(赵汉荣摄)当日,在20222023赛季NBA常规赛中,印第安纳步行者队客场以116比115战胜洛杉矶湖人队。11月1000场!泰山队达成里程碑,国内首支达成,积分场次双料冠军国内职业联赛成立至今不到30年时间,在这短短的30年时间里,联赛迎来了很多职业俱乐部,正是因为这些俱乐部的努力,才有了如今的国内职业联赛体系。虽然现在国内职业联赛问题百出,并且处于卡塔尔杯,赌狗的眼泪作为女孩子,说起来世界杯,有多少人了解?在我的记忆世界杯就只有4年一次的概念,然后就是中国的足球永远没有入场卷。因为今年世界杯太多爆冷,我就好奇看了一些关于世界杯的文章,原来200德布劳内的迷失是球队问题?还是他只是曼城的体系球员?德布劳内在对阵摩洛哥的比赛中表现惨不忍睹,其传球成功率跌至75亦曾27次失掉球权。这名曼城中场大师的问题,是出在哪儿呢。其实在比利时国家队,德布劳内的表现一向是打折的。欧洲红魔的黄地球可随时间推移自我调节温度冰河时代太阳辐射变化强烈的火山活动地球的气候经历了如此多的外部剧烈变化,为什么生命能一直存活下来?近日发表在科学进展杂志上的一项研究表明,即使经历了气候的戏剧性变化之后,地球也能够