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.
