MCU: STM32F103ZET6
编程软件环境: keil5
红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。
编码发送思路: 延时函数模拟38KHZ + PWM产生38KHZ两种方式
代码风格: 模块化编程,寄存器直接操作方式
完整keil工程源码下载(解压即可编译运行测试):
https://download.csdn.net/download/xiaolong1126626497/19863305
二、NEC协议与相关硬件介绍 2.1 NEC协议介绍NEC协议在上篇文章里已经详细介绍过了。这篇文章和上篇文章内容是连贯的,上篇文章完成NEC红外线协议解码,这篇文章就当做遥控器发送端,发送自定义数据给接收端,完成自定义的数据传输;也可以模拟家电遥控器,对电视机、投影仪、空调等设备进行遥控操作。
红外线协议有很多,本章节主要是针对NEC协议讲解,只要把NEC协议原理搞懂了,其他协议都是一样的使用;如果想要模拟空调遥控器,去控制美的空调、格力空调这些设备,就需要按照美的、格力空调的协议发送;如果不知道协议长什么样,可以将逻辑分析仪插在红外线接收头的引脚上,拿个正常的空调遥控器对着接收头按一下,然后采集数据分析,即可得到协议规律,然后网络上也有空调按键值功能的说明文档,调试一下即可。
2. 2 使用的相关硬件因为要模拟红外线遥控器,就需要一个红外线发射管;在学习阶段,如果不想自己搭建电路,可以买现成的模块。 买模块连接也是比较稳定,接线也比较简单,VCC和GND接好之后,把DAT引脚接到STM32任意一个IO口上即可,如果想用硬件PWM控制发送,那么引脚接到STM32的PWM输出脚即可。
先看一段红外线接收头引脚上采集的NEC协议的电平: 这是接收端采集的。
红外线接收头的硬件特性: (注意: 这里是针对NEC遥控器协议来说明),下图就是当前使用的红外线接收头。
收到38KHZ的红外光,IN引脚就输出低电平;没有收到IN引脚就输出高电平。
NEC红外线协议说明:(这是站在接收端解码的角度分析的)
一段独立的NEC协议数据包由引导码+32位数据组成。
引导码: 9ms的高电平 + 4.5ms 低电平组成。
32位数据就是: 8位用户码+ 8位用户反码+ 8位按键码+8位按键反码
每个数据位之间的间隔时间是0.56ms(低电平)
NEC协议是依靠收到的高电平持续时间来判断数据0和数据1;高电平持续时间是0.56ms表示数据0,高电平持续时间是1.68ms表示数据1。
只要明白上面说的两个特点,就可以写程序,按照NEC协议驱动红外线发射管,发送数据了。
编写发送程序之前,得先明白这个38KHZ的红外光如何产生?
STM32支持硬件PWM功能,可以配置38KHZ方波输出;如果没有硬件PWM功能的单片机,也可以使用延时的方式产生38KHZ方波,差那么一点点问题也不到,解码端适当调整一下时间范围即可。
采用延时函数实现方法如下:
/*
函数功能: 发送38KHZ的载波
函数参数:
u32 time_us 持续的时间
u8 flag 1表示发送38KHZ载波,0表示不发送
*/
void InfraredSend38KHZ(u32 time_us,u8 flag)
{
u32 i;
if(flag)
{
//发送38KHZ载波
for(i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?