淺談基于stm32實(shí)現(xiàn)的紅外遙控控制USB鼠標(biāo)論文
遠(yuǎn)程遙控技術(shù)又稱為遙控技術(shù),是指實(shí)現(xiàn)對(duì)被控目標(biāo)的遙遠(yuǎn)控制,在工業(yè)控制、航空航天、家電領(lǐng)域應(yīng)用廣泛。紅外遙控是一種無(wú)線、非接觸控制技術(shù),具有抗干擾能力強(qiáng),信息傳輸可靠,功耗低,成本低,易實(shí)現(xiàn)等顯著優(yōu)點(diǎn),被諸多電子設(shè)備特別是家用電器廣泛采用,并越來(lái)越多的應(yīng)用到計(jì)算機(jī)系統(tǒng)中。以下是學(xué)習(xí)啦小編為大家精心準(zhǔn)備的:淺談基于stm32實(shí)現(xiàn)的紅外遙控控制USB鼠標(biāo)相關(guān)論文。內(nèi)容僅供參考,歡迎閱讀!
淺談基于stm32實(shí)現(xiàn)的紅外遙控控制USB鼠標(biāo)全文如下:
加快嵌入式技術(shù)的開(kāi)發(fā)應(yīng)用,掌握嵌入式開(kāi)發(fā)核心技術(shù),對(duì)于未能趕上前幾次世界范圍計(jì)算機(jī)技術(shù)發(fā)展機(jī)遇的中國(guó)來(lái)說(shuō)非常重要?;赟TM32 實(shí)現(xiàn)的紅外遙控控制USB 鼠標(biāo)就是利用STM32 的中斷系統(tǒng)將各模塊相互連接。當(dāng)STM32 捕獲到信號(hào)時(shí),向CUP 發(fā)送中斷請(qǐng)求,然后響應(yīng)該中斷,對(duì)中斷進(jìn)行處理。STM32 通過(guò)識(shí)別捕獲到的紅外信號(hào)向PC 端通過(guò)USB 協(xié)議發(fā)送鼠標(biāo)控制信號(hào)。
1、STM32 中斷系統(tǒng)
在STM32 中,外部中斷可由每一個(gè)I/O 口進(jìn)行外部事件的中斷觸發(fā)。在中斷控制器支持的19 個(gè)外部中斷事件中,只有線0 至15 對(duì)應(yīng)外部I/O 的輸入中斷,線16 則連接到PVD 的輸出,線17 連接到RTC 的鬧事件,線18 連接到USB 的喚醒時(shí)事件。在主程序運(yùn)行之前,需要先進(jìn)行中斷初始化,包括使能中斷通道、中斷優(yōu)先級(jí)分組初始化、配置中斷線。當(dāng)有多個(gè)中斷時(shí),CUP 處理中斷時(shí)嚴(yán)格按照中斷優(yōu)先級(jí)分組來(lái)決定處理哪個(gè)中斷。中斷優(yōu)先級(jí)分為搶占優(yōu)先級(jí)和子優(yōu)先級(jí),中斷處理的順序先有搶占優(yōu)先級(jí)決定,當(dāng)搶占優(yōu)先級(jí)相同時(shí),則由子優(yōu)先級(jí)決定。
2、STM32 通用定時(shí)器
STM32 的通用定時(shí)器是一個(gè)通過(guò)可編程預(yù)分頻器(PSC)驅(qū)動(dòng)的16 位自動(dòng)裝載計(jì)數(shù)器(CNT)構(gòu)成。在這次開(kāi)發(fā)中,STM32 的通用定時(shí)器主要用于測(cè)量輸入信號(hào)的脈沖長(zhǎng)度即輸入捕獲。當(dāng)輸入捕獲發(fā)生時(shí)將產(chǎn)生中斷/DMA。當(dāng)從獨(dú)立通道中捕獲到外界信號(hào)時(shí),定時(shí)器將測(cè)量外界信號(hào)的周期、占空比來(lái)實(shí)現(xiàn)信號(hào)的識(shí)別。例如,在測(cè)量時(shí),定時(shí)器設(shè)置為邊沿觸發(fā),即定時(shí)器會(huì)計(jì)算信號(hào)上升沿和下降沿之間的時(shí)間差,其計(jì)算精度取決于定時(shí)器本身頻率的精度。在測(cè)量方法中分為測(cè)頻法和測(cè)周法,當(dāng)被測(cè)信號(hào)頻率大于中介頻率時(shí)采用測(cè)頻法,即在STM32 中采用測(cè)頻法。
3、STM32 紅外遙控
紅外遙控是通過(guò)紅外發(fā)射信號(hào)的過(guò)程,在遙控器上不同的按鍵所發(fā)射的信號(hào)是不同的,這樣在接受端才能區(qū)別按鍵。紅外是不能穿墻的,但紅外遙控器也有無(wú)線電遙控器無(wú)法比擬的優(yōu)點(diǎn)—在多個(gè)紅外遙控器同時(shí)使用時(shí),盡管采用相同的遙控頻率或編碼,但不會(huì)出現(xiàn)遙控信號(hào)“串門(mén)”的情況。
在一點(diǎn)在家電中運(yùn)用非常廣泛。在STM32 中,我們使用的紅外遙控器編碼方式為PWM(脈沖寬度調(diào)制)的NEC 協(xié)議。其特征為:8 位地址和8 位指令長(zhǎng)度;地址和命令2 次傳輸(確保可靠性);PWM 脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;載波頻率為38Khz;位時(shí)間為1.125ms 或2.25ms。不同的邏輯和位碼采用了不同時(shí)間間隔的紅外高低脈沖。地址碼和控制碼等都采用8 位的數(shù)據(jù)格式,且用反碼表示以增加傳輸?shù)目煽啃浴?/p>
4、STM32 的主程序
在主程序中,首先要完成STM32 的延時(shí)函數(shù)、中斷分組設(shè)置、串口初始化、紅外接受初始化、USB 配置及初始化,其次就是while循環(huán)部分,這部分是最核心、最主要的一部分。在while(1)的死循環(huán)中,首先對(duì)遙控器的按鍵進(jìn)行監(jiān)控掃描。遙控器上的每一個(gè)按鍵都對(duì)應(yīng)一個(gè)獨(dú)一無(wú)二的鍵值key。通過(guò)函數(shù)Remote_Scan()進(jìn)行按鍵監(jiān)控掃描,若沒(méi)有檢測(cè)到按鍵,則鍵值key 為假,若檢測(cè)到遙控器有按鍵,則獲取相應(yīng)的鍵值并保存到key 中,并通過(guò)switch(key)對(duì)不同的key 進(jìn)行不同的處理。對(duì)相應(yīng)key 值的處理實(shí)際上就是準(zhǔn)備要發(fā)送的控制鼠標(biāo)的數(shù)據(jù)。
如何對(duì)相應(yīng)的key 值經(jīng)行數(shù)據(jù)處理呢,在這里,就要先了解它的發(fā)送數(shù)據(jù)的函數(shù)Joystick_Send(a,b,c,d)。參數(shù)a 是一個(gè)八位的數(shù)據(jù),a 的不同位置1 分別代表鼠標(biāo)中鍵按下、右鍵按下、左鍵按下、xy 坐標(biāo)的變化量和變化符號(hào)(光標(biāo)移動(dòng)方向)等。參數(shù)b 表示x 坐標(biāo)的變化量,這個(gè)變化量是相對(duì)上一次坐標(biāo)的變化量。
參數(shù)c 表示y 坐標(biāo)的變化量,同理為相對(duì)變化量。參數(shù)d 為滾輪的變化,可以控制滾輪的上下滾動(dòng)和滾動(dòng)速率。這里要介紹一下電腦的坐標(biāo)系,電腦的坐標(biāo)系不同于一般的直角坐標(biāo)系。電腦坐標(biāo)以屏幕左上角為原點(diǎn),水平向右為x 軸正方向,豎直向下為y 軸正方向。了解了數(shù)據(jù)發(fā)送函數(shù),就可以經(jīng)行數(shù)據(jù)準(zhǔn)備了。例如接受的鍵值key代表鼠標(biāo)左鍵按下,則設(shè)置參數(shù)a 的相應(yīng)位;若key 代表鼠標(biāo)右移,則設(shè)置參數(shù)b 為相應(yīng)整數(shù);若key 代表鼠標(biāo)滾輪上滾,則設(shè)置參數(shù)d。
理論上講,這樣的數(shù)據(jù)處理已經(jīng)比較完美了,可在實(shí)際使用中會(huì)發(fā)現(xiàn)另外一個(gè)問(wèn)題,就是鼠標(biāo)移動(dòng)靈敏度的問(wèn)題。這時(shí)需要定義另外一個(gè)參數(shù)s 代表靈敏度,在發(fā)送坐標(biāo)數(shù)據(jù)b 和c 時(shí),改為發(fā)送b*s 和c*s,這樣就可以相應(yīng)地?cái)U(kuò)大或減小鼠標(biāo)靈敏度了。當(dāng)發(fā)送完數(shù)據(jù)后,需要將b、c、d 數(shù)據(jù)清0。以上的處理在檢測(cè)到鍵值key 的情況下,當(dāng)沒(méi)有檢測(cè)到鍵值的情況下,若之前有鍵按下,則需發(fā)送松開(kāi)命令,即將a 置為0。
以上的整個(gè)過(guò)程都處在while(1)的死循環(huán)中,這樣的話,當(dāng)鼠標(biāo)長(zhǎng)時(shí)間沒(méi)有移動(dòng)的時(shí)候就會(huì)造成資源浪費(fèi)。這里提供一個(gè)解決思路:當(dāng)鼠標(biāo)在一定時(shí)間內(nèi)沒(méi)有任何觸發(fā)信號(hào)產(chǎn)生時(shí),可認(rèn)為此時(shí)之后的很長(zhǎng)一段時(shí)間內(nèi)都不會(huì)有信號(hào)產(chǎn)生,可將STM32 設(shè)置為休眠狀態(tài)。當(dāng)有觸發(fā)信號(hào)產(chǎn)生時(shí),可先用該觸發(fā)信號(hào)將STM32從休眠狀態(tài)喚醒,當(dāng)程序正常執(zhí)行時(shí),再處理該信號(hào)(當(dāng)然,也可以直接將該信號(hào)丟棄)。
5、結(jié)論
基于STM32 實(shí)現(xiàn)的紅外遙控控制USB 鼠標(biāo)旨在研究嵌入式系統(tǒng)的原理及系統(tǒng)設(shè)計(jì)。在本次的開(kāi)發(fā)中涉及到嵌入式特別重要的定時(shí)器、中斷等概念,將書(shū)本知識(shí)運(yùn)用于實(shí)際,注重基礎(chǔ)知識(shí),為以后嵌入式開(kāi)發(fā)奠定良好基礎(chǔ)。