10382|5

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教STM32IrDA+TSOP34838接收红外遥控器信号问题 [复制链接]

我目前再做一个项目,其中涉及到利用STM32的IrDA接口接收红外遥控器的信号,遥控器信号频率是37.92khz,接收芯片采用TSOP34838,频率为38khz,TSOP34838输出接STM32F103VCH6的UART5_RX。

但调试好像总是不对。首先一个问题是,载波频率和波特率有什么关系?IrDA初始化代码中需设置波特率,该参数具体如何设置?

按照遥控器的产品说明,每次按键发送数据格式为0x00+0xFF+按键码,但实测各种波特率(600~115200),接收到数据不同,例如实测1200波特率单次按键7接收14个数据,分别为0x00 0x00 0x80 0x66 0x66 0x86 0x00 0x18 0x66 0x98 0x00 0xFE 0x00 0xFE。


IrDA初始化配置代码:
/*******************************************************************************
* Function Name  : UART5_Configuration
* Description    : 配置UART5,实现红外遥控器接收
* Input          : None
* Output         : None
* Return         : None
* Note           : 遥控器SNP-2102载波频率37.92KHz;接收芯片TSOP34838为38KHz;
*******************************************************************************/
void UART5_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
   /* Configure USART5 Rx (PD.2)as input floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOD, &GPIO_InitStructure);
   USART_InitStructure.USART_BaudRate = 1200;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_Parity = USART_Parity_No ;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode = USART_Mode_Rx;  
   USART_Init(UART5, &USART_InitStructure);
   /* Enable the USART5 */
   USART_Cmd(UART5, ENABLE);
   /* Set the USART5 prescaler,在红外的通常模式下PSC[7:0]只能设置为00000001 */
   USART_SetPrescaler(UART5, 0x1);
   /* Configure the USART5 IrDA mode */
   USART_IrDAConfig(UART5, USART_IrDAMode_Normal);
   /* Enable the USART5 IrDA mode */
   USART_IrDACmd(UART5, ENABLE);
}

主程序中等待接收红外控制信号:
while (1)
   {
  for(i=0;i<28;i++)
  {
  /* Wait until a byte is received */
  while(USART_GetFlagStatus(UART5, USART_FLAG_RXNE) == RESET)
     {
      }
     /* Read the received byte */
     ReceivedData = USART_ReceiveData(UART5);
  }
     switch(ReceivedData[2])
     {
        case 0x42: //7  
          break;
        case 0x52: //8   
          break;
        case 0x4A: //9
          break;
        default:
          break;
      }
   }

再次深表谢意!
此帖出自stm32/stm8论坛

最新回复

                                 IRDA应该不能正确接收红外遥控信号  详情 回复 发表于 2010-12-11 09:14
点赞 关注
 

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你说的和IrDA毫无关系,和波特率也无关。
你说的应该是遥控编码识别。
遥控指令编码规律  
    遥控器所发送的功能指令码一般采用多位二进制串行码,其编码规律为:头脉冲、系统码、资料码、资料反码和结束位。头脉冲用做一帧命令的起始位;系统码用于区别不同类的电器;资料码用于完成命令功能。每次进行发送都是先发送脉宽4510us、周期2*4510us的头脉冲,然后连续发送两次系统码、接着发送资料码及资料反码、最后发送结束位,波形见下
Image45.gif
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
建议LZ看一下STM32的一篇AN:AN3174 Implementing an RC5 infrared remote control receiver with the STM32F10xx microcontrollers 。
  看过就很清楚了。
网址:http://www.st.com/mcu/familiesdocs-110.html
此帖出自stm32/stm8论坛
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

4
 
刚注册21ic账号,第一次发帖咨询,这么快就得到大家的回复,非常感谢“笑苍天”和“IJK”!
正如笑苍天所言,今天才发现手头的遥控器并不支持IrDA SIR串行红外,联系遥控器厂家得知其使用芯片为SC6122,正在参照相关例程进行调试。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 学习了
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 IRDA应该不能正确接收红外遥控信号
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表