打印
[活动专区]

【赛元易码魔盒】IR红外接收解码串口输出

[复制链接]
727|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 WoodData 于 2020-8-11 21:44 编辑

    下面测试一下通用外设驱动:红外按键解码。
首先配置串口0,等下方便调试信息输出。串口115200,使用TIM2作为波特率定时器。


然后添加红外接收模块,红外接收模块需要用到外部中断和定时器资源。本次红外接收头使用INT1的P16引脚。如下:


下面配置TIM1作为红外接收解码的定时时基,红外解码库要求50us。TIM1时钟32MHz,12分频,计算定时器重载值。


下面是程序主要流程,主函数main里面首先初始化红外解码库SCD_IR_Decode_Init(),然后循环检测红外解码成功标志,并通过串口输出解码值。
TIM1中断调用红外解码库函数SCD_IR_BaseTime();
外部中断调用红外解码函数SCD_IR_Decode();


下面是生成的代码部分。这里要注意下官方外设库里面的串口发送没有检测发送完成中断标志,所以要自己重新写。
官方的库是这样的:
73        /*****************************************************
74        *函数名称:void UART0_SendData8(uint8_t Data)
75        *函数功能:UART0发送8位数据
76        *入口参数:uint8_t Data                发送的数据
77        *出口参数:void
78        *****************************************************/
79        void UART0_SendData8(uint8_t Data)
80        {
81           SBUF = Data;
82        }
83        
84        /**************************************************
85        *函数名称:uint8_t UART0_ReceiveData8(void)
86        *函数功能:获得SBUF中的值
87        *入口参数:void
88        *出口参数:uint8_t
89        **************************************************/
90        uint8_t UART0_ReceiveData8(void)
91        {
92                return SBUF;
93        }


158        /*****************************************************
159        *函数名称:FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag)
160        *函数功能:获得UART0中断标志状态
161        *入口参数:UART0_Flag        中断标志位选择
162        *出口参数:FlagStatus                UART0中断标志状态       
163        *****************************************************/
164        FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag)
165        {
166                return (FlagStatus)(SCON & UART0_Flag);
167        }
168        
169        /*****************************************************
170        *函数名称:void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag)
171        *函数功能:清除UART0中断标志状态
172        *入口参数:UART0_Flag        中断标志位选择
173        *出口参数:void       
174        *****************************************************/
175        void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag)
176        {
177                SCON &=        (~UART0_Flag);
178        }


我将上面重新写了发送函数:
50        //串口发送字节。
51        void UartSendChar(uint8_t ch)
52        {
53                UART0_SendData8(ch);
54                while(UART0_GetFlagStatus(UART0_FLAG_TI) == 0);
55                UART0_ClearFlag(UART0_FLAG_TI);
56        }








效果如下,成功检测到了红外按键。在串口有按键输出值。





使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

119

主题

4609

帖子

27

粉丝