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.