RT-Thread Studio学习(四)infrared软件包
简介
本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用infrared软件包。
新建项目并使用外部时钟
打开RT-Thread Studio软件新建基于芯片的项目,并使用外部时钟系统,具体参见《RT-Thread Studio学习之使用外部时钟系统》。在使用infrared软件包时,需要使用三个定时器,分别为:一个定时器的输入/捕获通道用于红外接收后解码,一个定时器的PWM通道用于产生38KHz载波和红外发送,一个HWTIMER用于红外发送编码。在本文中,将使用TIM1通道1完成红外接收,使用TIM12通道1完成38KHz载波和红外发送,使用TIM10完成红外发送的编码。
使用infrared软件包
在 RT-Thread Setting
文件中借助图形化配置工具打开软件的软件包设置,如下图所示:
红外接收:利用timer1通道1的输入捕获来实现。
红外发送:利用timer12通道1的PWM实现38KHz载波,利用timer10进行编码。
修改tim_config.h和drv_hwtimer.h
这里将涉及HWTIMER和PWM的使用,具体参考《RT-Thread Studio学习之HWTIMER》和《RT-Thread Studio学习之PWM》。
测试
main.c测试代码如下:
int main(void)
{
......
struct infrared_decoder_data infrared_data;
ir_select_decoder("nec");
while (1)
{
/* 读取数据 */
if (infrared_read("nec", &infrared_data) == RT_EOK)
{
if (infrared_data.data.nec.repeat)
{
rt_kprintf("repeat%d\n", infrared_data.data.nec.repeat);
}
else
{
rt_kprintf("APP addr:0x%02X key:0x%02X\n", infrared_data.data.nec.addr, infrared_data.data.nec.key);
infrared_write("nec", &infrared_data);
}
}
rt_thread_mdelay(10);
}
while(1) {
rt_thread_mdelay(1000);
}
return RT_EOK;
}
测试发现,infrared软件包将数据的高位和低位搞反了,比如红外遥控器发送的键值为0x65,infrared软件包解码后为0xa6。