CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9
http://blog.csdn.net/u013686019/article/details/19897961
二、学习型红外遥控设备的各个模块实现
2.4 红外脉宽存储及FLASH的读写
FLASH模块组织:
具体内容见《STM32中文參考手冊》小节《2.3.3 嵌入式闪存》。
信息块的启动程序代码用来存储ST自带的启动程序,用于串口下载。用户选择字节一般用来配置写保护、读保护。闪存存储器接口寄存器是整个闪存模块的控制机构,控制闪存的读写。
FLASH的最快訪问速度≤24MHz。假设CPU频率超过24MHz。必须增加等待时间。对于72MHz的主频,FLASH的等待周期必须设置为2。
2.5 中断方式实现的学习按键
学习按键的程序用外部中断的中断线2实现。
演示样例代码见附件。
2.6 红外信号的调制发送
因为学习是对红外脉冲的完整复制,故发送仅仅需把FLASH里的红外数据取出调制到载波上发送出去就可以。实现流程图例如以下图所看到的:
/** * SendPort_Init(void) 红外发送port控制初始化 */ void SendPort_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /** 使能PDport时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /** 使能PDport配置 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3; //LED0-->PF6~~~PF10 port配置 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC, GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2); // PD0~~~PD2输出高 GPIO_ResetBits(GPIOD, GPIO_Pin_3); // 注意!!!!遥控器减号键例如以下图所看到的:!
!!
!
!!
!!
} /** * 示波器接收的键码 52: 0101 0010 * 单片机接收的键码 4A: 0100 1010 * 发送的键码 4A: 0100 1010 * 验证平台: 长虹电视机、单片机 * 验证通过: 电视机可接收 */ u16 sendCode[200] = {0}; void IR_SendData(u32 SendAddr) { u8 i; #if 0 u16 sendCode[200] = {0}; // 已通过验证 for(i=0; i<199; i++){ sendCode[i] = PulseTab[i]; } #endif FLASH_ReadData(SendAddr,sendCode,200); // 从对应FLASH地址取出数据 for (i=0; i<100; i++) { if ((sendCode[2*i]!=0) && (sendCode[2*i+1]!=0)) { IR_SEND = 0; delay_us(sendCode[2*i]); IR_SEND = 1; delay_us(sendCode[2*i+1]); } } // IR_SEND = 0; /** 以下两句及其重要,否则出错!!! */ // delay_us(555); IR_SEND = 1; }
2.7 TFT显示模块
3 整个系统
整个系统完整的程序见附件(为减小文件,删除了一些编译时产生的文件,故project须要又一次编译)
系统实物图
[1] 廖义奎编著. Cortex-M3之STM32嵌入式系统设计. 北京: 中国电力出版社,2012.
[2] 张彬杰. 22个元件做出学习型遥控器[J]. 无线电, 2010(08):79-82.
[3] 意法半导体(中国)投资有限公司. STM32中文參考手冊. 2010.