红外遥控STM32程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**********************************************************************************
*stm32F103VET6 红外驱动【遥控器解码实验程序】
*
*遥控器:42位编码
*
***********************************************************************************/
#include "stm32f10x.h"
#include "exti.h"
#include "beep.h"
#include "SysTick.h"
#define LED1_0GPIOD->BRR= 0x00000100 //LED低电平
#define LED2_0GPIOD->BRR= 0x00000200
#define LED3_0GPIOD->BRR= 0x00000400
#define LED4_0GPIOD->BRR= 0x00000800
#define LED1_1GPIOD->BSRR = 0x00000100//LED高电平
#define LED2_1GPIOD->BSRR = 0x00000200
#define LED3_1GPIOD->BSRR = 0x00000400
#define LED4_1GPIOD->BSRR = 0x00000800
#define IR_Hongwai_0GPIOE->BRR= 0x00000004//红外数据低电平
#define IR_Hongwai_1GPIOE->BSRR = 0x00000004//红外数据高电平
#define IR_Hongwai_x GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)//读取红外电平状态
unsigned char TimeByte;
unsigned int IR_Tireafg[4];
unsigned int IR_xidwrit[8] = {0, 0, 0, 0, 0, 0 ,0, 0};
/*
*GPIO端口配置子函数
*/
void GPIO_InitStructReadtempCmd(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;//配置GPIO管脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//配置管脚为输入上拉
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//配置管脚速率50MHZ
GPIO_Init(GPIOE, &GPIO_InitStruct);//初始化指定端口
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//配置管脚陪推挽式输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
}
/*
*配置外设时钟子函数
*/
void RCC_APB2PeriphReadtempyCmd(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//打开GPIOB外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//打开GPIOE外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//打开GPIOD外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);//打开AFIO复用功能外设时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
}
/*
* 计算低脉宽持续时间Count1 * 10us
*/
unsigned int IR_HongwaiRead_LSB_Cmd()
{
unsigned int Count1 = 0;//定义时间变量
IR_Hongwai_0;//红外数据低电平
do//进入循环体
{
Count1++;//时间变量加1
Delay_10us(1);//延时10us
}while(IR_Hongwai_x == 0);//判断条件如果读出来的红外数据为高电平跳出循环体
return(Count1);//返回时间变量积数
}
/*
* 计算高脉宽持续时间Count2 * 10us
*/
unsigned int IR_HongwaiRead_MSB_Cmd()
{
unsigned int Count2 = 0;//定义时间变量
IR_Hongwai_1;//红外数据高电平
do//进入循环体
{