OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4030|回复: 1

AT32红外接收--AT_SURF案例18

[复制链接]

55

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-11-25
在线时间
27 小时
发表于 2022-5-27 19:30:30 | 显示全部楼层 |阅读模式
红外遥控是一种无线非接触式遥控,具有抗干扰能力强、功耗低、成本低等优点,常用于家用电器遥控。红外遥控原理是以红外光为载体进行发送和接收数据,发送端通过红外发射二极管发出经过调制的红外光,接收端通过红外接收二极管接收红外光,然后解调获得数据。
在应用中各种系统的红外遥控原理基本相似,只是区别在于红外编码,红外遥控常用的红外编码协议有NEC、Philips RC5,当然也可以使用自定义红外编码,本次例程中使用的红外编码为NEC编码。
NEC协议介绍
起始码传输
每一帧数据传输前都需要先传输起始位,起始位格式为9ms低电平+4.5ms高电平,如果按键持续按下,将不会传输数据帧,而是传输重复帧,重复帧的格式为9ms低电平+2.25ms高电平。

位传输
0传输:周期为1.12ms,低电平时间为560us,高电平时间为560us;
1传输:周期为2.25ms,低电平时间为560us,高电平时间为1690us。

帧格式
其一数据格式为,起始码+地址+地址反码+命令+命令反码四个字节,其中地址反码和命令反码用于校验数据是否正确。如果按键持续按下,将间隔110ms传输重复帧。
图51. NEC数据帧格式

例程中使用定时器的输入捕获功能测量电平宽度,从而解析出数据。

资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\infrared_receiver
硬件设计
本案例使用的硬件资源有TFT LCD液晶显示屏、IRM-56384红外接收头,对应的引脚如下:


对应的电路原理如下:


软件设计
1)        红外接收测试
初始化TFT LCD
初始化TMR用于捕获信号
将信息显示在LCD屏上
2)        代码介绍
main函数代码描述
int main(void)
{
  uint8_t key_value;
  
  /* 初始化系统时钟 */  
  system_clock_config();  
  
  /* 初始化中断优先级分组 */   
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  /* 初始化延时函数 */
  delay_init();  
  
  /* 初始化LCD */
  lcd_init(LCD_DISPLAY_VERTICAL);

  /* 初始化红外接口 */
  infrared_receiver_init();

  /* 显示信息 */  
  lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"Infrared receiver Test");

  while(1)
  {
    /* 红外按键获取 */
    if(infrared_receiver_key_get(&key_value) == SUCCESS)
    {
      /* 显示按键地址和命令 */
      lcd_string_show(10, 90, 310, 24, 24, (uint8_t *)"key  address:   ");
      lcd_num_show(178, 90, 310, 24, 24, (uint8_t)(key_value >> 8), 3);
     
      lcd_string_show(10, 120, 310, 24, 24, (uint8_t *)"key     cmd:   ");
      lcd_num_show(178, 120, 310, 24, 24, (uint8_t)(key_value & 0xFF), 3);
    }  
}

void infrared_receiver_init(void)函数代码描述
/**
  * @brief  infrared receiver init.
  * @param  none.
  * @retval none.
  */
void infrared_receiver_init(void)

error_status infrared_receiver_key_get(uint16_t *val)函数代码描述
/**
  * @brief  get infrared key.
  * @param  the pointer of key value.
  * @retval error_status.
  */
error_status infrared_ receiver_key_get(uint16_t *val)

下载验证
初始化TMR用于接收数据
使用遥控器对着红外接收头按按键
收到有效数据后,将信息显示在LCD屏上


AN0049_AT_SURF_F437_Board_Application_Note_ZH_V2.0.1.pdf

6.66 MB, 下载次数: 6

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-5-28 09:40:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表