Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
国民技术_N32G45x
【N32G457】基于RT-Thread的红外遥控
发布于 2022-03-24 23:27:13 浏览:1272
订阅该版
一、环境介绍 MCU: N32G45x Series ![微信图片_20220324232151.jpg](https://oss-club.rt-thread.org/uploads/20220324/f68bbeab5459f53e6355c6ab9cd28376.jpg.webp) 编程软件环境: RT-Thread Studio 红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。 编码发送思路: 延时函数模拟38KHZ + PWM产生38KHZ两种方式 代码风格: 模块化编程,寄存器直接操作方式 二、NEC协议与相关硬件介绍 2.1 NEC协议介绍 NEC协议在上篇入门开发:>文章里已经详细介绍过了。这篇文章和上篇文章内容是连贯的,上篇文章完成NEC红外线协议解码,这篇文章就当做遥控器发送端,发送自定义数据给接收端,完成自定义的数据传输;也可以模拟家电遥控器,对电视机、投影仪、空调等设备进行遥控操作。 红外线协议有很多,本章节主要是针对NEC协议讲解,只要把NEC协议原理搞懂了,其他协议都是一样的使用;如果想要模拟空调遥控器,去控制美的空调、格力空调这些设备,就需要按照美的、格力空调的协议发送;如果不知道协议长什么样,可以将逻辑分析仪插在红外线接收头的引脚上,拿个正常的空调遥控器对着接收头按一下,然后采集数据分析,即可得到协议规律,然后网络上也有空调按键值功能的说明文档,调试一下即可。 2. 2 使用的相关硬件 因为要模拟红外线遥控器,就需要一个红外线发射管;在学习阶段,如果不想自己搭建电路,可以买现成的模块。 买模块连接也是比较稳定,接线也比较简单,VCC和GND接好之后,把DAT引脚接到STM32任意一个IO口上即可,如果想用硬件PWM控制发送,那么引脚接到STM32的PWM输出脚即可。 ![微信图片_20220324231845.jpg](https://oss-club.rt-thread.org/uploads/20220324/c1539b16c8f4e06422b37174275ee775.jpg.webp) 2.3 完成NEC协议编码发送 先看一段红外线接收头引脚上采集的NEC协议的电平: 这是接收端采集的。 ![image.png](https://oss-club.rt-thread.org/uploads/20220324/707902c419254e0db8b5c2ed6086bc7b.png.webp) 收到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。 编写发送程序之前,得先明白这个38KHZ的红外光如何产生? STM32支持硬件PWM功能,可以配置38KHZ方波输出;如果没有硬件PWM功能的单片机,也可以使用延时的方式产生38KHZ方波,差那么一点点问题也不到,解码端适当调整一下时间范围即可。 为了方便发送指定的用户码和按键码,可以封装成一个函数调用。 /* 函数功能: NEC协议编码发送 函数参数: u8 user 用户码 u8 key 按键码 先发低位 按键反码+按键码+用户反码+用户码 */ void InfraredNECSend(u8 user,u8 key) { u32 i; /*1. 组合发送的数据*/ u32 data=((~key&0xFF)<<24)|((key&0xFF)<<16)|((~user&0xFF)<<8)|((user&0xFF)<<0); /*2. 发送引导码*/ InfraredSend38KHZ(9000,1);//发送38KHZ载波 InfraredSend38KHZ(4500,0);//不发送 /*3. 发送32位数据*/ for(i=0;i<32;i++) { InfraredSend38KHZ(560,1); //间隔时间 if(data&0x01)InfraredSend38KHZ(1685,0); //发送1 else InfraredSend38KHZ(560,0); //发送0 data>>=1; } InfraredSend38KHZ(560,1); //间隔时间 } ![image.png](https://oss-club.rt-thread.org/uploads/20220324/6c17919b954e4c1ccbf16dee4f4f0829.png.webp) **代码地址**:https://gitee.com/weixiao2016/infrared-remote-controller 相关内容转载自 https://www.elecfans.com/plus/view.php?aid=1805501
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
weizx208
15821468343
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部