1、背景
- 项目需要用到红外模块来通信,考虑到MCU自带irda功能,即确定使用irda通信来完成。
- 但芯片自带irda功能,官网、手册以及各个论坛均未找到配置irda流程,项目又比较赶,于是决定模拟时序收发。
2、时序
2.1 红外发
- 使用uart时序。原uart时序高电平,对应红外的时序为低电平;原uart时序低电平,对应红外产生38KHz的载波(根据红外型号,我这里是用到38KHz),载波这里我用到占用比为50%的方波。
2.2 红外收
- 因为红外发送是使用uart时序,即接收也是uart时序。可以直接利用uart的rx来接收
3、 配置
- uart时序波特率为2400bps。
- 配置uart波特率2400,检验位停止位根据实际要求来配置。配置uart的接收模式
- 配置一个2400Hz的定时器,用来产生模拟2400波特率的时序
- 配置一个38KHz的PWM波,对应发送接口引脚,待有需要开启
- 需要发送的时候,根据发送时序以及2400Hz的定时器,来控制是否产生38KHz的PWM波。
- 例如定义一块缓存来存放发送数据,定时器时间到就判断缓存是否要发送数据,如果要发送数据,模拟uart时序,uart的起始位为0,即对应开启PWM波,等定时器又一次到来,判断数据位,数据位对应bit为0,产生PWM波;数据位对应bit为1,关闭PWM波,等待一个个数据位处理完毕,再处理停止位,停止位为1,即不产生PWM波。这样一个数据就发送完毕了
- 调试过程中发现,如果tx的默认输出状态为高,会存在干扰。建议tx的默认状态为低,即不产生PWM波时的状态为低。
其他
- 因为时间比较紧促,更深层的东西未了解。一些专业词汇描述难免有错,欢迎指正。