幸运时时彩平台

STM32之红外接收

2020-01-30来源: eefocus关键字:STM32  红外接收  NEC协议

一、简介


本文介绍如何在STM32上使用红外接收头接收红外信号。


其中,红外协议采用为最常见的NEC协议。


二、实验平台


库版本:STM32F10x_StdPeriph_Lib_V3.5.0


编译软件:MDK4.53


硬件平台:STM32开发板(主芯片stm32f103c8t6)


仿真器:JLINK


三、版权声明


四、实验前提

1、在进行本文步骤前,请先阅读以下博文:

1)《STM8L之红外发射》:http://blog.csdn.net/feilusia/article/details/53305956


2、在进行本文步骤前,请先实现以下博文:

1)《STM32之系统滴答定时器》:http://blog。csdn。net/feilusia/article/details/52835711


五、基础知识

1、硬件原理


答:


1)接收管元器件

上图的引脚从左到右依次为:OUT(空闲时为高电平,接收到载波时为低电平)、GND、VCC。


电压范围为2.7V~5.5V。


附淘宝链接:


幸运时时彩平台https://detail.tmall.com/item.htm?spm=a1z10.3-b.w4011-3079905380.37.ZS9LXo&id=14265901312&rn=9fa50b1d19ad40efa6f149c454e32cfa&abbucket=14


2)硬件原理图

如上图,红外接收引脚接到PB3,PB3为JTAG使用引脚,因此在代码中要注意将引脚功能切换回普通IO口。


2、本文中红外接收的流程是如何的?


答:


1)配置红外接收引脚PB3为IO上拉中断方式。


2)当红外接收头接收到红外遥控器发出的载波信号时,PB3被拉低,代码进入中断服务函数,并依次判断时序是否满足:引导码、用户码、用户反码、键码、键码反码、停止位。


如果时序正确,则获得键值。如果时序不正确,则将此数据过滤。


六、实验步骤


注:下面的步骤为主要步骤,并不是所有步骤,编译有错误的地方请自行修改。


幸运时时彩平台1、编写并添加红外接收的驱动


1)编写驱动GUA_Infrared_Receiver。c(存放在“……HARDWARE”)


//******************************************************************************              

//name:             GUA_Infrared_Receiver。c             

//introduce:        红外传感器接收驱动      

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016。12。29      

幸运时时彩平台//******************************************************************************   

#include "stm32f10x。h" 

#include "GUA_Infrared_Receiver.h"

#include "GUA_SysTick.h"

 

/*********************宏定义************************/

#define TRUE 0

#define FALSE 1

 

//红外接收引脚

//IO

#define GUA_INFRARED_RECEIVER_PORT               GPIOB

#define GUA_INFRARED_RECEIVER_PIN                GPIO_Pin_3

#define GUA_INFRARED_RECEIVER_RCC                RCC_APB2Periph_GPIOB

 

//中断

幸运时时彩平台#define GUA_INFRARED_RECEIVER_EXTI_LINE          EXTI_Line3

#define GUA_INFRARED_RECEIVER_PORTSOURCE         GPIO_PortSourceGPIOB

#define GUA_INFRARED_RECEIVER_PINSOURCE          GPIO_PinSource3 

/*********************外部变量************************/

GUA_U32 gGUA_InfraredReceiver_Data = 0;

 

/*********************内部函数************************/ 

static void GUA_Infrared_Receiver_IO_Init(void);

static GUA_U16 GUA_Infrared_Receiver_GetHighLevelTime(void);

static GUA_U16 GUA_Infrared_Receiver_GetLowLevelTime(void);

 

//******************************************************************************        

//name:             GUA_Infrared_Receiver_IO_Init        

//introduce:        红外接收的IO初始化     

//parameter:        none       

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.12.29      

//******************************************************************************  

static void GUA_Infrared_Receiver_IO_Init(void)

{

//IO结构体

幸运时时彩平台 GPIO_InitTypeDef GPIO_InitStructure;

 

//失能JTAG和SWD在PB3上的功能使用

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

//时钟使能

RCC_APB2PeriphClockCmd(GUA_INFRARED_RECEIVER_RCC | RCC_APB2Periph_AFIO, ENABLE);

//红外接收IO配置

GPIO_InitStructure。GPIO_Pin = GUA_INFRARED_RECEIVER_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 

GPIO_Init(GUA_INFRARED_RECEIVER_PORT, &GPIO_InitStructure);

}

 

//******************************************************************************            

//name:             GUA_Infrared_Receiver_Exti_Init           

//introduce:        红外接收的IO中断初始化         

//parameter:        none                 

//return:           none         

//author:           甜甜的大香瓜                 

//email:            897503845@qq.com     

//QQ group          香瓜单片机之STM8/STM32(164311667)                  

幸运时时彩平台//changetime:       2016.12.29                  

//******************************************************************************

static void GUA_Infrared_Receiver_Exti_Init(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

 

//中断配置

EXTI_ClearITPendingBit(GUA_INFRARED_RECEIVER_EXTI_LINE);

GPIO_EXTILineConfig(GUA_INFRARED_RECEIVER_PORTSOURCE, GUA_INFRARED_RECEIVER_PINSOURCE);  

 

EXTI_InitStructure.EXTI_Line = GUA_INFRARED_RECEIVER_EXTI_LINE;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

 

//******************************************************************************        

//name:             GUA_Infrared_Receiver_Init        

//introduce:        红外接收初始化     

//parameter:        none       

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

幸运时时彩平台//changetime:       2016。12。29     

幸运时时彩平台//******************************************************************************  

void GUA_Infrared_Receiver_Init(void)

{

  //初始化IO

  GUA_Infrared_Receiver_IO_Init();

 

  //初始化中断配置

GUA_Infrared_Receiver_Exti_Init();

}

 

//******************************************************************************        

幸运时时彩平台//name:             GUA_Infrared_Receiver_GetHighLevelTime        

//introduce:        红外接收获取高电平维持时间   

//parameter:        none       

//return:           nNum:返回20us的个数      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.12.29      

//****************************************************************************** 

static GUA_U16 GUA_Infrared_Receiver_GetHighLevelTime(void)

{

GUA_U16 nGUA_Num = 0;

//判断是否一直为高电平

while(GPIO_ReadInputDataBit(GUA_INFRARED_RECEIVER_PORT, GUA_INFRARED_RECEIVER_PIN) == Bit_SET)

{

//超时超时溢出

if(nGUA_Num >= 250) 

{

return nGUA_Num;

}

//计延时20us的次数

nGUA_Num++;

//延时

GUA_Delay_Us(17);

}

return nGUA_Num;

}

 

//******************************************************************************        

//name: GUA_Infrared_Receiver_GetLowLevelTime

[1] [2] [3]
关键字:STM32  红外接收  NEC协议 编辑:什么鱼 引用地址:http://news.sonata9.com/mcu/ic486701.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32之霍尔检测电机归位时掉电
下一篇:stm32——Fatfs文件系统读写文件

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准
通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的,原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计数器停止计数可以在初始化时调用函数DBGMCU_Config(DBGMCU_TIM2_STOP,ENABLE);,这样一来仿真的时候定时时间就是准的了
发表于 2020-09-15
<font color='red'>STM32</font>定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准
STM32的JTAG下载模式
SWJ:串行线JTAG配置 (Serial wire JTAG configuration)SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。系统复位后的默认状态是启用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串行线)模式。
发表于 2020-09-15
Python 和OpenMV如何玩转 STM32 MCU
如今网络边缘侧的机器学习现状如何?哪些工具可以帮助工程师收集数据并执行推断运算?在哪里可以找到ST MEMS,它们对现实生活中的产品有哪些影响?本文是我们即将举行的STM32全国研讨会系列的第二篇专题文章。在第14届STM32全国研讨会上,我们将通过应用演示、产品展示以及工程师与观众互动回答问题的方式,来与蝶粉社区近距离交流。在STM32全国研讨会专题系列报道第一部分我们着重介绍了云连接方面的用例,如一款新的智能门铃功能演示,还介绍了工业和数据安全相关应用。 今天,我们将重点探讨人工智能、计算以及感知技术。 人工智能与计算Qeexo 和STM32Cube.AI 当今边缘机器学习解决方案的种类
发表于 2020-09-14
stm32定时器主从模式
TIM2作master;TIM3,TIM4作slave定时器2事件更新被用作触发输出TRGO从定时器TIM3,TIM4工作在从模式:门控模式触发选择设为:ITR1,这样TIM2的TRGO就连到了TIM3和TIM4的内部触发输入ITR1上,经过一系列选择器之后TIM2的TRGO就是TIM3和tim4的TRGI;这样一来就可以通过控制TIM2的period和Pulse来控制TIM3和TIM4输出一定的脉冲个数;
发表于 2020-09-14
<font color='red'>stm32</font>定时器主从模式
STM32驱动74hc595
#include "bsp_74HC595.h"#define HC595_DS        PCout(13)//#define HC595_OE        PAout(0)//#define HC595_ST_CP        PBout(9)//#define HC595_SH_CP             PBout(8)//static void HC595_Delay(u32 t){    u32 i; 
发表于 2020-09-14
定时器周期计算公式
例如:TIM_TimeBaseStructure.TIM_Period = 10000-1;       //当定时器从0计数到10000,即为10000次,为一个定时周期10khz TIM_TimeBaseStructure.TIM_Prescaler = 71;     //设置预分频:1us/clk TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;  //设置时钟分频系数:不分频(是对外部时钟TIMXETR进行滤波的) TIM_TimeBaseStruct
发表于 2020-09-14
定时器周期计算公式
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD。com。cn, Inc。 All rights reserved
乐彩网 500万彩票 幸运时时彩官网 王者彩票APP 亿信彩票开户 幸运时时彩 一分时时彩官网 亿信彩票开奖 小米彩票网站 福建快3开奖