STM32 红外接收实验

本章所要实现的功能是:使用外部中断功能将遥控器键值编码数据解码后通 过串口打印输出,同时控制 DS0 指示灯闪烁,提示系统运行。程序框架如下: (1)使能 PB9 端口时钟,映射 PB9 至外部中断线上等 (2)编写红外解码函数(在 EXTI 中断处理) (3)编写主函数

hwjs.h+hwjs.c

#ifndef _hwjs_H
#define _hwjs_H
#include "system.h"

extern u32 Hwjs_Key;
extern u8 hwjs_bz;
#define HWJS_PIN GPIO_Pin_9
#define HWJS_PORT GPIOB
#define HWJS_PORT_RCC RCC_APB2Periph_GPIOB

void Hwjs_Init();
u8 Hwjs_Time();
void EXTI9_5_IRQHandler();
#endif
#include "hwjs.h"
#include "SysTick.h"
u32 Hwjs_Key=0;
u8 hwjs_bz=0;
void Hwjs_Init()
{
    GPIO_InitTypeDef GPIO_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
  RCC_APB2PeriphClockCmd(HWJS_PORT_RCC, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE );
    
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
    GPIO_InitStructure.GPIO_Pin=HWJS_PIN;
    GPIO_Init(HWJS_PORT,&GPIO_InitStructure);
    
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
    EXTI_ClearITPendingBit(EXTI_Line9);
    
    NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占式优先级,按自己需求配置
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//响应式优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
    
    EXTI_InitStructure.EXTI_Line=EXTI_Line9;
    EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;
  EXTI_Init(&EXTI_InitStructure);    
}
u8 Hwjs_Time()
{
    u8 t=0;
    while(GPIO_ReadInputDataBit(GPIOB,HWJS_PIN)==1)
    {
        t++;
        delay_us(20);
        if(t>250)return t;
    }
    return t;
}
void EXTI9_5_IRQHandler()//中断函数进行解码
{
    u8 i=0,tim=0,OK=0,HL=0,num=0;
    while(1)
    {
        if(GPIO_ReadInputDataBit(GPIOB,HWJS_PIN)==1)
        {
            tim=Hwjs_Time();
            if(tim>=250)break;
            if(tim>=200&&tim<=250)OK=1;//检测引导码,4-5ms之间,开发手册上为4.5ms
            else if(tim>60&&tim<90)
            {
                HL=1;
            }
            else if(tim>20&&tim<40)
            {
                HL=0;
            }
            if(OK==1)
            {
                Hwjs_Key<<=1;
                Hwjs_Key |=HL;//顺序不能变
            }
            num++;
            if(num>=32)
            {
                hwjs_bz=1;
                break;
            }
        }

    }
    EXTI_ClearITPendingBit(EXTI_Line9);//清除中断标志

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32红外模拟实验是一种使用STM32微控制器进行红外通信的实验。在这个实验中,我们可以通过红外发射器和红外接收器实现通信的传输。 在实验中,首先需要连接STM32微控制器和红外发射器。通过编写程序,将要发送的数据转换为红外信号,并将信号发送到红外发射器,红外发射器会将信号转换为红外光线进行传输。接着,我们需要连接红外接收器STM32微控制器。红外接收器接收红外光线并将其转换为电信号,然后通过STM32微控制器读取并解析这些信号。 通过这个实验,我们可以实现红外遥控的功能,例如控制电视、空调等设备。我们可以编写程序,将需要发送的红外编码写入STM32微控制器,当我们按下红外遥控器上的按钮时,STM32会将红外编码转换为红外信号并发送出去,然后红外接收器接收到信号并传递给STM32微控制器,从而实现红外遥控的功能。 在实验中,我们还可以通过调整红外发射器和红外接收器之间的距离,来测试和验证红外通信的可靠性。通常情况下,红外通信的传输距离相对较短,所以我们需要将红外发射器和红外接收器放置在较为接近的距离上。 总的来说,STM32红外模拟实验是一种通过STM32微控制器来实现红外通信的实验,通过这个实验我们可以学习和掌握红外通信的原理和应用,并将其应用到各种控制设备的遥控中。这个实验对于深入了解STM32微控制器的应用以及理解红外通信技术是非常有帮助的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值