• / 5
  • 下载费用:10 金币  

基于STM32F1-HAL库的红外接收程序.doc

关 键 词:
基于STM32F1-HAL库的红外接收程序.doc
资源描述:
基于 STM32F1 HAL 库的红外解码程序,核心思想是通 过外部下降沿中断记录相邻两个下降沿的时间,记录的数据存入数 组,再根据数据判断是 0 还是 1,获得 NEC 协议的 4 个码。程序使用 PG15 作为中断输入,使用基本定 时器 7 定时,相比在中断里面等待的方式节省了CPU 时间 ,提高了效率,也方便移植到其他型号的 MCU 上。程序没有处理连发的问题,感兴趣的可以尝试修改。.c 文件#include “bsp_ir.h“//irdata[33]存储 相邻下降沿的 cnt 计数值uint8_t irdata[33],cnt = 0,IR_OK=0;TIM_HandleTypeDef ir_timx;void IR_Init(void){GPIO_InitTypeDef GPIO_InitStruct;IR_GPIO_CLK_ENABLE;GPIO_InitStruct.Pin = IR_GPIO_PIN;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; //下降沿中断GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉HAL_GPIO_Init(IR_GPIO_PORT, HAL_NVIC_SetPriority(IR_EXTI_IRQn,1,1); HAL_NVIC_EnableIRQ(IR_EXTI_IRQn); IR_TIMx_Init(249,71);}//Tout = (arr+1)*(psc+1)/sck//设计 Tout = 250us,psc = 71,arr = 249,sck = 72MHzvoid IR_TIMx_Init(uint16_t arr,uint16_t psc){ir_timx.Instance = IR_TIMx;ir_timx.Init.Prescaler = psc;ir_timx.Init.CounterMode = TIM_COUNTERMODE_UP;ir_timx.Init.Period = arr;ir_timx.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;ir_timx.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;IR_TIMx_RCC_CLK_ENABLE();HAL_NVIC_SetPriority(IR_TIMx_IRQn, 1, 0);HAL_NVIC_EnableIRQ(IR_TIMx_IRQn);HAL_TIM_Base_Init(__HAL_TIM_CLEAR_FLAG(HAL_TIM_Base_Start_IT(}//定时器中断服务函数void IR_TIMx_IRQHandler(void){HAL_TIM_IRQHandler(}//定时器更新中断回调函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim-Instance == IR_TIMx){cnt++;}}//外部中断服务函数//根据霖锋老师 89C51 篇关于红外接收的程序修改void IR_EXTI_IRQHandler(void){static uint8_t uCounter;static uint8_t Startflag = 0;//开始接收标志HAL_GPIO_EXTI_IRQHandler(IR_GPIO_PIN);if(!Startflag){Startflag = 1;cnt = 0;}else if(Startflag){if((cnt40)) //引导码检测 (9+4.5)/0.25 = 54uCounter = 0;irdata[uCounter] = cnt; //cnt 存储了相邻两个下降沿的时间差cnt = 0;uCounter++;if(uCounter == 33) //接收完成{uCounter = 0;IR_OK = 1;Startflag = 0;}}}//获得命令码//成功返回命令码,错误返回 0uint8_t IR_GET_CODE(void){uint8_t i,j,k = 1,value = 0,ir_code[4]; //ir_code[0]:用户码 ir_code[1]:用户码反码 ir_code[2]:命令 码 ir_code[3]:命令码反码if(IR_OK !=1)return 0;else{IR_OK = 0;for(i=0;i=1; //注释部分对应低位在前的情况if(irdata[k]6)
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:基于STM32F1-HAL库的红外接收程序.doc
链接地址:https://www.weizhuannet.com/p-9837783.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

微传网博客

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开