CPU: STM32
調試平臺: STM32F103ZET和STM32F103VBT
軟件平臺: Keil uVision4
電路設計: Altium Designer v6.9
二、學習型紅外遙控設備的各個模塊實現
2.4 紅外脈寬存儲及FLASH的讀寫
根據STM32型號的不同,FLASH容量由16K到1024K不等。
FLASH模塊主要由三部分組成:主存儲器、信息塊、閃存存儲器接口寄存器。FLASH模塊組織:
詳細內容見《STM32中文參考手冊》小節《2.3.3 嵌入式閃存》。
主存儲器用來存放代碼和數據常數,對于大容量產品,劃分為256頁,每頁2K字節;中小容量產品每頁則是1K。信息塊的啟動程序代碼用來存儲ST自帶的啟動程序,用于串口下載,用戶選擇字節一般用來配置寫保護、讀保護。閃存存儲器接口寄存器是整個閃存模塊的控制機構,控制閃存的讀寫。
FLASH可以在通用地址空間直接尋址,任意32位數據的讀操作都能訪問FLASH內容,得到相應數據。FLASH的最快訪問速度≤24MHz,如果CPU頻率超過24MHz,必須加入等待時間。對于72MHz的主頻,FLASH的等待周期必須設置為2。
FLASH的編程和擦除。STM32的FLASH編程由FPEC模塊操作,在系統復位后,FPEC模塊會被保護起來,不能寫入。只有寫入特定的序列到FLASH_KEYR寄存器打開FPEC模塊解除寫保護后才能操作相關寄存器。
注意:STM32閃存編程每次必須寫入16位的數據,且要求寫入地址的FLASH已經擦除,否則寫入無效。
在指定地址寫入指定個數的數據,操作流程圖如下圖所示:
示例代碼見附件。
使用硬件仿真功能測試數據的讀寫是否正確。在Debug模式下,單步執行寫數據函數FLASH_WriteData()和讀數據函數FLASH_ReadData(),寫入和讀出的數據如下圖所示:
2.5 中斷方式實現的學習按鍵
學習按鍵的程序用外部中斷的中斷線2實現。
示例代碼見附件。
2.6 紅外信號的調制發送
由于學習是對紅外脈沖的完整復制,故發送只需把FLASH里的紅外數據取出調制到載波上發送出去即可,實現流程圖如下圖所示:
示例代碼如下:
/**
* SendPort_Init(void) 紅外發送端口控制初始化
*/
void SendPort_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/** 使能PD端口時鐘 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/** 使能PD端口配置 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3; //LED0-->PF6~~~PF10 端口配置
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顯示模塊
TFT是Thin Film Transistor(薄膜場效應晶體管)的簡稱,這種液晶顯示器上的每一像素點都由集成在后面的薄膜場效應晶體管驅動。故而這種顯示器速度快、亮度高、對比度高,分辨率也較其他類型的液晶顯示器高。
TFT液晶的驅動時序如下圖所示:
3 整個系統
整個系統完整的程序見附件(為減小文件,刪除了一些編譯時產生的文件,故工程需要重新編譯)
系統實物圖
參考文獻
[1] 廖義奎編著. Cortex-M3之STM32嵌入式系統設計. 北京: 中國電力出版社,2012.
[2] 張彬杰. 22個元件做出學習型遙控器[J]. 無線電, 2010(08):79-82.
[3] 意法半導體(中國)投資有限公司. STM32中文參考手冊. 2010.
上一篇:STM32復習筆記(七)定時器&定時器中斷
下一篇:基于stm32C8T6的紅外遙控器制作
推薦閱讀
史海拾趣