【《單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例》2900字】_第1頁
【《單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例》2900字】_第2頁
【《單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例》2900字】_第3頁
【《單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例》2900字】_第4頁
【《單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例》2900字】_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例目錄TOC\o"1-3"\h\u20693單片機(jī)控制的LED系統(tǒng)硬件底層驅(qū)動的軟件實(shí)現(xiàn)案例 1233491.1SysTick系統(tǒng)定時器初始化 176111.2通用定時器配置 2301181.3ADC配置 25431.4DMA配置 320411.5中斷和GPIO配置 3319481.6PWM捕獲的軟件實(shí)現(xiàn) 4129541.7主程序框圖 476941.8本章小結(jié) 561572LED控制系統(tǒng)的功能實(shí)現(xiàn) 631162.1手動模式調(diào)節(jié)亮度實(shí)現(xiàn) 610022.2自動模式下的功能實(shí)現(xiàn) 61.1SysTick系統(tǒng)定時器初始化SysTick即系統(tǒng)定時器,其存在是為整個系統(tǒng)提供定時中斷,SysTick中斷處理程序不需要清除SysTick中斷源,因?yàn)楫?dāng)SysTick中斷處理程序被調(diào)用時,NVIC會自動清除該源。SysTick是一個24位計數(shù)器,如表4-1所示,每次計數(shù)器計數(shù)的時間是TDEC,當(dāng)數(shù)字寄存器從特定值減為零時,SysTick就會產(chǎn)生系統(tǒng)中斷。SysTick存在就是為系統(tǒng)提供一定時間的中斷,也可以說是時間間隔,就好像人的心跳一樣,有節(jié)奏的心跳是整個系統(tǒng)存在的基礎(chǔ)。表4-1SysTick中斷時間計算公式SysTick初始化一次計數(shù)時間中斷一次時間TDEC=1/SYSCLKTINT=VALUELOAD*TDEC

=VALUELOAD/CLKAHB注:SYSCLK=72M由表4-1可知中斷一次的時間TINT計算公式,當(dāng)VALUELOAD的值一定的時候,就可以計算出中斷一次的時間TINT。在軟件實(shí)現(xiàn)中,首選用函數(shù)SysTick_Init()對系統(tǒng)定時器進(jìn)行初始化操作,接著編寫了兩個延時函數(shù)(毫秒級voiddelay_ms(u16nms)、微秒級delay_us(u32nus)),兩個延時數(shù)都是硬件延時,非常準(zhǔn)確,這是之后對LED定時操作的關(guān)鍵,二者編寫邏輯上一致,首先重裝寄存器數(shù)值,再清零當(dāng)前數(shù)值寄存器,使能控制狀態(tài)寄存器,對這個數(shù)值進(jìn)行遞減,直至減到0產(chǎn)生中斷,這樣就可以得到一個精確的時間。1.2通用定時器配置STM32F103VET6擁有許多定時器,包括兩個個基本定時器(TIM6、TIM7)、四個通用計時器(TIM2-TIM5)和兩個高級定時器(TIM1、TIM8)?;居嫊r器的功能是最簡單的,通用計時器不難理解是在基本計時器的基礎(chǔ)上擴(kuò)展而來的(增加了可進(jìn)行捕獲的功能),高級定時器又增加了一些功能,不過本設(shè)計基本用不到多出的那些功能。STM32F103VET的通用計時器由一個PSC驅(qū)動的16位CNT組成,通用定時器可用于多種用途,本設(shè)計由用到其一個重要功能,PWM捕獲和PWM輸出,因此定時器的配置是設(shè)計的關(guān)鍵。本設(shè)計一共用了三個定時器,兩個通用定時器(TIME2、TIME3),一個高級定時器(TIME1),TIME2主要通過函數(shù)TIME2_Init()用來產(chǎn)生PWM,在自動模式下,TIME3通過函數(shù)TIME3_Init()和TIM3_IRQHandler(void)中斷服務(wù)函數(shù)來自動控制LED的一系列操作(如夜燈、人體紅外識別等功能)。高級定時器TIME1將會在以后的章節(jié)講到。1.3ADC配置STM32F103VET6芯片有三個ADC,此處使用的ADC1擁有16個外部通道。當(dāng)光敏電阻的電阻值發(fā)生變化時,引腳端的電壓也隨之改變,電壓范圍為0~3.3V,電壓信號會被處理。ADC的結(jié)果可以向左存儲,也可以在16位數(shù)據(jù)寄存器中向右排列。三個ADC的通道引腳對應(yīng)表如表4-2所示。表4-2ADC通道引腳對應(yīng)表ADC轉(zhuǎn)換后,模擬電壓為12位數(shù)字值如果直接打印出來,是不可能看懂相關(guān)信息的,因此,通常輸入電壓范圍為0V到3.3V。由于ADC為12位,12位滿量程(2^12)相當(dāng)于3.3V,12位全為0則對應(yīng)于0V。對應(yīng)關(guān)系式為:2^12/3.3=X/Y,=>Y=(3.3*X)/2^12(其中X為轉(zhuǎn)換值,Y為模擬電壓值)。在本設(shè)計中,使用ADC1來完成對光敏電阻模塊所采集的電壓信號操作,配置完函數(shù)ADC1_Init(),配置好對應(yīng)的GPIO引腳PA0后,再配置ADC工作模式和相應(yīng)的中斷服務(wù)函數(shù),就可以對完成模數(shù)轉(zhuǎn)換操作。1.4DMA配置前邊以及詳細(xì)介紹了DMA的原理以及優(yōu)點(diǎn),這里不再重復(fù)。本設(shè)計需要DMA來進(jìn)行大量數(shù)據(jù)的轉(zhuǎn)移且不占用CPU資源,DMA可以對模數(shù)轉(zhuǎn)換的數(shù)據(jù)進(jìn)行快速轉(zhuǎn)移。在軟件上,首先進(jìn)行宏定義和相關(guān)變量的定義,再通過函數(shù)DMA1_Init()配置使能DMA,運(yùn)行后就可以對光敏電阻端電壓進(jìn)行采集,主控制器接收信號后作出相應(yīng)控制動作。1.5中斷和GPIO配置本設(shè)計采用了許多引腳,GPIO和中斷配置數(shù)量很多,這里通過函數(shù)key_Init()來進(jìn)行這些配置,此外,還需要外部中斷2中斷服務(wù)函數(shù)EXTI2_IRQHandler()來實(shí)現(xiàn)檢測人體,外部中斷10-15中斷服務(wù)函數(shù)EXTI15_10_IRQHandler()來實(shí)現(xiàn)夜燈功能。1.6PWM捕獲的軟件實(shí)現(xiàn)上面章節(jié)已經(jīng)介紹了PWM的捕獲原理,本設(shè)計使用高級定時器的TIM1(PA8)。首先進(jìn)行宏定義,這能加快軟件編寫速度,通過函數(shù)ADVANCE_TIM_Mode_Config()對高級定時器輸入和相關(guān)GPIO初始化以后,再通過函數(shù)ADVANCE_TIM_NVIC_Config()進(jìn)行中斷優(yōu)先級配置,通過中斷服務(wù)函數(shù)ADVANCE_TIM_IRQHandler()編寫PWM的計算公式,最終完成PWM的捕獲。1.7主程序框圖主函數(shù)的整體框架如圖4-1和圖4-2所示,主函數(shù)主要完成了對上述初始化配置函數(shù)的應(yīng)用,以完成各種功能。手動模式的程序框圖如圖4-1所示,手動模式下完成的是對LED完成最基本的控制,這是本部分的目的。首先對系統(tǒng)定時器進(jìn)行初始化,配置中斷優(yōu)先級,ADC,通用、高級定時器,GPIO和外部中斷初始化,接著是用while(1)不停地檢測觸摸按鍵是否被觸摸,在LED處于閃爍提醒狀態(tài)或者關(guān)閉狀態(tài)時,單擊觸摸即可點(diǎn)亮LED;如果是連續(xù)觸摸且LED處于點(diǎn)亮狀態(tài),則通過逐漸減小PWM占空比來使LED漸暗,相反,如果LED不是最大亮度,則首先輸出占空比加大的PWM使LED漸亮,直至最亮。圖4-1手動模式程序框圖自動模式和手動模式可以通過一個按鍵進(jìn)行切換,自動模式的程序框圖如圖4-2所示,手動模式和自動模式共同組成了主函數(shù),首先都是對一些外設(shè)進(jìn)行初始化,自動模式下的目的是完成一些特定的功能(人體感應(yīng)、聲控LED),自動模式下有很多需要計時的任務(wù),這里最功不可沒的就是系統(tǒng)定時器。第一個要實(shí)現(xiàn)的功能是人體感應(yīng)開燈,如果在環(huán)境較暗且系統(tǒng)不是夜燈狀態(tài)下檢測到人體,則輸出占空比100%的PWM使LED點(diǎn)亮,系統(tǒng)會持續(xù)檢測人體,如果時間過長,則通過閃爍來提醒人,在人離開一定時間后LED也會自動熄滅;第二個功能是夜燈功能,如果在環(huán)境較暗時,外界有聲音或震動被聲控傳感器有效接收到,則點(diǎn)亮LED,一定時間后自動關(guān)閉,系統(tǒng)繼續(xù)檢測。圖4-2自動模式程序框圖1.8本章小結(jié)本章主要系統(tǒng)定時器初始化及配置、ADC配置、DMA配置、中斷和GPIO配置等方面描述了本設(shè)計在軟件層面的實(shí)現(xiàn),詳細(xì)敘述了DMA、定時器、中斷函數(shù)的配置方式和一些細(xì)節(jié),還有PWM配置,到這里就意味著功能實(shí)現(xiàn)最重要的階段已經(jīng)完成。

2LED控制系統(tǒng)的功能實(shí)現(xiàn)系統(tǒng)所使用的硬件已經(jīng)進(jìn)行了介紹,在第四章,本文又詳細(xì)敘述了實(shí)現(xiàn)系統(tǒng)全部功能的最關(guān)鍵的硬件的軟件底層驅(qū)動,在本章,將會使軟硬件結(jié)合,實(shí)現(xiàn)具體功能,對具體功能的相關(guān)細(xì)節(jié)進(jìn)行詳細(xì)介紹。圖5-1系統(tǒng)實(shí)物圖2.1手動模式調(diào)節(jié)亮度實(shí)現(xiàn)通過按壓按鍵(該按鍵接到了芯片的PE0),經(jīng)函數(shù)相關(guān)幾個函數(shù)會對該信號進(jìn)行判別,然后改變模式,可切換自動模式和手動模式。 在普通模式下,LED燈默認(rèn)是熄滅狀態(tài),系統(tǒng)會進(jìn)行檢測,等待LED狀態(tài)更新,連續(xù)觸摸按鍵時,輸出占空比增大的PWM,LED亮度隨之升高,直至亮度最高;在普通模式下,如果燈為亮度最高狀態(tài),系統(tǒng)等待LED狀態(tài)更新,連續(xù)觸摸按鍵時,輸出占空比減小的PWM,LED亮度隨之減小,直至變成一個最低亮度;如果不是連續(xù)觸摸按鍵,而是單擊一下按鍵,則可直接在LED點(diǎn)亮或者閃爍狀態(tài)下熄滅LED;系統(tǒng)會自動捕獲PWM,并將其占空比和周期顯示在上位機(jī)串口助手上。普通模式下實(shí)現(xiàn)的是最基礎(chǔ)的功能,即點(diǎn)亮LED并控制其亮度。2.2自動模式下的功能實(shí)現(xiàn)人體紅外感應(yīng)控制LED的實(shí)現(xiàn):當(dāng)環(huán)境亮度較低時,如果有人靠近系統(tǒng),將會被該紅外感應(yīng)模塊感應(yīng)到,此時紅外模塊將會向主控制器發(fā)出點(diǎn)亮LE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論