码迷,mamicode.com
首页 > 其他好文 > 详细

18、红外

时间:2015-06-05 21:14:42      阅读:637      评论:0      收藏:0      [点我收藏+]

标签:

一、红外线工作原理

 

1、红外线系统的组成

红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。

 

 

2、红外发射管

红外遥控发射装置,也就是通常我们说的红外遥控器是由键盘电路、红外编码电路、电源电路和红外发射电路组成。红外发射电路的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量的使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通φ5发光二极管相同。

 

 

3、红外遥控器发射

通常红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36kHz、40 kHz、56 kHz等,一般由发射端晶振的振荡频率来决定。所以,通常的红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。

二进制脉冲码的形式有多种,其中最为常用的是PWM码(脉冲宽度调制码)和PPM码(脉冲位置调制码,脉冲串之间的时间间隔来实现信号调制)。如果要开发红外接收设备,一定要知道红外遥控器的编码方式和载波频率,我们才可以选取一体化红外接收头和制定解码方案。

技术分享

 

 

4、红外线发射原理图

技术分享

 

 

 

5、红外线接收

 红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。红外遥控接收器的主要作用是将遥控发射器发来的红外光信好转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VOUT)。在使用时注意成品红外接收头的载波频率,另外在遥控编码芯片输出的波形与接收头端收到的波形。

 

 

6、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

技术分享

 

 

7、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

技术分享

 

 

 

 

 

 

 

二、红外线接收

 

1、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

技术分享

 

 

2、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

技术分享

 

 

3、例程代码

技术分享
  1 /*************************************************************************************************************************************
  2 *  
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7 
  8 #include "pbdata.h"//调用自定义公共函数库
  9 
 10 
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void NVIC_Configuration(void);//中断优先级配置函数声明
 19 void USART_Configuration(void);//串口配置函数声明
 20 
 21 void  EXTI_Configuration_HW(void);//红外配置函数声明
 22 
 23 
 24 
 25 /********************************************************************************
 26 *
 27 *  函数名称:main(void)
 28 *  函数功能:主函数
 29 *  函数说明:不能用void定义主函数
 30 *
 31 ********************************************************************************/
 32 int main(void)//void不能void定义主函数
 33 {
 34         
 35     RCC_Configuration();    //系统时钟初始化
 36     
 37     GPIO_Configuration();//端口初始化
 38     
 39     USART_Configuration();//串口配置
 40     
 41     NVIC_Configuration();//中断优先级配置
 42     
 43     EXTI_Configuration_HW();//红外配置
 44     
 45     
 46     while(1)
 47     {
 48     if(hw_jsbz==1)//收到红外数据
 49     {
 50       hw_jsbz=0;//标志置0
 51       printf("hw_receive=%0.8X\r\n",hw_jsm);
 52    
 53       hw_jsm=0;//清空
 54     }
 55 
 56     delay_ms(1000);//延时1s
 57 
 58     }
 59     
 60 }
 61     
 62     
 63 
 64 
 65 /********************************************************************************
 66 *
 67 *  函数名称:RCC_Configuration(void)
 68 *  函数功能:系统时钟高初始化函数
 69 *
 70 ********************************************************************************/
 71     void RCC_Configuration(void)//系统时钟高初始化函数
 72   {
 73         
 74     SystemInit();//系统初始化
 75     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能
 76         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//红外对应GPIO时钟使能
 77         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
 78         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用
 79         
 80 
 81     }
 82     
 83     
 84 
 85 /*******************************************************************************
 86 *
 87 * 函数名称:GPIO_Configuration(void)
 88 * 函数功能:GPIO初始化函数
 89 *
 90 ********************************************************************************/    
 91     
 92     void GPIO_Configuration(void)//GPIO初始化函数
 93   {
 94               
 95         
 96 /*串口引脚配置*/
 97         GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 98 
 99 /*输出引脚配置*/        
100         /*结构体变量赋值*/
101       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX
102       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
103         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出
104         /*对应的GPIO初始化*/
105       GPIO_Init(GPIOA,&GPIO_InitStructure);
106         
107     
108 /*输入引脚配置*/        
109         /*结构体变量赋值*/
110       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX
111         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入
112         /*对应的GPIO初始化*/
113       GPIO_Init(GPIOA,&GPIO_InitStructure);        
114         
115         
116 
117 /*红外引脚配置*/        
118     /*结构体变量赋值*/
119       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;////红外接收引脚配置
120         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//发送要配置成上拉输入模式
121      /*对应的GPIO初始化*/
122       GPIO_Init(GPIOA,&GPIO_InitStructure);
123         
124   }
125     
126 
127     
128     
129 /****************************************************************************
130 *
131 *  函数名称:NVIC_Configuration(void)
132 *  函数功能:配置中断优先级
133 *
134 ****************************************************************************/
135     
136 void NVIC_Configuration(void)
137 {
138   NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
139     
140   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
141 
142     
143     
144 /*串口中断优先级*/
145   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
146   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
147   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
148   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
149     
150 
151     
152 /*红外外部中断优先级*/    
153     NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断
154   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
155   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
156   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
157     
158   NVIC_Init(&NVIC_InitStructure);//初始化
159     
160     
161     
162     
163 }
164     
165 
166 /*********************************************************************************
167 *
168 *  函数名称:
169 *  函数功能:串口配置函数
170 *
171 *********************************************************************************/
172 void USART_Configuration(void)
173 {
174 /*定义串口配置结构体变量*/
175         USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量
176     
177     
178 /*结构体变量赋值*/
179     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
180     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位
181     USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
182     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验
183     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
184     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能
185 
186     
187 /*发送串口配置初始化*/
188     USART_Init(USART1, &USART_InitStructure);
189     
190 
191 /*打开串口接收中断*/
192       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断
193     
194     
195 /*打开串口*/
196     USART_Cmd(USART1,ENABLE);//串口使能,打开
197         
198 /*清空中断标志位*/
199     USART_ClearFlag(USART1,USART_FLAG_TC);
200 }
201     
202     
203     
204     
205     
206 
207     
208     
209 
210     
211 
212     
213     
214     
215     
216     
217     
218     
219     
220     
221     
222     
223     
224     
225     
226     
227     
228     
229     
230     
231     
232     
233     
234     
235     
236     
View Code
技术分享
 1 #include "pbdata.h"
 2 
 3 
 4 
 5 
 6 /**********************************************
 7 *
 8 *  函数名称:EXTI_Configuration(void)
 9 *  函数功能:红外触发外部中断配置
10 *
11 **********************************************/
12 
13 void  EXTI_Configuration_HW(void)
14 {
15      EXTI_InitTypeDef  EXTI_InitStructure;//定义一个中断配置的结构体变量
16     
17      EXTI_ClearITPendingBit(EXTI_Line3);//使用前清除中断
18     
19      GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);//选择GPIO管脚作为外部中断线路
20      
21     
22      EXTI_InitStructure.EXTI_Line = EXTI_Line3;
23      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
24      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发方式,下降沿
25      EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能
26     
27     
28      EXTI_Init(&EXTI_InitStructure);//初始化进行配置
29 }
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 u8  HW_jssj(void)
41 {
42     u8 t=0;
43     while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1)//说明是高电平
44     {
45        t++;
46        delay_us(20);
47 
48        if(t>=250)//高电平最长450ms,250*20=5ms,超时溢出
49           return t; 
50        
51      }
52      return t;
53 }
View Code
技术分享
 1 #ifndef  _HW_JS_H
 2 #define  _HW_JS_H
 3 
 4 #include "pbdata.h"
 5 
 6 
 7 u8  HW_jssj(void);
 8 
 9 
10 void  EXTI_Configuration_HW(void);
11 
12 #endif
View Code
技术分享
  1 /****************************************************************************************************************
  2 *
  3 * 文件名称:pbdata.c
  4 * 文件功能:自定义函数或者全局变量的初始化
  5 *
  6 ****************************************************************************************************************/
  7 
  8 /*头文件声明*/
  9 #include "pbdata.h"
 10 
 11 
 12 
 13 
 14 /********************************************************************************************
 15 *
 16 * 自定义全局变量
 17 *
 18 ********************************************************************************************/
 19 u8 dt=0;
 20 
 21 
 22 u32 hw_jsm=0;
 23 u8  hw_jsbz=0;
 24 
 25 
 26 
 27 
 28 /******************************************************************************************
 29 *
 30 * 自定义函数
 31 *
 32 ******************************************************************************************/
 33 
 34 
 35 
 36 /**************************************************
 37 *
 38 *  函数名称:delay_us(u32 nus)
 39 *  函数功能:微秒延时函数
 40 *  输入参数:输入值为延时us
 41 *
 42 ***************************************************/
 43 void delay_us(u32 nus)
 44 {
 45     u32 temp;
 46     SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
 47     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 48     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 49     
 50     do
 51     {
 52           temp=SysTick->CTRL;//标志位,等到一直减到0
 53          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 54     
 55     SysTick->CTRL=0x00; //关闭计数器
 56     SysTick->VAL =0X00; //清空计数器
 57 }
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 /***************************************************
 66 *
 67 * 函数名称:delay_ms(u16 nms)
 68 * 函数功能:毫秒级延时
 69 * 输入参数:输入值位延时ms
 70 *
 71 ****************************************************/
 72 void delay_ms(u16 nms)
 73 {
 74     u32 temp;
 75     SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
 76     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 77     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 78     
 79     do
 80     {
 81           temp=SysTick->CTRL;//标志位,等到一直减到0
 82          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 83     
 84     SysTick->CTRL=0x00; //关闭计数器
 85     SysTick->VAL =0X00; //清空计数器
 86 }
 87 
 88 
 89 
 90 /****************************************************
 91 *
 92 * 重定义printf函数部分
 93 *
 94 ****************************************************/
 95 int fputc(int ch,FILE *F)
 96 {
 97     
 98     USART_SendData(USART1,(u8)ch);
 99     
100     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
101     
102     return ch;
103 }
View Code
技术分享
 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8 
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11 
12 
13 
14 
15 
16 /********************************************************************
17 *
18 *  调用的头文件放在这里
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22 
23 
24 #include "stm32f10x_rcc.h"
25 #include "stm32f10x_gpio.h"
26 #include "misc.h"
27 #include "stm32f10x_adc.h"
28 #include "stm32f10x_bkp.h"
29 #include "stm32f10x_can.h"
30 #include "stm32f10x_cec.h"
31 #include "stm32f10x_dac.h"
32 #include "stm32f10x_dbgmcu.h"
33 #include "stm32f10x_dma.h"
34 #include "stm32f10x_exti.h"
35 #include "stm32f10x_flash.h"
36 #include "stm32f10x_fsmc.h"
37 #include "stm32f10x_i2c.h"
38 #include "stm32f10x_iwdg.h"
39 #include "stm32f10x_pwr.h"
40 #include "stm32f10x_rtc.h"
41 #include "stm32f10x_sdio.h"
42 #include "stm32f10x_spi.h"
43 #include "stm32f10x_tim.h"
44 #include "stm32f10x_usart.h"
45 #include "stm32f10x_wwdg.h"
46 
47 
48 #include "stdio.h"
49 
50 
51 #include "hw_fs.h"
52 
53 /********************************************************************
54 *
55 *  自定义全局变量声明
56 *
57 ********************************************************************/
58 extern u8 dt;
59 
60 extern u8 flag;
61 extern  u16  js_count;
62 
63 
64 
65 /********************************************************************
66 *
67 *  自定义全函数声明
68 *
69 ********************************************************************/
70 void delay(u32 nCount);
71 void delay_us(u32 nus);
72 void delay_ms(u16 nms);
73 int fputc(int ch,FILE *F);
74 
75 
76 
77 #endif
View Code
技术分享
  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c 
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and 
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22 
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"     
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "stm32f10x_tim.h"
 28 #include "misc.h"
 29 #include "pbdata.h"
 30 
 31 void NMI_Handler(void)
 32 {
 33 }
 34 
 35 
 36 
 37 /**
 38   * @brief  This function handles Hard Fault exception.
 39   * @param  None
 40   * @retval : None
 41   */
 42 void HardFault_Handler(void)
 43 {
 44   /* Go to infinite loop when Hard Fault exception occurs */
 45   while (1)
 46   {
 47   }
 48 }
 49 
 50 /**
 51   * @brief  This function handles Memory Manage exception.
 52   * @param  None
 53   * @retval : None
 54   */
 55 void MemManage_Handler(void)
 56 {
 57   /* Go to infinite loop when Memory Manage exception occurs */
 58   while (1)
 59   {
 60   }
 61 }
 62 
 63 /**
 64   * @brief  This function handles Bus Fault exception.
 65   * @param  None
 66   * @retval : None
 67   */
 68 void BusFault_Handler(void)
 69 {
 70   /* Go to infinite loop when Bus Fault exception occurs */
 71   while (1)
 72   {
 73   }
 74 }
 75 
 76 /**
 77   * @brief  This function handles Usage Fault exception.
 78   * @param  None
 79   * @retval : None
 80   */
 81 void UsageFault_Handler(void)
 82 {
 83   /* Go to infinite loop when Usage Fault exception occurs */
 84   while (1)
 85   {
 86   }
 87 }
 88 
 89 /**
 90   * @brief  This function handles SVCall exception.
 91   * @param  None
 92   * @retval : None
 93   */
 94 void SVC_Handler(void)
 95 {
 96 }
 97 
 98 /**
 99   * @brief  This function handles Debug Monitor exception.
100   * @param  None
101   * @retval : None
102   */
103 void DebugMon_Handler(void)
104 {
105 }
106 
107 /**
108   * @brief  This function handles PendSV_Handler exception.
109   * @param  None
110   * @retval : None
111   */
112 void PendSV_Handler(void)
113 {
114 }
115 
116 /**
117   * @brief  This function handles SysTick Handler.
118   * @param  None
119   * @retval : None
120   */
121 void SysTick_Handler(void)
122 {
123 }
124 
125 
126 
127 /****************************************************************************
128 *
129 * 函数名称:void TIM3_IRQHandler(void)
130 * 外部中断处理函数
131 *
132 ****************************************************************************/
133 
134 
135 void TIM3_IRQHandler(void)
136 {
137    
138 }
139 
140 
141 
142 
143 /****************************************************************************
144 *
145 * 函数名称:void EXTI9_5_IRQHandler(void)
146 * 外部中断处理函数
147 *
148 ****************************************************************************/
149 
150 void EXTI9_5_IRQHandler(void)
151 {
152   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判断是否产生了中断
153   {
154        EXTI_ClearITPendingBit(EXTI_Line5);//中断清除
155 
156       delay_ms(10);//延时消抖
157 
158       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖
159       {
160           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮
161           {
162            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //则熄灭
163           }
164           else
165           {
166               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮
167           }
168       }
169   }    
170 }
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 /****************************************************************************
181 * ?    ?úvoid EXTI1_IRQHandler(void)
182 * ?    ?úEXTI2???m??
183 * ????ú?
184 * ????ú?
185 * ?    ?ú
186 * ????ú? 
187 ****************************************************************************/
188 void EXTI1_IRQHandler(void)
189 {
190     
191 }
192 
193 /****************************************************************************
194 * ?    ?úvoid EXTI2_IRQHandler(void)
195 * ?    ?úEXTI2???m??
196 * ????ú?
197 * ????ú?
198 * ?    ?ú
199 * ????ú? 
200 ****************************************************************************/
201 void EXTI2_IRQHandler(void)
202 {
203     
204 }
205 
206 /****************************************************************************
207 *
208 * 函数名称:void EXTI3_IRQHandler(void)
209 * 函数功能:外部中断XTI3中断处理函数
210 * 
211 ****************************************************************************/
212 void EXTI3_IRQHandler(void)
213 {
214    u8 Tim=0,ok=0,Num=0,Data=0;
215 
216     while(1)
217     {
218        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1)
219        {
220            Tim=HW_jssj();//获得高电平时间
221 
222            if(Tim>=250)//超时,非法信号
223                   break;
224 
225            if(Tim>=200 && Tim<250)//4ms-5ms之间,起始码
226            {
227               ok=1;//收到起始新号
228             }
229  
230             else if(Tim>=60 && Tim<90)//1.2ms-1.8ms之间,数据1
231             {
232                Data=1;//收到数据1
233              }
234              
235             else if(Tim>=10 && Tim<50)//0.2ms-1.0ms之间,数据0
236             {
237                Data=0;//收到数据0
238              }
239 
240              if(ok==1)//收到起始信号,开始接收数据
241              {
242                  hw_jsm<<=1;
243                  hw_jsm+=Data;
244                            
245                  if(Num>=32)//接收完,共32位
246                  {
247                     hw_jsbz=1;//标志置1
248                     break;
249                   }  
250 
251                   Num++;
252                }
253           }
254 
255        EXTI_ClearITPendingBit(EXTI_Line3);                
256 
257      }
258      
259 }
260 
261 
262 /****************************************************************************
263 *
264 * 函数名称:USART1_IRQHandler(void)
265 * 函数功能:串口中断1处理函数
266 * 
267 ****************************************************************************/
268 void USART1_IRQHandler(void)
269 {
270     
271      if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否发生了串口中断
272      {
273          
274          USART_SendData(USART1,USART_ReceiveData(USART1));//从串口中读取数据,然后发送出去
275          
276          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
277          
278      }
279  }
View Code

 

4、工程下载:

 http://download.csdn.net/detail/a1181803348/8777117

 

 

 

 

 

 

 

 

三、红外发送

 

1、红外线发射原理图

技术分享

 

 

2、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

技术分享

 

 

3、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

技术分享

 

4、例程代码:

技术分享
  1 /*************************************************************************************************************************************
  2 *  
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7 
  8 #include "pbdata.h"//调用自定义公共函数库
  9 
 10 
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void NVIC_Configuration(void);//中断优先级配置函数声明
 19 void USART_Configuration(void);//串口配置函数声明
 20 
 21 void TIM2_Configuration(void);//定时器T2配置函数声明
 22 void   hw_fs(u32 dt);//红外线发射数据函数声明
 23 
 24 
 25 /********************************************************************************
 26 *
 27 *  函数名称:main(void)
 28 *  函数功能:主函数
 29 *  函数说明:不能用void定义主函数
 30 *
 31 ********************************************************************************/
 32 int main(void)//void不能void定义主函数
 33 {
 34     u32  dt=0x00FFD2AD;//红外线发射的数据    
 35     
 36     RCC_Configuration();    //系统时钟初始化
 37     
 38     GPIO_Configuration();//端口初始化
 39     
 40     USART_Configuration();//串口配置
 41     
 42     NVIC_Configuration();//中断优先级配置
 43     
 44     TIM2_Configuration();//定时器T2配置
 45     
 46     
 47     hw_fs(dt);//红外线发射数据
 48     
 49     
 50     while(1)
 51     {
 52         printf("fashe=%X\n",dt);
 53         
 54         delay_ms(3000);
 55     }
 56     
 57 }
 58     
 59     
 60 
 61 
 62 /********************************************************************************
 63 *
 64 *  函数名称:RCC_Configuration(void)
 65 *  函数功能:系统时钟高初始化函数
 66 *
 67 ********************************************************************************/
 68     void RCC_Configuration(void)//系统时钟高初始化函数
 69   {
 70         
 71     SystemInit();//系统初始化
 72     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能
 73         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//红外发送对应GPIO时钟使能
 74         RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//定时器T2时钟使能
 75         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
 76         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用
 77    
 78     }
 79     
 80     
 81 
 82 /*******************************************************************************
 83 *
 84 * 函数名称:GPIO_Configuration(void)
 85 * 函数功能:GPIO初始化函数
 86 *
 87 ********************************************************************************/    
 88     
 89     void GPIO_Configuration(void)//GPIO初始化函数
 90   {
 91               
 92         
 93 /*串口引脚配置*/
 94         GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 95 
 96 /*输出引脚配置*/        
 97         /*结构体变量赋值*/
 98       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX
 99       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
100         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出
101         /*对应的GPIO初始化*/
102       GPIO_Init(GPIOA,&GPIO_InitStructure);
103         
104     
105 /*输入引脚配置*/        
106         /*结构体变量赋值*/
107       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX
108         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入
109         /*对应的GPIO初始化*/
110       GPIO_Init(GPIOA,&GPIO_InitStructure);        
111 
112         
113   }
114     
115 
116 /****************************************************************************
117 *
118 *  函数名称:NVIC_Configuration(void)
119 *  函数功能:配置中断优先级
120 *
121 ****************************************************************************/
122     
123 void NVIC_Configuration(void)
124 {
125   NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
126     
127   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
128 
129   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
130   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
131   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
132   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
133     
134   NVIC_Init(&NVIC_InitStructure);//初始化
135 }
136     
137 
138 /*********************************************************************************
139 *
140 *  函数名称:
141 *  函数功能:串口配置函数
142 *
143 *********************************************************************************/
144 void USART_Configuration(void)
145 {
146 /*定义串口配置结构体变量*/
147         USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量
148     
149     
150 /*结构体变量赋值*/
151     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
152     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位
153     USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
154     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验
155     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
156     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能
157 
158     
159 /*发送串口配置初始化*/
160     USART_Init(USART1, &USART_InitStructure);
161     
162 
163 /*打开串口接收中断*/
164       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断
165     
166     
167 /*打开串口*/
168     USART_Cmd(USART1,ENABLE);//串口使能,打开
169         
170 /*清空中断标志位*/
171     USART_ClearFlag(USART1,USART_FLAG_TC);
172 }
173     
174     
175     
176     
177     
178 
179     
180     
181 
182     
183 
184     
185     
186     
187     
188     
189     
190     
191     
192     
193     
194     
195     
196     
197     
198     
199     
200     
201     
202     
203     
204     
205     
206     
207     
208     
View Code
技术分享
 1 #include "pbdata.h"
 2 
 3 
 4 
 5 
 6 /**********************************************
 7 *
 8 *  函数名称:TIM2_Configuration(void)
 9 *  函数功能:配置定时器
10 *
11 ***********************************************/
12 void TIM2_Configuration(void)
13 {
14     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个结构体配置变量
15     
16     TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//使用前清空标志位
17     
18    
19 
20 /*38k,周期26.316us,一个中断13.16us时间;CPU72M,一个周期1/72us*/
21    TIM_TimeBaseStructure.TIM_Period = 947;//初值:26.316/(1/72)=947个周期产生一次中断,初值为947
22    TIM_TimeBaseStructure.TIM_Prescaler = 0;//预分频
23    TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟
24    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式
25     
26    TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);//初始化配置
27     
28    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//打开中断(中断方式)
29     
30    TIM_Cmd(TIM3,ENABLE);//打开定时器
31 }
32     
33 
34 
35 
36 void   hw_fs(u32 dt)
37 {
38      u8 i=0;
39    flag=0;//初始化管脚
40    js_count=683;//起始信号持续9ms低电平,9ms/13.16us=683
41    flag=1;//管脚高电平
42    while(js_count);//一直到等于0
43     
44    js_count=341;//持续4.5ms高电平,4.5ms/13.16us=341
45    flag=0;//初始化管脚
46    while(js_count);//一直到等于0
47 
48 /*发送数据*/
49    for(i=0;i<32;i++)
50    {
51       js_count=42;//持续0.56ms低电平,0.56ms/13.16us=42
52       flag=1;//管脚高电平
53       while(js_count);//一直到等于0
54     
55       if((dt & 0x80000000)==0)//如果dt最高位为0,发射0
56       {
57          js_count=43;//持续0.565ms,0.565ms/13.16us=43
58        }
59        else//dt最高位为1,发射1
60        {
61           js_count=128;//持续1.69ms,1.69ms/13.16us=128
62 
63         }
64 
65        flag=0;
66        while(js_count);//一直到等于0
67 
68        dt<<=1;//依次从高到低发送,总共32位
69      }
70 
71      js_count=20;//0.263ms
72      flag=1;
73      while(js_count);//一直到等于0
74      flag=0;//恢复管脚状态
75 }
View Code
技术分享
 1 #ifndef   _HW_FS_H
 2 #define   _HW_FS_H
 3 
 4 #include "pbdata.h"
 5 
 6 void TIM2_Configuration(void);
 7 void   hw_fs(u32 dt);
 8 
 9 
10 #endif
View Code
技术分享
  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c 
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and 
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22 
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"     
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "stm32f10x_tim.h"
 28 #include "misc.h"
 29 #include "pbdata.h"
 30 
 31 void NMI_Handler(void)
 32 {
 33 }
 34 
 35 
 36 
 37 /**
 38   * @brief  This function handles Hard Fault exception.
 39   * @param  None
 40   * @retval : None
 41   */
 42 void HardFault_Handler(void)
 43 {
 44   /* Go to infinite loop when Hard Fault exception occurs */
 45   while (1)
 46   {
 47   }
 48 }
 49 
 50 /**
 51   * @brief  This function handles Memory Manage exception.
 52   * @param  None
 53   * @retval : None
 54   */
 55 void MemManage_Handler(void)
 56 {
 57   /* Go to infinite loop when Memory Manage exception occurs */
 58   while (1)
 59   {
 60   }
 61 }
 62 
 63 /**
 64   * @brief  This function handles Bus Fault exception.
 65   * @param  None
 66   * @retval : None
 67   */
 68 void BusFault_Handler(void)
 69 {
 70   /* Go to infinite loop when Bus Fault exception occurs */
 71   while (1)
 72   {
 73   }
 74 }
 75 
 76 /**
 77   * @brief  This function handles Usage Fault exception.
 78   * @param  None
 79   * @retval : None
 80   */
 81 void UsageFault_Handler(void)
 82 {
 83   /* Go to infinite loop when Usage Fault exception occurs */
 84   while (1)
 85   {
 86   }
 87 }
 88 
 89 /**
 90   * @brief  This function handles SVCall exception.
 91   * @param  None
 92   * @retval : None
 93   */
 94 void SVC_Handler(void)
 95 {
 96 }
 97 
 98 /**
 99   * @brief  This function handles Debug Monitor exception.
100   * @param  None
101   * @retval : None
102   */
103 void DebugMon_Handler(void)
104 {
105 }
106 
107 /**
108   * @brief  This function handles PendSV_Handler exception.
109   * @param  None
110   * @retval : None
111   */
112 void PendSV_Handler(void)
113 {
114 }
115 
116 /**
117   * @brief  This function handles SysTick Handler.
118   * @param  None
119   * @retval : None
120   */
121 void SysTick_Handler(void)
122 {
123 }
124 
125 
126 
127 /****************************************************************************
128 *
129 * 函数名称:void TIM3_IRQHandler(void)
130 * 外部中断处理函数
131 *
132 ****************************************************************************/
133 
134 
135 void TIM3_IRQHandler(void)
136 {
137     TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
138 
139     if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET)
140     {
141         if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
142         {
143             //LED 熄灭
144            GPIO_SetBits(GPIOB,GPIO_Pin_5);    
145         }
146         else
147         {
148            //LED 发光
149            GPIO_ResetBits(GPIOB,GPIO_Pin_5);
150         }
151     }
152 
153 }
154 
155 
156 
157 
158 /****************************************************************************
159 *
160 * 函数名称:void EXTI9_5_IRQHandler(void)
161 * 外部中断处理函数
162 *
163 ****************************************************************************/
164 void EXTI9_5_IRQHandler(void)
165 {
166   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判断是否产生了中断
167   {
168        EXTI_ClearITPendingBit(EXTI_Line5);//中断清除
169 
170       delay_ms(10);//延时消抖
171 
172       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖
173       {
174           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮
175           {
176            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //则熄灭
177           }
178           else
179           {
180               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮
181           }
182       }
183   }    
184 }
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 /****************************************************************************
195 * ?    ?úvoid EXTI1_IRQHandler(void)
196 * ?    ?úEXTI2???m??
197 * ????ú?
198 * ????ú?
199 * ?    ?ú
200 * ????ú? 
201 ****************************************************************************/
202 void EXTI1_IRQHandler(void)
203 {
204     
205 }
206 
207 /****************************************************************************
208 * ?    ?úvoid EXTI2_IRQHandler(void)
209 * ?    ?úEXTI2???m??
210 * ????ú?
211 * ????ú?
212 * ?    ?ú
213 * ????ú? 
214 ****************************************************************************/
215 void EXTI2_IRQHandler(void)
216 {
217     
218 }
219 
220 /****************************************************************************
221 *
222 * 函数名称:void EXTI3_IRQHandler(void)
223 * 函数功能:外部中断XTI3中断处理函数
224 * 
225 ****************************************************************************/
226 void EXTI3_IRQHandler(void)
227 {
228 
229      
230 }
231 
232 
233 /****************************************************************************
234 *
235 * 函数名称:USART1_IRQHandler(void)
236 * 函数功能:串口中断1处理函数
237 * 
238 ****************************************************************************/
239 void USART1_IRQHandler(void)
240 {
241     
242      if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否发生了串口中断
243      {
244          
245          USART_SendData(USART1,USART_ReceiveData(USART1));//从串口中读取数据,然后发送出去
246          
247          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
248          
249      }
250  }
251 
252 
253 /****************************************************************************
254 *
255 * 函数名称:void TIM2_IRQHandler(void)
256 * 定时器T2中断处理函数
257 *
258 ****************************************************************************/
259 
260 
261 void TIM2_IRQHandler(void)
262 {
263    if(flag==1)//发送载波频率
264    {
265         GPIO_WriteBit(GPIOD,GPIO_Pin_12,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_12))));//进入中断,管脚置反
266     }
267     else
268     {
269         GPIO_ResetBits(GPIOD,GPIO_Pin_12);
270      }  
271 
272     TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清中断
273 
274 }
View Code
技术分享
  1 /****************************************************************************************************************
  2 *
  3 * 文件名称:pbdata.c
  4 * 文件功能:自定义函数或者全局变量的初始化
  5 *
  6 ****************************************************************************************************************/
  7 
  8 /*头文件声明*/
  9 #include "pbdata.h"
 10 
 11 
 12 
 13 
 14 /********************************************************************************************
 15 *
 16 * 自定义全局变量
 17 *
 18 ********************************************************************************************/
 19 u8 dt=0;
 20 u8 flag=0;
 21 u16  js_count=0;
 22 
 23 
 24 
 25 /******************************************************************************************
 26 *
 27 * 自定义函数
 28 *
 29 ******************************************************************************************/
 30 
 31 
 32 
 33 /**************************************************
 34 *
 35 *  函数名称:delay_us(u32 nus)
 36 *  函数功能:微秒延时函数
 37 *  输入参数:输入值为延时us
 38 *
 39 ***************************************************/
 40 void delay_us(u32 nus)
 41 {
 42     u32 temp;
 43     SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
 44     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 45     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 46     
 47     do
 48     {
 49           temp=SysTick->CTRL;//标志位,等到一直减到0
 50          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 51     
 52     SysTick->CTRL=0x00; //关闭计数器
 53     SysTick->VAL =0X00; //清空计数器
 54 }
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 /***************************************************
 63 *
 64 * 函数名称:delay_ms(u16 nms)
 65 * 函数功能:毫秒级延时
 66 * 输入参数:输入值位延时ms
 67 *
 68 ****************************************************/
 69 void delay_ms(u16 nms)
 70 {
 71     u32 temp;
 72     SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
 73     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 74     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 75     
 76     do
 77     {
 78           temp=SysTick->CTRL;//标志位,等到一直减到0
 79          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 80     
 81     SysTick->CTRL=0x00; //关闭计数器
 82     SysTick->VAL =0X00; //清空计数器
 83 }
 84 
 85 
 86 
 87 /****************************************************
 88 *
 89 * 重定义printf函数部分
 90 *
 91 ****************************************************/
 92 int fputc(int ch,FILE *F)
 93 {
 94     
 95     USART_SendData(USART1,(u8)ch);
 96     
 97     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
 98     
 99     return ch;
100 }
View Code
技术分享
 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8 
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11 
12 
13 
14 
15 
16 /********************************************************************
17 *
18 *  调用的头文件放在这里
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22 
23 
24 #include "stm32f10x_rcc.h"
25 #include "stm32f10x_gpio.h"
26 #include "misc.h"
27 #include "stm32f10x_adc.h"
28 #include "stm32f10x_bkp.h"
29 #include "stm32f10x_can.h"
30 #include "stm32f10x_cec.h"
31 #include "stm32f10x_dac.h"
32 #include "stm32f10x_dbgmcu.h"
33 #include "stm32f10x_dma.h"
34 #include "stm32f10x_exti.h"
35 #include "stm32f10x_flash.h"
36 #include "stm32f10x_fsmc.h"
37 #include "stm32f10x_i2c.h"
38 #include "stm32f10x_iwdg.h"
39 #include "stm32f10x_pwr.h"
40 #include "stm32f10x_rtc.h"
41 #include "stm32f10x_sdio.h"
42 #include "stm32f10x_spi.h"
43 #include "stm32f10x_tim.h"
44 #include "stm32f10x_usart.h"
45 #include "stm32f10x_wwdg.h"
46 
47 
48 #include "stdio.h"
49 
50 
51 #include "hw_fs.h"
52 
53 /********************************************************************
54 *
55 *  自定义全局变量声明
56 *
57 ********************************************************************/
58 extern u8 dt;
59 
60 extern u8 flag;
61 extern  u16  js_count;
62 
63 
64 
65 /********************************************************************
66 *
67 *  自定义全函数声明
68 *
69 ********************************************************************/
70 void delay(u32 nCount);
71 void delay_us(u32 nus);
72 void delay_ms(u16 nms);
73 int fputc(int ch,FILE *F);
74 
75 
76 
77 #endif
View Code

 

5、工程下载:

 http://download.csdn.net/detail/a1181803348/8777119

18、红外

标签:

原文地址:http://www.cnblogs.com/STM32bo/p/4555558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!