STM32F407开发板红外线解码功能应用案例

发布者:TranquilMind最新更新时间:2024-05-15 来源: elecfans关键字:STM32F407  开发板 手机看文章 扫描二维码
随时随地手机看文章

【1】NEC红外线协议介绍

NEC红外线协议是一种常用的红外线通信协议,广泛应用于消费电子产品中,如电视、DVD播放器、空调遥控器等。该协议定义了红外线通信的物理层和数据链路层规范,以实现可靠的红外线数据传输。


下面是NEC红外线协议的详细介绍:

(1)载波频率:NEC红外线协议使用的载波频率为38kHz。发送方通过以38kHz频率调制红外线光信号,接收方则通过解调来接收数据。

(2)数据编码:NEC红外线协议使用脉冲宽度编码(Pulse Width Encoding)来表示二进制数据。每个数据位由一系列的脉冲组成,逻辑0和逻辑1分别由不同的脉冲宽度表示。

  • 逻辑0:发送方发射一个530μs的载波后,延迟时间为530μs。

  • 逻辑1:发送方发射一个530μs的载波后,延迟时间为1.69ms。

(3)帧结构:NEC红外线协议的一个完整帧由多个数据位组成,包括引导码、自定义码、数据码和反码。帧结构如下:

  • 引导码(Leader Code):由一系列的载波脉冲组成,用于同步接收方和发送方的时钟。

  • 自定义码(Custom Code):8位数据,用于识别设备类型。

  • 数据码(Data Code):8位数据,用于传输具体命令或数据。

  • 反码(Inverted Data Code):数据码的反码,用于校验数据的正确性。

(4)重复码:为了提高通信可靠性,NEC红外线协议还定义了重复码。当按键保持不松开时,发送方会周期性地发送重复码,以确保接收方正确接收到连续的按键数据。

(5)接收端工作原理:接收端使用红外线接收模块接收红外线信号,并通过解调将其转换为数字数据。接收端在接收到引导码后,开始解析自定义码和数据码,并进行校验。

NEC红外线协议的优点是简单、广泛应用,并且在消费电子产品中得到了广泛支持。提供了可靠的红外线数据传输方式,适用于远程控制和通信需求。

【2】硬件连接

38KHZ红外线接收头硬件连接图:

img

img

【3】源代码

Main.c示例代码


#include 'stm32f4xx.h' // Device header

 #include 'led.h'

 #include 'delay.h'

 #include 'key.h'

 #include 'usart.h'

 #include 'sys.h'

 #include 'exti.h'

 #include 'timer.h'

 #include 'pwm.h'

 #include 'ds18b20.h'

 #include 'infrared.h'

 extern u8 InfraredRxBuff[5];

 int main(void)

 {

 LED_Init();

 KEY_Init();

 USART1_Init(84,115200);

 KEY_EXTI_Init();

 DS18B20_Init();

 InfraredRxInit();             //红外线解码初始化

   while(1)

 {

   if(InfraredRxBuff[4])

  {

  InfraredRxBuff[4]=0; //清除接收成功标志

  printf('USER=0x%x

',InfraredRxBuff[0]);

  printf('KEY=0x%x

',InfraredRxBuff[2]);

  LED0=0;

  DelayMs(100);

  LED0=1;

  }

 }

 }

 

 

Infread.c文件示例


#include 'infrared.h'

 /*

 函数功能:红外线解码初始化

 硬件连接:PA8

 定 时 器:使用TIM2

 */

 void InfraredRxInit(void)

 {

 /*1. 开时钟*/

   RCC- >AHB1ENR|=1< < 0;//使能PORTA时钟

 

   /*2. 配置GPIO口模式*/

   GPIOA- >MODER&=~(0x3< < 8*2); //清除模式

 GPIOA- >MODER|=0x0< < 8*2;    //配置输入模式

 

   /*3. 开启SYSCFG时钟 */

 RCC- >APB2ENR|=1< < 14;

 

   /*4. 开放来自线x上的中断请求*/

   EXTI- >IMR|=1< < 8; //中断线8

 

   /*3. 配置中断线触发边沿*/

   EXTI- >FTSR|=1< < 8; //下降沿

   

   /*4. 配置产生中断的对应IO口*/

   SYSCFG- >EXTICR[2]&=~(0xf< < 0*4);

   SYSCFG- >EXTICR[2]|=0x0< < 0*4;

   

   /*5. 配置中断优先级*/

 SetNVICPriorityGrouping(EXTI9_5_IRQn,1,1);

 

 /*6. 初始化定时器*/

   RCC- >APB1ENR|=1< < 0;     //开启定时器2的时钟

   RCC- >APB1RSTR|=1< < 0;    //开启复位时钟  

   RCC- >APB1RSTR&=~(1< < 0); //关闭  

   TIM2- >PSC=84;     //预分频

   TIM2- >ARR=65535;        //重装载寄存器

   TIM2- >CR1&=~(1< < 0);     //开启计数器

 }

 

 /*

 函数功能:获取高电平持续的时间

 返 回 值:高电平持续的时间

 */

 u32 GetInfraredRxH(void)

 {

  TIM2- >CR1|=1< < 0;

  TIM2- >CNT=0;

  while(INFRARED_RX){}

  TIM2- >CR1&=~(1< < 0);

  return TIM2- >CNT;

 }

 

 /*

 函数功能:获取低电平持续的时间

 返 回 值:低电平持续的时间

 */

 u32 GetInfraredRxL(void)

 {

  TIM2- >CR1|=1< < 0;

  TIM2- >CNT=0;

  while(!INFRARED_RX){}

  TIM2- >CR1&=~(1< < 0);

  return TIM2- >CNT;

 }

 

 

 /*

 函数功能:外部中断线0中断服务函数

 NEC协议解码原理:

 1. 先接收引导码:9ms低电平+4.5ms高电平

 2. 引导码之后,是连续的32位数据。用户码+用户反码+按键码+按键反码

 3. 数据‘0’ :560us低电平+560us高电平

 4. 数据‘1’ :560us低电平+1680us高电平

 */

 u8 InfraredRxBuff[5]={0}; //存放红外线接收的数据值,其中[4]表示标志位。=0失败,=1成功

 void EXTI9_5_IRQHandler(void)

 {

 u32 time,j,i;

 u8 data=0;

 EXTI- >PR|=1< < 0;  //清除中断标志位

 /*1. 判断引导码*/

 time=GetInfraredRxL(); //获取低电平的时间

 if(time< 5000||time >11000)return;

 time=GetInfraredRxH();

 if(time< 2500||time >5500)return;

 

   /*2. 接收用户码和按键码*/

 for(i=0;i< 4;i++)

   {

 for(j=0;j< 8;j++)

   {

 time=GetInfraredRxL(); //获取低电平的时间

   if(time< 360||time >660)return;

 

 time=GetInfraredRxH(); //获取高电平的时间

   //560us高电平  0  、 1680us高电平 1

 if(time >360&&time< 660)

 {

 data > >=1;

 }

   else if(time >1480&&time< 1880)

 {

  data > >=1;

  data|=0x80; //1000 0000

 }

 }

 InfraredRxBuff[i]=data;

 }

 InfraredRxBuff[4]=1; //标志红外线解码成功

 }

 

 

Infread.h文件示例


#ifndef _INFRARED_H

 #define _INFRARED_H

 #include 'stm32f4xx.h'

 #include 'sys.h'

 void InfraredRxInit(void);

 u32 GetInfraredRxH(void);

 u32 GetInfraredRxL(void);

 #define INFRARED_RX PAin(8)  //红外线的接收口

 #endif

 


关键字:STM32F407  开发板 引用地址:STM32F407开发板红外线解码功能应用案例

上一篇:STM32 LL库中断配置引脚外部中断的方式
下一篇:基于STM32的300W无刷直流电机驱动方案

推荐阅读最新更新时间:2026-03-24 18:36

STM32F407开发板DS18B20应用案例
【1】DS18B20介绍 DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它采用单总线接口,能够在广泛的温度范围内测量温度,并通过数字方式输出温度值,具有较高的精度和稳定性。 以下是DS18B20温度传感器的主要特点和操作时序: (1)特点: 单总线接口:DS18B20使用单一的数据线进行通信,简化了连接和控制。 高精度测量:具有12位的温度分辨率,可测量范围为-55°C至+125°C。 数字输出:温度值以二进制形式传输,便于处理和解析。 内部存储:传感器可内部存储温度数据和配置信息。 低功耗:在非活动状态下,传感器可以进入睡眠模式以降低功耗消耗。 (2)操作时序: DS18B20的
[单片机]
<font color='red'>STM32F407</font><font color='red'>开发板</font>DS18B20应用案例
关于STM32F407开发板的几种内存总结,SRAM,FLASH,EEPROM
常见存储器概念:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失。 可以知道SRAM属于RAM,掉电后数据丢失;FLASH和EEPROM属于ROM,掉电后数据不丢失。 FLASH和EEPROM的区别在于:Flash存储器,适用于速度要求高,容量要求大,掉电时要求数据不丢失的场合;EEPROM适用于速度不高,容量不大,掉电时要求数据不丢失的场合。 了解这些之后,翻看开发板的开发手册统计一下用到了哪些内存。 1.芯片自
[单片机]
stm32f407开发板的时钟配置问题
使用8M的晶振,需要在官方例程的基础上修改两个宏定义: 1)在systm_stm32f40x.c中将PLL_M修改为8 2)在stm32f40x.h中将HSE_VALUE修改为8000000,如下: #define USED_HSE_8M #if !defined (HSE_VALUE) #ifdef USED_HSE_8M #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)25000000) /*! Value of the Exter
[单片机]
[STM32F407系列学习]按键开关控制单个数码管加减计数
【思路分析】 首先我们将整个题目写出来 按键开关控制单个数码管加减计数。可以得出以下: 器材:stm32F407(含按键),共阴极数码管 功能:实现开关控制加减计数 这么一看,不难想出要实现整个功能,我们可以将它分为两部分:数显模块 和 计数器模块。 【方案设计】 2.1.1 电路图搭建 在硬件下载前,为验证程序正确性,我们可先用Proteus进行仿真实验。 下图仿真电路即为所需电路。 图1-1 【注:1.因Proteus器件库中并无stm32F407ZE,因而用图中F401系列代替,.hex文件的导入并不会出问题;2.关于数码管管脚与单片机连接的问题,注意一定是a-g分别对应PA0-PA6,(不用GPIOA用其它IO口
[单片机]
[<font color='red'>STM32F407</font>系列学习]按键开关控制单个数码管加减计数
stm32f103和stm32f407的GPIO口模式设置以及相互对应的关系
GPIO端口的每个位可以由软件分别配置成8种模式。 ─输入浮空 ─输入上拉 ─输入下拉 ─模拟输入 ─开漏输出 ─推挽式输出 ─推挽式复用功能 ─开漏复用功能 GPIO的模式配置均是从对应的参考手册内的GPIO章节的GPIO功能描述内的表18得到的。表内各个数值对应的内容从stm32f4xx_gpio.h文件内得到。 F103的GPIO口模式设置 3要素: //拷贝自stm32f10x_gpio.h(91行) typedef struct { uint16_t GPIO_Pin; //引脚 GPIOSpeed_TypeDef GPIO_Speed; //速度 G
[单片机]
stm32f103和<font color='red'>stm32f407</font>的GPIO口模式设置以及相互对应的关系
SPI 串行Flash闪存W25Q128FV 的使用(STM32F407)_硬件篇
1 性能概述  W25Q128BV的主要性能如下 通讯方式:为标准104MHz串行SPI方式,还可以双倍速204MHz和4倍速416MHz访问。 容 量:128Mbit,65536Page。 因为8 bit =1 byte , 256 byte=1Page 、16Page=1Secotr、16Secotr=1Block 所以W25Q128BV有:256 Block 4096 Secotr 65536 Page 16777216 byte W25Q128写入前必须先
[单片机]
SPI 串行Flash闪存W25Q128FV 的使用(<font color='red'>STM32F407</font>)_硬件篇
freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5
最近因为工作需要用到FreeRTOS,其实开始本人内心是拒绝的因为自己只学习过UCOSIII还没实际上过什么大又复杂的工程,但是谁让FreeRTOS他是Free的呢公司成本考虑肯定是不会选择USOS的,这个道理就像公司内心深处不想给你涨工资一样。好了跑偏了言归正传,既然要用自然是要熟悉一下这个实时操作的内核的工作过程了,说道到里想起来自己当初学USOC时是把代码几乎进行了逐行的走读,最后因为各种原因都没能实际使用最后还是忘记了,所以我建议对于这一类的操作系统的学习还是重在API函数的用法学习上,不需要太对代码集体实现细节进行研究,时间成本高有这个时间建议移植一个系统进行一些应用实践是最有实际效果的。因此我现在就在践行自己的经验移植
[单片机]
freeRTOS V10.0.1移植到<font color='red'>STM32F407</font>标准库 - 环境Keil5
基于STM32F407和OV7670的低端视频监控系统
引言 本系统着眼于经济型视频监控系统,可应用于工业自动化设备、汽车安全驾驶、医疗设施或大楼供水、供电等系统的监控,应用前景广阔、成本低廉、系统简洁。 1 芯片简介 1.1 STM32F407简介 本系统采用的处理器是意法半导体公司的STM32F407,该处理器以32位Cortex—M4为内核,具有浮点运算功能的低端高速ARM,其内部集成了大量可供立即使用的资源,如TFT液晶显示器接口(Flexible Stactie Memory Control,FSMC)、摄像头接口(Camera Inter face)、DMA控制器等,方便且实用。 1.2 OV7670简介 OV7670是OmniVision公司基于CMOS VGA的图像
[单片机]
基于<font color='red'>STM32F407</font>和OV7670的低端视频监控系统
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved