幸运时时彩平台

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服务号
享受更多官方福利

推荐阅读

STM8S库文件判断指定IO输入引脚电平GPIO_ReadInputPin有问题
/**  * @brief  Reads the specified GPIO input data pin.  * @param  GPIOx : Select the GPIO peripheral number (x = A to I).  * @param  GPIO_Pin : Specifies the pin number.  * @retval BitStatus : GPIO input pin status.  */BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_Ty
发表于 2020-02-08
STM8 GPIO输入输出模式
悬浮输入悬浮输入,也叫浮空输入,顾名思义,即引脚悬空。这种方式的输入阻抗很高。当悬浮输入的引脚上加上信号时,单片机所得到的信号并不确定是高电平或是低电平,是一个不确定的信号。悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。上拉输入上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同。上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低。推挽输出推挽输出(Push-pull output),也称为互补输出,推拉式输出。推挽输出模式导通损耗小,效率高。在此模式下,N-MOS、P-MO
发表于 2020-02-08
STM8 GPIO输入输出模式
STM8L的USART1串口通信详解 含例程
STM8L除了可以进行串口通信,还可支持红外通信,智能卡协议,这些功能后续会开发,发布程序源码。STM8L还可以使用DMA缓存数据,减少CPU负担,为了简单起见,本文没有用到DMA功能。只需要简单的配置发送的字长度,停止位数,波特率,打开发送接收,就可以进行串口数据收发。下图为串口发送数据流程。对于串口发送数据,需要注意的是,打开发送后,数据发送完成,如果不关闭中断,程序会一直进入中断。所以在确保数据发送完成后,需关闭中断,退出发送数据。本文通过周期性(500ms)的向上位机发送一组数据,来演示STM8L的串口通信。串口接收部分程序也已经调试好,只需把while循环中的程序注释掉,设置断点,查看上位机发送来的数据即可
发表于 2020-02-08
使用STM8S105K4T6C 模数转换器的12通道
分享今天遇到的一个stm8s模数转换的小问题~~~这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。stm8s105k4t6c的管脚图其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):[mw_shl_code=c,true]/*---------------------------------包含头文件---------------------------------*/#include "adc.h" #define        ADC     
发表于 2020-02-08
stm8——LED流水灯实现
最近接触并学习了一款STM8系列的芯片。以前学习了的ARM9+Linux后,再来学习单片机就感到上手很快了。 芯片基本信息:Type:STM8L151G68-bit ultralow power MCU, up to 32 KB Flash, 1 KB Data EEPROM RTC, LCD, timers, USART, I2C, SPI, ADC, DAC, comparators具体可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS
发表于 2020-02-08
MCU程序设计之STM8S的optionbytes
今天使用STM8S在程序中修改optionbyte遇到问题一直读取为0,不能进入设置流程,之前的程序今天重新修改东西,使用新的片子,原来程序如下:  AFR_TEMP = (uint16_t)((uint16_t)0x01 << 8);  AFR_TEMP = AFR_TEMP | (uint16_t)0xFE;  AFR_TEMP = (AFR_TEMP >> 8);之所以直接赋值而不调用函数,是因为程序代码空间有限,使用函数调用方法修改没有问题,如下:  AFR_TEMP = FLASH_ReadOptionByte(0X4803);  AFR_TEMP
发表于 2020-02-08
小广播
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 sonata9.com, Inc. All rights reserved
幸运时时彩平台 小金棋牌 大发时时彩 幸运时时彩 小米彩票登入 北京pk10 小米彩票是真的吗 500彩票网 500彩票网 一分时时彩官网