基於STM32的學習型通用紅外遙控設備的設計實現(三)


CPU: STM32
調試平台: STM32F103ZET和STM32F103VBT
軟件平台: Keil uVision4
電路設計: Altium Designer v6.9

http://blog.csdn.net/u013686019/article/details/19897961


二、學習型紅外遙控設備的各個模塊實現

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) 紅外發送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顯示模塊

TFTThin Film Transistor(薄膜場效應晶體管)的簡稱,這樣的液晶顯示器上的每一像素點都由集成在后面的薄膜場效應晶體管驅動。故而這樣的顯示器速度快、亮度高、對照度高,分辨率也較其它類型的液晶顯示器高。

TFT液晶的驅動時序例如以下圖所看到的:


3 整個系統

整個系統完整的程序見附件(為減小文件,刪除了一些編譯時產生的文件,project須要又一次編譯) 

系統實物圖

基於STM32的學習型通用紅外遙控設備的設計實現(一)

基於STM32的學習型通用紅外遙控設備的設計實現(二)


參考文獻

[1] 廖義奎編著. Cortex-M3之STM32嵌入式系統設計. 北京: 中國電力出版社,2012.

[2] 張彬傑. 22個元件做出學習型遙控器[J]. 無線電, 2010(08):79-82.

[3] 意法半導體(中國)投資有限公司. STM32中文參考手冊. 2010.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM