嵌入式系統(tǒng)原理及應(yīng)用-基于STM32和RT-Thread 課件 第5、6章 定時器、串口通信_第1頁
嵌入式系統(tǒng)原理及應(yīng)用-基于STM32和RT-Thread 課件 第5、6章 定時器、串口通信_第2頁
嵌入式系統(tǒng)原理及應(yīng)用-基于STM32和RT-Thread 課件 第5、6章 定時器、串口通信_第3頁
嵌入式系統(tǒng)原理及應(yīng)用-基于STM32和RT-Thread 課件 第5、6章 定時器、串口通信_第4頁
嵌入式系統(tǒng)原理及應(yīng)用-基于STM32和RT-Thread 課件 第5、6章 定時器、串口通信_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)原理及應(yīng)用第5章定時器1定時/計數(shù)器基本概念2STM32定時器3TIM應(yīng)用實例45課后作業(yè)本章總結(jié)定時器與計數(shù)器的概念和區(qū)別定時器基本問題5.1定時/計數(shù)器基本概念定時器分類本節(jié)小結(jié)5.1.1定時器與計數(shù)器的概念和區(qū)別定時器/計數(shù)器是MCU基本功能之一,在實際應(yīng)用中主要用于精確定時和外部計數(shù),通常簡稱為定時器。基于前后臺的時間片輪詢架構(gòu)中的時間片就是由定時器產(chǎn)生的,即由一個定時器產(chǎn)生精確定時,主程序根據(jù)時間片選擇執(zhí)行相應(yīng)的任務(wù)。STM32微控制器提供基本定時器、通用定時器、高級定時器等多種不同性能的定時器以滿足不同場合應(yīng)用需求。5.1.1定時器與計數(shù)器的概念和區(qū)別定時器是對周期固定的MCU內(nèi)部外設(shè)時鐘信號進(jìn)行計數(shù),當(dāng)達(dá)到計數(shù)值時會產(chǎn)生中斷,從而達(dá)到精確定時的目的。如脈沖信號周期為1ms,要產(chǎn)生1s精確定時,則可設(shè)置定時器從0開始向上遞增計數(shù),當(dāng)計數(shù)值達(dá)到1000時觸發(fā)中斷。計數(shù)器是對周期不確定的外部脈沖進(jìn)行計數(shù),通常用于統(tǒng)計一段時間內(nèi)外部脈沖個數(shù),可用于信號頻率測量、旋轉(zhuǎn)設(shè)備轉(zhuǎn)速測量、流水線工件計數(shù)等應(yīng)用。5.1.1定時器與計數(shù)器的概念和區(qū)別本質(zhì)上,定時器和計數(shù)器都是計數(shù)器,區(qū)別是計數(shù)對象不同,所對應(yīng)的應(yīng)用場景也不同,定時器可看成計數(shù)器的一種特例。由于精確定時是定時器/計數(shù)器的最基本功能,因此,行業(yè)內(nèi)通常將定時器/計數(shù)器簡稱為定時器。5.1.2定時器基本問題定時器應(yīng)用中通常會面臨四個基本問題,即周期、位數(shù)、計數(shù)值和中斷處理。周期即每秒鐘脈沖個數(shù)。定時器的位數(shù)決定了定時器的計數(shù)最大值,如八位定時器計數(shù)最大值為255,十六位定時器計數(shù)最大值為65535。計數(shù)值指定時器要計的脈沖個數(shù),通過設(shè)置計數(shù)初值和計數(shù)終止即可確定計數(shù)值。中斷處理是脈沖個數(shù)達(dá)到定時器計數(shù)值時要進(jìn)行的中斷服務(wù)。5.1.2定時器基本問題容量為300ml,原有水100ml,注水速度為1ml/s,量杯中水量為200時,停止注水,并將水倒入反應(yīng)罐中。對應(yīng)到定時器上,則計數(shù)最大值為300,計數(shù)初值為100,計數(shù)終值為200,可實現(xiàn)100s的精確定時,將水倒入反應(yīng)罐為中斷處理。如果要實現(xiàn)50s的精確定時,可以設(shè)置計數(shù)初值為200(100),計數(shù)終值為250(150),只要保證終值-初值為50即可。5.1.3定時器分類STM32L431RCT6微控制器有1個滴答定時器,1個IWDG,1個WWDG,1個RTC,2個低功耗定時器,1個高級定時器(TIM1),3個通用定時器(TIM2、TIM15和TIM16),2個基本定時器(TIM6和TIM7)。5.1.3定時器分類(1)滴答定時器STM32的滴答定時器(systemticktimer,SysTick)是一個24位的定時器,具有自動重載和溢出中斷功能。主要用于產(chǎn)生操作系統(tǒng)的時鐘節(jié)拍,方便系統(tǒng)在不同系列MCU的移植。此外,在前后臺架構(gòu)中還可以產(chǎn)生延時,如HAL_Delay函數(shù)就是用SysTick實現(xiàn)的ms延時函數(shù)。5.1.3定時器分類(2)看門狗定時器看門狗定時器主要作用是當(dāng)系統(tǒng)異常時自動復(fù)位,STM32提供了一個獨立看門狗定時器(Independentwatchdog,IWGD)和一個系統(tǒng)窗口看門狗定時器(Systemwindowwatchdog,WWDG)。5.1.3定時器分類(3)實時時鐘STM32的實時時鐘(Real-timeclock,RTC)是一個獨立的BCD(binary-codeddecimal,二進(jìn)制表示十進(jìn)制)定時器,為VBAT提供獨立電源(通常采用紐扣電池)后,即使系統(tǒng)斷電,RTC仍可繼續(xù)運(yùn)行,主要用于記錄時間,提供日歷。5.1.3定時器分類(4)低功耗定時器STM32L系列MCU具有多個低功耗定時器(Low-powertimer,LPTIM),LPTIM具有獨立的時鐘,可以在停止模式(stopmode)下運(yùn)行,主要用于功耗管理。5.1.3定時器分類(5)常規(guī)定時器常規(guī)定時器包括高級定時器、通用定時器和基本定時器主要功能高級定時器TIM1通用定時器TIM2/15/16基本定時器TIM6/7內(nèi)部時鐘源(8MHz)●●●帶16位分頻的計數(shù)單元●●●更新中斷和DMA●●●計數(shù)方向向上、向下、雙向向上、向下、雙向向上外部事件計數(shù)●●○本節(jié)小結(jié)理解定時/計數(shù)器概念;掌握定時器基本問題;了解定時器分類。TIM內(nèi)部電路脈沖寬度調(diào)制5.2STM32定時器本節(jié)小結(jié)5.2.1TIM內(nèi)部電路結(jié)構(gòu)輸入捕獲:高電平持續(xù)時間輸出比較:PWM時基單元時鐘源定時外部計數(shù)定時器級聯(lián)5.2.1TIM內(nèi)部電路結(jié)構(gòu)1.時基單元預(yù)分頻器是一個16位的寄存器,其作用是對計數(shù)時鐘(CK_PSC)進(jìn)行0~65535分頻。如計數(shù)時鐘為80MHz,預(yù)分頻器值為79,則計數(shù)時鐘經(jīng)預(yù)分頻器80(79+1)分頻后,將分頻后的時鐘(CK_CNT)輸入至計數(shù)器,計數(shù)器的值每1us改變1次。系統(tǒng)時鐘是80MHz,1ms定時,則PSC=?,ARR=?PSC=8000-1ARR=10-11us5.2.1TIM內(nèi)部電路結(jié)構(gòu)1.時基單元計數(shù)器對CK_CNT進(jìn)行計數(shù),如設(shè)置為向上計數(shù)模式,則每個CK_CNT周期,TIMx_CNT值加1,TIMx_CNT值達(dá)到終值時,產(chǎn)生溢出事件,進(jìn)而觸發(fā)中斷。如設(shè)置為向下計數(shù)模式,則每個CK_CNT周期,TIMx_CNT值減1,當(dāng)其值減為0時,產(chǎn)生觸發(fā)事件,觸發(fā)中斷。5.2.1TIM內(nèi)部電路結(jié)構(gòu)1.時基單元自動重裝載寄存器用于自動設(shè)置寄存器的計數(shù)終值或計數(shù)初值,當(dāng)計數(shù)模式為向上計數(shù)時,產(chǎn)生溢出事件后,自動重裝載寄存器的值作為計數(shù)終值自動填入計數(shù)器(計數(shù)初值為0),當(dāng)計數(shù)模式為向下計數(shù)時(計數(shù)終值為0),產(chǎn)生溢出事件后,自動重裝載寄存器的值作為計數(shù)初值自動填入計數(shù)器。5.2.1TIM內(nèi)部電路結(jié)構(gòu)2.捕獲比較單元一般通用定時器具有4路輸入捕獲/輸出比較通道(TIMx_CH1、TIMx_CH2、TIMx_CH3和TIMx_CH4)。輸入捕獲/輸出比較的核心是捕獲/比較寄存器(CCR),每個輸入捕獲/輸出比較通道都具有獨立的捕獲/比較寄存器。輸入捕獲/輸出比較通道的輸入信號經(jīng)多路復(fù)用、輸入濾波器、邊沿檢測器和預(yù)分頻器后更新值捕獲比較寄存器。捕獲比較寄存器與計數(shù)器進(jìn)行比較,當(dāng)捕獲比較寄存器的值大于或小于計數(shù)器的值時,會產(chǎn)生輸入捕獲事件、比較輸出事件或輸出脈沖信號。5.2.2脈沖寬度調(diào)制1.PWM參數(shù)PWM信號具有三個基本參數(shù),即周期、頻率和占空比。周期是一個完整的PWM波形所持續(xù)的時間;頻率是周期的倒數(shù),即1s內(nèi)完整PWM波形的個數(shù),單位為Hz;占空比是高電平持續(xù)時間與周期之比,用百分比表示。脈沖寬度調(diào)制(Pulse-WidthModulation,PWM)簡稱脈寬調(diào)制,是一種對模擬信號電平進(jìn)行數(shù)字編碼的方法,可以利用MCU的數(shù)字輸出,通過對一系列脈沖寬度進(jìn)行調(diào)制,實現(xiàn)對模擬電路的控制,廣泛應(yīng)用于測量、通信、工控等領(lǐng)域。5.2.2脈沖寬度調(diào)制PWM對模擬信號編碼的本質(zhì)是將脈沖信號加到模擬負(fù)載,高電平時提供直流輸出,低電平時斷開直流輸出。理論上,通過對高電平和低電平的時間控制,可以輸出任意不大于高電平電壓的模擬電壓,輸出電壓為高電平電壓與占空比的乘積。2.PWM電壓調(diào)節(jié)原理任何時候,都能輸出平均電壓?5.2.2脈沖寬度調(diào)制STM32通用定時器和高級定時器具有PWM輸出功能,通過設(shè)置預(yù)分頻器(PSC)、自動重裝載寄存器(ARR)和捕獲比較寄存器(CCR)值可獲得任意周期(頻率)和占空比的PWM輸出。3.STM32輸出PWM原理PSC和ARR用于控制PWM的周期,CCR用于控制PWM的占空比。當(dāng)周期確定后,每個周期CNT值加1,并與CCR值比較,當(dāng)CNT值小于CCR值時,CH通道輸出高電平,當(dāng)CNT值大于CCR值時,CH通道輸出低電平,當(dāng)CNT值等于ARR值時,CNT值自動置零,重新開始計數(shù)并與CCR值進(jìn)行比較,進(jìn)而實現(xiàn)連續(xù)的PWM輸出。5.2.2脈沖寬度調(diào)制CH通道輸出信號與計數(shù)方向、PWM模式和輸出極性均有關(guān)系。輸出極性包括高和低兩種極性,決定了CH輸出的有效電平,如極性為高則有效電平為高電平,反之有效電平為低電平。當(dāng)計數(shù)方向為向上或向下計數(shù)時,PWM有兩種模式,即PWM模式一和PWM模式二。4.CH輸出信號與計數(shù)方向、PWM模式和輸出極性的關(guān)系計數(shù)方向CNT與CCRPWM模式PWM模式一PWM模式二向上計數(shù)CNT<CCR有效電平無效電平CNT>CCR無效電平有效電平向下計數(shù)CNT<CCR無效電平有效電平CNT>CCR有效電平無效電平本節(jié)小結(jié)1.掌握TIM計數(shù)原理;2.掌握PWM電壓調(diào)節(jié)原理;3.掌握STM32的PWM輸出原理。TIM應(yīng)用實例1——精確定時TIM應(yīng)用實例2——PWM控制狀態(tài)指示燈5.3應(yīng)用實例本節(jié)小結(jié)5.3.1TIM應(yīng)用實例1——精確定時1.電路原理及需求分析采用按鍵控制LED,按鍵和LED相關(guān)電路原理圖如圖所示,按鍵一段接高電平,另一端經(jīng)限流電阻接GPIO引腳,下方電容和電阻構(gòu)成硬件消抖電路,按鍵松開時讀取引腳為低電平,按鍵按下時讀取引腳為高電平。5.3.1TIM應(yīng)用實例1——精確定時1.電路原理及需求分析(1)LED1(PA0)用于指示系統(tǒng)工作狀態(tài),上電或復(fù)位后,系統(tǒng)進(jìn)行初始化,初始化完成后,LED1先以0.5s的間隔閃爍3次,然后進(jìn)入正常運(yùn)行狀態(tài),LED1以1s的間隔閃爍。(2)按鍵K1通過輪詢的方式控制LED2,每按一次K1,LED2狀態(tài)發(fā)生一次改變。(3)按鍵K2通過外部中斷的方式控制LED2,每按一次K1,LED2狀態(tài)發(fā)生一次改變。5.3.1TIM應(yīng)用步驟1——精確定時2.實現(xiàn)過程(1)創(chuàng)建工程及最小系統(tǒng)配置。(2)定時器配置。(3)編程實現(xiàn)工程。5.3.1TIM應(yīng)用步驟2——PWM控制狀態(tài)指示燈1.電路原理及需求分析采用按鍵控制LED,按鍵和LED相關(guān)電路原理圖如圖所示,按鍵一段接高電平,另一端經(jīng)限流電阻接GPIO引腳,下方電容和電阻構(gòu)成硬件消抖電路,按鍵松開時讀取引腳為低電平,按鍵按下時讀取引腳為高電平。1.電路原理及需求分析(1)LED1(PA0)用于指示系統(tǒng)工作狀態(tài),上電或復(fù)位后,系統(tǒng)進(jìn)行初始化,初始化完成后進(jìn)入正常運(yùn)行狀態(tài),LED1以1s的改變亮度,亮度共10級,從亮度1逐漸變?yōu)榱炼?0,再從亮度10變?yōu)榱炼?,以此循環(huán)。(2)按鍵K1通過輪詢的方式控制LED2,每按一次K1,LED2狀態(tài)發(fā)生一次改變。(3)按鍵K2通過外部中斷的方式控制LED2,每按一次K1,LED2狀態(tài)發(fā)生一次改變。5.3.1TIM應(yīng)用步驟2——PWM控制狀態(tài)指示燈2.實現(xiàn)過程(1)創(chuàng)建工程及最小系統(tǒng)配置。(2)PWM配置。(3)編程實現(xiàn)工程。5.3.1TIM應(yīng)用步驟2——PWM控制狀態(tài)指示燈本節(jié)小結(jié)1.掌握工程創(chuàng)建及最小系統(tǒng)配置;2.掌握TIM精確定時應(yīng)用方法;3.掌握TIM輸出PWM應(yīng)用方法。5.4本章總結(jié)5.5課后作業(yè)1.繪制本章內(nèi)容思維導(dǎo)圖。2.實現(xiàn)實例功能,并總結(jié)實現(xiàn)過程。謝謝欣賞THEEND嵌入式系統(tǒng)原理及應(yīng)用第6章通用同步異步通信1通信基礎(chǔ)2STM32串口系統(tǒng)3USART應(yīng)用實例45課后作業(yè)本章總結(jié)通信分類異步串行通信6.1通信基礎(chǔ)本節(jié)小結(jié)6.1.1通信分類嵌入式系統(tǒng)中的通信是指MCU與MCU或外圍設(shè)備之間的信息交換。STM32L系列微控制器提供了通用同步/異步收發(fā)器(USART,UniversalSynchronousAsynchronousReceiverTransmitter)和低功耗通用異步收發(fā)器(LPUART,Lowpoweruniversalsynchronousasynchronousreceivertransmitter)用于同步或異步通信。6.1.1通信分類6.1.1通信分類6.1.1通信分類1.并行通信和串行通信并行通信用多條數(shù)據(jù)線將數(shù)據(jù)字節(jié)中的各位同時傳輸。效率高,成本高。串行通信用一條數(shù)據(jù)線將數(shù)據(jù)字節(jié)中的各位逐位傳輸。成本低,主流通信。6.1.1通信分類2.同步串行通信和異步串行通信有時鐘線,傳輸信息幀(多個字符),用于芯片間通信。無時鐘線,傳輸字符幀(一個字符),加起停標(biāo)志,通信速率相同,用于設(shè)備通信。6.1.1通信分類3.通信方向6.1.2異步串行通信異步串行通信簡稱串口通信,為了保證通信時收發(fā)數(shù)據(jù)的一致,發(fā)送方和接收方須遵守一些共同的約定,其中最重要的是字符幀格式和波特率。1.字符幀格式異步串行通信中一個字符幀通常由起始位、數(shù)據(jù)位、校驗位和停止位四部分構(gòu)成。6.1.2異步串行通信先發(fā)低位,后發(fā)高位!6.1.2異步串行通信起始位:1位,其值為0(低電平)。數(shù)據(jù)位:可設(shè)置為7至9個數(shù)據(jù)位(包含校驗位),一般無校驗時設(shè)置為8個數(shù)據(jù)位,有校驗時設(shè)置為9個數(shù)據(jù)位,其值為0(低電平)或1(高電平)。停止位:可設(shè)置為0.5位、1位、1.5位或2位,其值為1(高電平),通常設(shè)置為1位??臻e位:數(shù)據(jù)線為高電平,表示無數(shù)據(jù)傳輸。6.1.2異步串行通信校驗位:用于校驗數(shù)據(jù)傳輸正確與否,可設(shè)置為奇校驗、偶校驗或無校驗。設(shè)置為奇偶校驗時,數(shù)據(jù)位的最高位為校驗位,設(shè)置為無校驗時數(shù)據(jù)位最高位為數(shù)據(jù)的最高位,無校驗位。若設(shè)置為奇校驗,則當(dāng)接收方接收到數(shù)據(jù)時,校驗“1”的個數(shù)是否為奇數(shù),從而確定數(shù)據(jù)傳輸是否正確;若設(shè)置為偶校驗,則當(dāng)接收方接收到數(shù)據(jù)時,校驗“1”的個數(shù)是否為偶數(shù),從而確定數(shù)據(jù)傳輸是否正確;若設(shè)置為無校驗,則不對數(shù)據(jù)傳輸?shù)恼_性做判斷。6.1.2異步串行通信例:傳輸數(shù)據(jù)0x68(10000110),無奇偶校驗。6.1.2異步串行通信2.波特率異步串行通信以1個字符為傳輸單位,傳輸多個字符的時間間隔是任意的,如傳輸0x68后何時再傳輸0x69是不受約束的。但一字符幀內(nèi)相鄰兩位的時間間隔是確定的,如傳輸0x68時,D0位與D1位,D1位與D2位,D2位與D3位等的時間間隔是確定的,即傳輸速率是確定的,傳輸速率用波特率表示。6.1.2異步串行通信2.波特率波特率即每秒鐘傳輸二進(jìn)制信息的位數(shù),單位是為位/秒(bps或bit/s)。如每秒鐘傳輸240個字符,每個字符幀格式包含10位(1個起始位、1個停止位、8個數(shù)據(jù)位),則此時的波特率為:傳輸距離與波特率及傳輸線的電氣特性有關(guān)。當(dāng)傳輸線使用每0.3m(約1英尺)有50pF電容的非平衡屏蔽雙絞線時,傳輸距離隨波特率的增加而減小。當(dāng)波特率超過1000bps時,最大傳輸距離迅速下降,如115200bps時最大距離下降到只有30m。10位×240個/秒=2400bps本節(jié)小結(jié)了解通信的分類及不同通信方式的區(qū)別;掌握異步串行通信的字符幀格式;掌握波特率定義及計算方法。USART的特點USART內(nèi)部電路結(jié)構(gòu)6.2STM32串口系統(tǒng)本節(jié)小結(jié)6.2.1USART的特點STM32L系列微控制器具有LPUART和USART兩類串口,STM32L431RCT6芯片具有1個LPUART和3個USART。LPUART和USART的主要區(qū)別是LPUART可以采用低速時鐘作為時鐘源,在休眠模式下可以正常接收數(shù)據(jù),喚醒系統(tǒng)。在使用上LPUART與UASRT沒有本質(zhì)區(qū)別。1.具有相互獨立的數(shù)據(jù)接收和數(shù)據(jù)發(fā)送引腳,全雙工通信;2.具有獨立的高精度波特率發(fā)生器,不占用定時/計數(shù)器;3.支持5、6、7、8和9位數(shù)據(jù)位,1或2位停止位的字符幀結(jié)構(gòu);6.2.1USART的特點4.具有三個完全獨立的中斷:TX發(fā)送完成中斷、TX發(fā)送數(shù)據(jù)寄存器空中斷、RX接收完成中斷;5.支持奇偶校驗;6.支持?jǐn)?shù)據(jù)溢出檢測和幀錯誤檢測;7.支持同步操作,可主機(jī)時鐘同步,也可從機(jī)時鐘同步;8.支持多機(jī)通信模式。6.2.2USART內(nèi)部電路結(jié)構(gòu)6.2.2USART內(nèi)部電路結(jié)構(gòu)1.引腳通過引腳接收數(shù)據(jù)輸入(RX)、發(fā)送數(shù)據(jù)輸出(TX)、發(fā)送允許(CTS)、發(fā)送請求(RTS)和發(fā)送器時鐘輸出(CK)等引腳與外部設(shè)備相連。6.2.2USART內(nèi)部電路結(jié)構(gòu)1.引腳RX通過采樣技術(shù)來區(qū)別數(shù)據(jù)和噪聲,從而恢復(fù)數(shù)據(jù)。當(dāng)發(fā)送器被禁止時,TX引腳恢復(fù)到其IO端口配置。當(dāng)發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時,TX引腳處于高電平。6.2.2USART內(nèi)部電路結(jié)構(gòu)1.引腳RTS和CTS為硬件數(shù)據(jù)流控制引腳,用于協(xié)調(diào)收發(fā)雙方,避免數(shù)據(jù)丟失。RTS的作用是通知對方自己是否可以接收數(shù)據(jù),有效電平為低電平。CTS用于判斷對方是否可以接收數(shù)據(jù),低電平有效。6.2.2USART內(nèi)部電路結(jié)構(gòu)1.引腳CK為發(fā)送器時鐘輸出,用于同步傳輸?shù)臅r鐘,數(shù)據(jù)可以在RX上同步被接收,這可以用來控制帶有移位寄存器的外部設(shè)備(例如LCD驅(qū)動器)。時鐘相位和極性都是軟件可編程的。在智能卡模式里,CK可以為智能卡提供時鐘。6.2.2USART內(nèi)部電路結(jié)構(gòu)2.收發(fā)過程6.2.2USART內(nèi)部電路結(jié)構(gòu)2.收發(fā)過程0X33001100110011001100110011110011000100011001110011001100110011001100110X33本節(jié)小結(jié)1.了解USART特點;2.掌握USART收發(fā)過程。USART應(yīng)用實例1——串口打印USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控6.3應(yīng)用實例本節(jié)小結(jié)6.3.1USART應(yīng)用實例1——串口打印1.電路原理及需求分析串口打印信息即利用STM32的串口,結(jié)合借助串口調(diào)試助手,輸出一段有用信息。在程序指定位置打印信息可以直觀地觀察程序運(yùn)行狀態(tài),判斷程序運(yùn)行結(jié)果與預(yù)期邏輯是否一致,是一種簡單易用的調(diào)試方法。因此,在硬件設(shè)計時通常預(yù)留USART1用于串口打印信息,以進(jìn)行調(diào)試。由于PC串口和STM32串口通信電平不一致,通常采用PL2302、PL2303、CH340等芯片進(jìn)行USB和串口轉(zhuǎn)換,本書所用開發(fā)板采用CH342F芯片實現(xiàn)USB轉(zhuǎn)串口。1.電路原理及需求分析CH342F是南京沁恒微電子股份有限公司生產(chǎn)的USB總線轉(zhuǎn)換芯片,能夠?qū)崿F(xiàn)USB轉(zhuǎn)2個異步串口,每個串口都支持高速全雙工通信,波特率范圍50bps~3Mbps,內(nèi)置時鐘,無需外部晶振,支持DC3.3V和DC5V供電,具體細(xì)節(jié)可參考官方產(chǎn)品手冊。6.3.1USART應(yīng)用實例1——串口打印1.電路原理及需求分析6.3.1USART應(yīng)用實例1——串口打印1.電路原理及需求分析(1)LED1(PA0)用于指示系統(tǒng)工作狀態(tài),上電或復(fù)位后,系統(tǒng)進(jìn)行初始化,初始化完成后,LED1先以0.5s的間隔閃爍3次,隨后打印“SystemInitOK!”,然后進(jìn)入正常運(yùn)行狀態(tài),LED1間隔1s閃爍,同時根據(jù)LED1狀態(tài)打印“LED1On”(亮)或“LED1Off”(滅)。(2)按鍵K1和K2采用外部中斷方式,分別控制LED2和LED3,每按一次按鍵,LED狀態(tài)發(fā)生一次改變,同時根據(jù)LED狀態(tài)打印“LEDOn”或“LEDOff”。6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程本實例在“TIM應(yīng)用實例1——精確定時”基礎(chǔ)上完善功能,主要包括兩部分內(nèi)容:首先,實現(xiàn)按鍵K1和K2通過外部中斷方式控制LED2和LED3的亮滅;然后,增加串口打印功能,具體實現(xiàn)方法包括串口配置、編程實現(xiàn)功能、編譯下載程序等步驟。6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——串口配置采用USART1實現(xiàn)信息打印,USART1配置方式:選中USART1->配置模式(Mode)選擇異步模式“Asynchronous”。其它參數(shù)保持默認(rèn)(1起始位,8數(shù)據(jù)位,1停止位,無奇偶校驗,波特率115200)即可。6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——編程實現(xiàn)(1)串口重定向“printf”函數(shù)為C語言標(biāo)準(zhǔn)輸出函數(shù),需包含頭文件“stdio.h”,由于標(biāo)準(zhǔn)C語言中的“printf”函數(shù)輸出到屏幕上,顯需要用到串口,因此需重定向,即將利用串口實現(xiàn)printf輸出。包含頭文件程序添加在/*USERCODEBEGINIncludes*/和/*

USERCODEENDIncludes*/之間,重定向程序添加至/*USERCODEBEGIN0*/和/*USERCODEEND0*/之間。6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——編程實現(xiàn)(1)串口重定向main.c/*Privateincludes-----------------------------------------------*//*USERCODEBEGINIncludes*/#include"stdio.h"http://標(biāo)準(zhǔn)輸入輸出,printf函數(shù)需要包含該頭文件。/*USERCODEENDIncludes*/

/*USERCODEBEGIN0*//*串口重定向,需要將printf函數(shù)重定向至串口,可百度搜索相關(guān)程序*/#ifdef__GNUC__#definePUTCHAR_PROTOTYPEint__io_putchar(intch)#else#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)#endif

PUTCHAR_PROTOTYPE{//具體哪個串口可以更改huart1為其它串口HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xffff);returnch;}/*USERCODEEND0*/6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——編程實現(xiàn)(2)打印“SystemInitOK!”main.c/*1.LED1先以0.5s的間隔閃爍3次*/for(inti=0;i<6;i++){ HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);//電平翻轉(zhuǎn) HAL_Delay(500);}

printf("SystemOK!\n");//打印SystemInitOK!6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——編程實現(xiàn)(3)打印LED1狀態(tài)main.c/*定時器回調(diào)函函數(shù)*/voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ if(htim->Instance==TIM6)//判斷是否為TIM6 { /*1.正常運(yùn)行LED1間隔1s閃爍*/ HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); /*亮打印LED1On,滅打印LED1Off,需判斷*/ if(HAL_GPIO_ReadPin(LED1_GPIO_Port,LED1_Pin)==GPIO_PIN_RESET) { printf("LED1On!\n");//\n表示換行 } else { printf("LED1Off!\n");//\n表示換行 } }}6.3.1USART應(yīng)用實例1——串口打印2.實現(xiàn)過程——編程實現(xiàn)(4)打印LED2和LED3狀態(tài)main.c/*EXTI回調(diào)函數(shù)*/voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){ if(GPIO_Pin==K1_Pin)//判斷是否為K1 { HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin); } if(HAL_GPIO_ReadPin(LED2_GPIO_Port,LED2_Pin)==GPIO_PIN_RESET)//亮 { printf("LED2On!\n");//\n表示換行 } else { printf("LED2Off!\n");//\n表示換行 } if(GPIO_Pin==K2_Pin)//判斷是否為K1 { HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin); } /*亮打印LED1On,滅打印LED1Off,需判斷*/ if(HAL_GPIO_ReadPin(LED3_GPIO_Port,LED3_Pin)==GPIO_PIN_RESET)//亮 { printf("LED3On!\n");//\n表示換行 } else { printf("LED3Off!\n");//\n表示換行 }}6.3.1USART應(yīng)用實例1——串口打印6.3.2USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控1.電路原理及需求分析1.電路原理及需求分析(1)LED1用于指示系統(tǒng)工作狀態(tài),上電或復(fù)位后,系統(tǒng)進(jìn)行初始化,初始化完成后LED1間隔0.5s閃爍3次,隨后進(jìn)入正常運(yùn)行狀態(tài),LED1間隔1s閃爍。(2)按鍵K1和K2通過外部中斷的方式控制LED2和LED3的狀態(tài),按下時對應(yīng)LED亮,松開時對應(yīng)LED滅。(3)通過USART1將LED2、LED3、K1和K2狀態(tài)信息發(fā)送至串口調(diào)試助手,發(fā)送時間間隔為2s。(4)利用串口調(diào)試助手發(fā)送控制指令,實現(xiàn)LED2和LED3的開關(guān)控制。6.3.2USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控2.實現(xiàn)過程(1)程序流程6.3.2USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控2.實現(xiàn)過程(1)程序流程6.3.2USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控2.實現(xiàn)過程(1)程序流程1)外設(shè)初始化:系統(tǒng)上電或復(fù)位后,初始化外設(shè),包括GPIO、EXTI、TIM和USART,相應(yīng)初始化程序由STM32CubeIDE生成。6.3.2USART應(yīng)用實例2——開關(guān)量遠(yuǎn)程監(jiān)控2.實現(xiàn)過程(1)程序流程2)通信協(xié)議初始化:MCU發(fā)送狀態(tài)信息包括LED2、LED3、K1和K2的狀態(tài),數(shù)據(jù)采用十六進(jìn)制打包發(fā)送,MCU發(fā)送數(shù)據(jù)協(xié)議如表所列,初始化協(xié)議為:4841495400000000000000。協(xié)議頭(4字節(jié))設(shè)備ID(1字節(jié))LED2狀態(tài)(1字節(jié))LED3狀態(tài)(1字節(jié))K1狀態(tài)(1字節(jié))K2狀態(tài)(1字節(jié))保留(2字節(jié))48414954(HAIT)0000(滅

溫馨提示

  • 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

提交評論