




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于STM32的智能紅綠燈控制系統(tǒng)設(shè)計與實現(xiàn)摘要目前,存在很多智能交通燈的設(shè)計案例,大多數(shù)是通過51單片機或者PLC來實現(xiàn)。本設(shè)計提出了一種利用STM32單片機自動控制交通燈的的方法。對交通燈的狀態(tài)預(yù)設(shè)為兩種,一種是普通狀態(tài),在普通狀態(tài)下,交通燈就根據(jù)路口預(yù)設(shè)的時間進行紅、黃、綠燈的交替變化和倒計時。另一種是特殊狀態(tài),在特殊狀態(tài)下,由藍牙模擬對交通燈進行遠程控制,實時調(diào)節(jié)不同交通情況下信號燈的狀態(tài),充分保證了交通信號燈在不同的狀態(tài)下可以來回切換,進一步完善了交通燈的控制系統(tǒng)。根據(jù)stm32f103c8t6單片機的原理和在實際應(yīng)用中的特點,本文給出了軟件和硬件設(shè)計的總體方案和各個模塊的詳細介紹,對于在STM32單片在設(shè)計交通燈的過程中有可能遇到的各種問題都有涉足。關(guān)鍵詞交通燈;STM32單片機;數(shù)碼管;藍牙;控制目錄TOC\o"2-2"\h\z\t"標題1,1"1引言 11.1交通燈的發(fā)展和趨勢 11.2交通燈的研究意義 12設(shè)計方案和工作原理 22.1設(shè)計方案 22.2工作原理 33STM32單片機模塊 43.1最小系統(tǒng)組成 43.2主要邏輯函數(shù)的實現(xiàn) 74LED信號燈模塊 94.1LED驅(qū)動電路 94.2LED初始化程序 95數(shù)碼管模塊 115.1數(shù)碼管模塊介紹 115.2數(shù)碼管驅(qū)動電路 125.3數(shù)碼管顯示程序 126藍牙模塊 136.1HC-05藍牙模塊介紹 136.2串口通信 15結(jié)論 18參考文獻 19附錄 201引言交通燈的發(fā)展和趨勢交通燈的出現(xiàn)已有一百多年的歷史,1868年12月10世界上出現(xiàn)了第一盞手搖煤氣交通燈。1914年,美國克里夫蘭市首次使用的電信號燈。由于技術(shù)的限制,交通燈一直以來采用人工切換的方式。直到晶體管和集成電路板的誕生,交通燈才實現(xiàn)從人工控制到自動控制的突破。但是當時的交通燈沒有統(tǒng)一的規(guī)定和控制,直到上個世紀70年代微軟共公司的崛起,才使得交通燈有了統(tǒng)一的處理系統(tǒng)。當前,國內(nèi)大多數(shù)交通燈還一直沿用以往的控制系統(tǒng)。大部分都是紅燈、黃燈和綠燈進行交替切換。當面對龐大的車流量量和人流量也受到了很多的限制。未來交通燈的發(fā)展趨勢,主要體現(xiàn)在智能化,主要包括以下幾個方面:可根據(jù)車流量自動調(diào)節(jié)路口時間。可根據(jù)路口突發(fā)狀況,自動調(diào)配時間??蛇h程控制多個交通燈。交通燈的研究意義眾所周知,交通運輸在城市發(fā)展中起著至關(guān)重要的作用。隨著21世紀汽車工業(yè)的飛速發(fā)展和人們生活水平的不斷提高,每個家庭都有自己的汽車。汽車的爆發(fā)式增長和城市初期建設(shè)道路無法拓寬是導(dǎo)致交通擁堵的主要原因。雖然城市的建設(shè)者們也紛紛使用各種措施去改善交通狀況,例如修建地鐵和城市快速路。但是面對交通高峰時期仍然是捉襟見肘。如何有效的緩解交通問題已經(jīng)成了各大城市關(guān)注的熱點問題之一。從目前來看,想要徹底的改變交通狀況,就需要城市建設(shè)者和規(guī)劃者們不惜成本的對城市道路進行拓寬和重新布局。顯然,從短期來講這是不現(xiàn)實的。短期想要改善交通狀態(tài),就不得不把目光放在路口的交通信號燈上。在過去的幾十年,交通燈已經(jīng)出現(xiàn)在各個城市的大小路口。雖然它們在當時可以很好的改善交通狀況。但是在目前龐大的交通參與者的情況下,顯然不能滿足。21世紀是情報和信息的時代,由微型計算機控制的智能交通燈,是改善交通狀況的一個重要研究方向。讓交通燈根據(jù)不同的路口狀態(tài)實現(xiàn)自動控制和遠程控制交通燈對目前的城市交通改善有著很現(xiàn)實的意義。同時,在未來越來越智能的交通控制系統(tǒng)才能適應(yīng)城市的發(fā)展需求。因此,研究智能交通燈有著長遠而又重要的意義。2設(shè)計方案和工作原理2.1設(shè)計方案本次設(shè)計的方案是在十字路口設(shè)計一個智能交通燈。在四個路口處分別各有一個紅色,黃色和綠色的LED燈。共有12個LED燈。此外,每個交叉點都有一個0.28英寸的兩位數(shù)公共陽極數(shù)碼管來顯示倒計時,總共有四個數(shù)碼管。其中,在東西方向和南北方向上的同種顏色的小燈由STM32單片機的同一個GPIO控制,同樣,同方向上的數(shù)碼管片選端也由單片機的同一個IO口控制。這樣既可以達到同步的效果又可以簡化電路。在正常狀態(tài)下南北和東西方向的紅綠燈依次交替倒計時改變燈色,實現(xiàn)通行和禁止。當在特殊情況下又分為以下表幾種狀態(tài)。命令東西LED南北LED東西數(shù)碼管南北數(shù)碼管禁止通行紅紅9999東西通行綠紅9999南北通行紅綠9999夜間模式黃黃0000復(fù)位————————(1)禁止通行:當?shù)缆烦霈F(xiàn)特殊情況不允許車輛通過時,通過手機向藍牙發(fā)送禁止通行的命令,東西南北各個路口都會顯示紅燈,并且數(shù)碼管顯示持續(xù)的99秒,無倒計時。此時所有路口的車輛都不允許通過。當?shù)诙谓拥酱嗣罘祷刂骱瘮?shù)。(2)東西通行或南北通行:當?shù)缆酚龅骄o急狀況,例如救護車通過時,只允許某一個方向通行,當用手機藍牙向單片機發(fā)送某一個方向通行的的命令后,這個方向就會顯示持續(xù)的綠燈,而另一個方向就會顯示持續(xù)的紅燈,數(shù)碼管顯示99秒無倒計時。當?shù)诙谓拥酱嗣?,返回主函?shù)。(3)夜間模式:此模式適用于深夜車輛少的情況,當深夜時發(fā)送此命令,十字路口的各個狀態(tài)都顯示黃燈。這樣在車輛少的情況下避免了等紅燈的時間。當?shù)诙谓拥酱嗣罘祷刂骱瘮?shù)。(4)復(fù)位指令:當交通燈在突發(fā)情況下出現(xiàn)問題或者卡死,通過該指令讓交通燈恢復(fù)到初始狀態(tài)。2.2工作原理圖SEQ圖\*ARABIC1總體控制圖大體結(jié)構(gòu)如上圖1所示,本設(shè)計采用STM32F103C8T6單片機的GPIOA7、GPIOA8、GPIOA9分別連接?xùn)|西方向的紅、綠、黃燈,用GPIOA10、GPIOA11、GPIOA12分別連接南北方向的紅、綠、黃燈,將這些不同顏色的LED燈的正極連接到3.3V電源,并通過限流電阻器將負極連接到單片機的不同GPIO端口。當微控制器輸出低電平時,LED燈的正極和負極之間會產(chǎn)生電位差,小燈就會發(fā)光。相反,當單片機輸出高電平時,小燈就會滅。共用了4個共陽極數(shù)碼管來顯示各個路口的時間。數(shù)碼管的A、B、C、D、E、F、G端口分別直接和單片機的GPIOB8——GPIOB14連接。東西方向上的片選端連接在一起,南北方向上的片選端連接在一起。用四個PMOS管SS8550來驅(qū)動這些數(shù)碼管。單片機的GPIOB4、GPIOB5驅(qū)動南北方向的PMOS,GPIOB6、GPIOB7驅(qū)動?xùn)|西方向上的PMOS。當STM32F103C8T6單片機的GPIO口輸出為低電平時,P型MOS管就會導(dǎo)通REF_Ref20096\r[2],數(shù)碼管的片選端為高電平。反之當STM32F103C8T6單片機的GPIO輸出高電平時,P型MOS管截止REF_Ref20096\r[2],片選端為低電平。當片選端為高電平時,根據(jù)位選端的電平變化,就能讓數(shù)碼管顯示相應(yīng)的示數(shù)。STM32F103C8T6微控制器的GPIOA2和GPIOA3分別發(fā)送數(shù)據(jù)TX和接收數(shù)據(jù)RX。將單片機的發(fā)送TX連接到藍牙模塊的接收RX,將單片機的接收RX連接到藍牙模塊的發(fā)送TX,然后將單片機和藍牙連接模塊到公共GND。就可以可實現(xiàn)單片機和藍牙模塊的相互通信。用手機給藍牙模塊發(fā)送命令,當藍牙模塊接收到命令根據(jù)串口中斷執(zhí)行相應(yīng)的函數(shù)。即可實現(xiàn)用手機遠程控制交通燈。3STM32單片機模塊3.1最小系統(tǒng)組成目前在各種資料上可以看到很多交通燈的設(shè)計案例,他們大多數(shù)采用單片機或者PLC去實現(xiàn)交通燈的功能。用單片機設(shè)計交通燈不僅設(shè)計簡單方便,而且成本也不高。STM32F103C8T6單片機雖然在眾多STM32系列單片機中性能不算優(yōu)越,但是相比于傳統(tǒng)51而言仍然是十分強大。僅有48個引腳,卻擁有20K的RAM、32個通用I/O口、64K的FLASH、3個USART、1個USB、2個SPI、2個I2C、一個CAN和兩組10通道的12位同步ADC。用其設(shè)計交通燈可以滿足各種需求。所以文中設(shè)計采用此款單片機。引腳圖如下圖2所示。圖SEQ圖\*ARABIC2引腳圖圖SEQ圖\*ARABIC3最小系統(tǒng)STM32最小系統(tǒng)如上圖3所示是微控制器運行的最低要求,它主要由五個部分組成:電源,時鐘電路,復(fù)位電路,調(diào)試接口和控制芯片REF_Ref21272\r[3]。(1)電源圖SEQ圖\*ARABIC4電源模塊本設(shè)計中使用的電源模塊是AMS1117-3.3V芯片,其主要功能是將5V電壓轉(zhuǎn)換為3.3V電壓以為單片機供電REF_Ref21605\r[4]。輸入和輸出各采用兩個濾波電容。(2)時鐘電路圖SEQ圖\*ARABIC5時鐘電路如圖5所示,本次設(shè)計STM32單片機最小系統(tǒng)采用了一個8M和一個32.768K的兩腳無緣晶振。8M晶體振蕩器主要用作系統(tǒng)時鐘。通過將PLL乘法器設(shè)置為9乘法器,最大工作頻率可以達到72MHZ。由石英內(nèi)部分頻器分頻15次后,由32.768K晶體振蕩器產(chǎn)生的振蕩信號可以得到1HZ信號,即秒針每秒運動32.768K=32768=2^15REF_Ref22131\r[5],以及石英時鐘中的內(nèi)部分頻器只能執(zhí)行15個分頻。如果將此晶體振蕩器更改為其他頻率,則在15個分頻之后,將無法獲得1HZ信號。因此,當使用32.768K晶體振蕩器時,數(shù)據(jù)轉(zhuǎn)換更加方便和準確。同時,硬件分別在8M晶體振蕩器和32.768K晶體振蕩器的兩側(cè)分別連接22PF和15PF負載電容器。它的功能是將電能轉(zhuǎn)換為其他形式的能量。沒有這兩個電容器,振蕩部分將沒有環(huán)路并停止振蕩,電路將無法正常工作。(3)復(fù)位電路圖SEQ圖\*ARABIC6復(fù)位電路從圖6可以看出,STM32微控制器的復(fù)位引腳在初始狀態(tài)下為高電平。當按下按鈕時,復(fù)位引腳的電平從高電平跳到低電平,從而產(chǎn)生復(fù)位信號。其中圖中C9電容的作用是按鍵消抖,因為按鍵在按下時大約有10ms左右的抖動,雖然對于肉眼幾乎察覺不到,但是對于STM32單片機來說以經(jīng)是很長的時間了,如果不用電容來消抖,就可能讓單片機執(zhí)行錯誤誤動作,進行多次復(fù)位。由于電容具有儲能作用,兩邊電壓不會突變,所以用電容防止按鍵抖動。(4)調(diào)試圖SEQ圖\*ARABIC7調(diào)試模塊調(diào)試接口也是程序下載口,主要有四根線,VCC,GND,SDIO,SCLK。在日常程序燒錄和在線仿真中,有兩調(diào)試方式一個是SWD,另一個是JTAG。JTAG有很多缺點。例如,JTAG在調(diào)試時使用更多的接口,并且在數(shù)據(jù)量較大時可能無法下載。而SWD的接口更加簡化,下載的可靠性更強。所以本次設(shè)計用的是SWD模式下載和在線仿真。3.2主要邏輯函數(shù)的實現(xiàn)整個程序的邏輯主要分為兩大塊,分別實現(xiàn)交通燈在普通狀態(tài)和特殊狀態(tài)下的功能。交通燈在正常情況下的功能是在主函數(shù)下實現(xiàn)的,首先在main()函數(shù)里對需要用到的交通燈和數(shù)碼管和串口初始化函數(shù)進行聲明。并根據(jù)需求設(shè)置串口的波特率和中斷優(yōu)先級分組。然后再while(1){}的死循環(huán)中執(zhí)行普通狀態(tài)下的交通燈顯示,具體流程下圖8所示:圖SEQ圖\*ARABIC8程序框圖特殊狀態(tài)下的功能是在串口中斷服務(wù)函數(shù)里實現(xiàn)的,根據(jù)串口接收的不同命令,去執(zhí)行相應(yīng)的函數(shù)。具體流程如下圖9所示。圖SEQ圖\*ARABIC9串口中斷流程4LED信號燈模塊4.1LED驅(qū)動電路圖SEQ圖\*ARABIC10LED驅(qū)動電路LED燈本質(zhì)上是具有單向?qū)щ娦缘陌l(fā)光二極管。此設(shè)計中的12個不同顏色的LED燈的正極直接連接到3.3V電源,負極再各通過一個470R的限流電阻接到STM32單片機的GPIO口上,限流電阻的作用主要是限制電流。因為LED燈的功率很小,如果不加任何電阻直接連的話可能會電流過大燒壞STM32單片機和LED燈。由圖10可知,單片機位高電平時LED燈正負極電壓相同,小燈不亮。當STM32單片機的引腳輸出低電平時,在小燈正負極之間產(chǎn)生一個電勢差,電流通過小燈從正極流到負極,小燈發(fā)光。所以單片機通過不斷切換IO口的高低電平就可以實現(xiàn)LED的亮滅。這種直接灌電流的驅(qū)動方式對于小功率LED器件可以使用,但是當器件過多或者稍微的大功率器件都不建議使用,最好使用MOS管驅(qū)動或者采用光耦隔離的方式,單片機的高低電平只控制MOS管或者光耦的開光,可以很好的保護電路不被燒壞。4.2LED初始化程序LED模塊我們主要用到的固件庫文件是:stm32f10x_gpio.c/stm32f10x_gpio.hstm32f10x_rcc.c/stm32f10x_rcc.hmisc.c/misc.h由于本次設(shè)計采用的是庫函數(shù)的方法。庫函數(shù)就是官方將各種寄存器的配置封裝在不同的函數(shù)里。這樣在編程時就不用去配置寄存器,直接去調(diào)用官方給的庫函數(shù)即可。這樣一來,使編程更加簡單和高效。所以可以在stm32f10x_rcc.c源文件中找到關(guān)于時鐘配置的相關(guān)函數(shù)。在stm32f10x_gpio.c源文件中可以找到單片機GPIO口相關(guān)的配置函數(shù)。為了增加程序的可讀性,在每個模塊都編寫一個C文件和一個H文件,使程序模塊化,本文中LED模塊的程序,以bsp_led.c和bsp_led.h來命名。在硬件連接上南北方向的紅、黃、綠的三個燈分別由GPIOA10、GPIOA12、GPIOA11來控制,在東西方向上的紅、黃、綠三個燈燈分別由GPIOA7、GPIOA9、GPIOA8來控制。首先在H文件中對輸出的IO口進行宏定義,以GPIOA10端口為例:#defineTrafficLightsSN_R_PORT GPIOA #defineTrafficLightsSN_R_CLK RCC_APB2Periph_GPIOA #defineTrafficLightsSN_R_PIN GPIO_Pin_10TrafficLightsSN_R_PORT代表GPIOA端口,TrafficLightsSN_R_CLK代表GPIOA端口的時鐘,TrafficLightsSN_R_PIN代表端口的引腳號。其他的LED控制引腳都如同上述方法進行宏定義。同時在H文件下也包含了三個函數(shù)的聲明,具體函數(shù)如下:voidLED_SN_GPIO_Config(void);voidLED_EW_GPIO_Config(void);voidTrafficLightsConfig(void);這三個函數(shù)的的具體內(nèi)容是在C文件下完成的。其中voidLED_SN_GPIO_Config(void)是南北方向IO控制端口的初始化函數(shù),voidLED_EW_GPIO_Config(void)對東西方向IO口直端口的初始化函數(shù)。這兩個函數(shù)的作用就對控制LED小燈的幾個GPIO口進行配置,具體內(nèi)容包括開啟該GPIO的時鐘、確定是哪幾個接口、接口的輸出模式輸出速度和GPIO口初始的電平狀態(tài)。在這里特別強調(diào)的是,STM32單片機在配置任何外設(shè)的時候外設(shè)的時候,都應(yīng)該先使能其對應(yīng)時鐘線上的時鐘,否則GPIO無法正常輸入輸出。文件中最后一個函數(shù)就是對上面兩個函數(shù)的聲明,當需要對LED控制函數(shù)初始化的時候只需調(diào)用第三個函數(shù),這樣是程序更加簡單易讀。5數(shù)碼管模塊5.1數(shù)碼管模塊介紹數(shù)碼管是我們?nèi)粘I钪泻艹R姷降碾娮语@示元器件,通常情況下,共有八個段,分別對應(yīng)于A,B,C,D,E,F(xiàn),G,DP。數(shù)字管的每個部分都是一個發(fā)光二極管。如果所有燈都點亮,將顯示一個八字和一個小數(shù)點。根據(jù)內(nèi)部結(jié)構(gòu)的不同,數(shù)碼管分為共陽極和共陰極,公共陽極將八個發(fā)光二極管的所有陽極連接在一起以形成公共端口REF_Ref22722\r[6]。當使用該器件時,將這個公共的陽極接在電源的正極,其他的八個二極管的負極接在控制端口。當需要顯示某個字符或者數(shù)字時,就改變控制端電平的組合狀態(tài)。例如:需要顯示數(shù)字八,只需要將DP置為高電平,其他七個控制端口都置為低電平。因為共陽極數(shù)碼管,低電平時會產(chǎn)生電勢差,電流流過二極管,從而發(fā)亮。而高電平時,二極管兩端電勢相同,所以不亮。共陰極數(shù)字管與共陽極數(shù)字管相對。它將八個二極管的陰極連接在一起以形成一個公共端子。正極用作顯示不同數(shù)字的控制端子。因此,對于普通陰極數(shù)字管,僅當控制端子處于高電平時才產(chǎn)生電勢差。二極管的相應(yīng)對應(yīng)部分才發(fā)光。本次交通燈的設(shè)計采用的是4個0.28寸的兩位共陽極數(shù)碼管顯示倒計時,如圖10所示:圖SEQ圖\*ARABIC11數(shù)碼管如圖10所示,6、9號引腳分別對應(yīng)的是片選端,其它A、B、C、D、E、F、G引腳分別連接單片機的GPIOB8、GPIOB9、GPIOB10、GPIOB11、GPIOB12、GPIOB13、GPIOB14。數(shù)碼管占用的GPIO口比較多,為了使設(shè)計更加簡單穩(wěn)定節(jié)省,因此,采用了動態(tài)顯示的方法。該方法是將這四個數(shù)字管的段代碼線的相應(yīng)段并行連接,由單片機的八個IO口控制,而各顯示位的公共端則有另外的IO口控制。所謂動態(tài)顯示就是每時每刻只有一位片選有效,即,顯示所選的數(shù)碼管,而不顯示其他未選擇的數(shù)碼管。因為每個間隔都很短,所以要定期以規(guī)則的間隔逐個點亮每個數(shù)碼管。由于每次間隔的時間都很短,人眼無法識別是依次點亮,以為多個數(shù)碼管在同時發(fā)光。這種效果也被稱為余暉效應(yīng)。5.2數(shù)碼管驅(qū)動電路一般情況下STM32單片機的電流輸出能力都很差,可能直接驅(qū)動少量數(shù)碼管效果還行,但是如果用單片機直接驅(qū)動多個數(shù)碼管,會導(dǎo)致單片機電流過小,從而導(dǎo)致數(shù)碼管亮度不足,甚至無法發(fā)光。所以本次設(shè)計采用P型MOS管SS8550來驅(qū)動數(shù)碼管,單片機通過控制MOS管的開關(guān),從而控制數(shù)碼管。圖SEQ圖\*ARABIC12數(shù)碼管驅(qū)動電路如圖11所示,為數(shù)碼管片選端的驅(qū)動電路,S1、S2、S3、S4分別連接單片機的GPIOB4、GPIOB5、GPIOB6、GPIOB7。因為南北方向上的兩個數(shù)碼管與東西方向上的兩個數(shù)碼管是分別同步的。所以,南北方向由相同的片選端S1、S2控制,東西方向由相同的片選端S3、S4控制。當STM32微控制器的GPIO輸出高電平時,P型MOS管的柵極電壓為3.3VREF_Ref24906\r[7],因此Vgs=0V,PMOS管截止,片選端為低電平。當STM32微控制器的GPIO輸出低電平時,P型MOS管的柵極電壓為0V,Vgs=-3.3V,PMOS管導(dǎo)通REF_Ref24906\r[7],片選端為高電平。從而驅(qū)動數(shù)碼管。5.3數(shù)碼管顯示程序數(shù)碼管程序主要放在ntube.c和ntube.h文件中,數(shù)碼管的A、B、C、D、E、F、G端口分別對應(yīng)單片機的GPIOB8——GPIOB14,在ntube.h文件中宏定義為:#defineNtube_Dis_Port GPIOB #defineAllNtube_DIS_Clk RCC_APB2Periph_GPIOB #defineAllNtube_DIS_Pin GPIO_Pin_8| GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14數(shù)碼管的四個片選端對應(yīng)的單片機接口為GPIOB4——GPIOB7在ntube.h文件中宏定義為:#defineNtube_CS_Port GPIOB #defineAllNtube_CS_Clk RCC_APB2Periph_GPIOB #defineAllNtube_CS_PinGPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7在ntube.c文件中主要包含以下六個函voidNTUBE_DIS_GPIO_Config(void);voidNTUBE_CS_GPIO_Config(void);voidNTUBE_GPIO_Config(void);voidNtube_DisplayEWSN(void);voidDisplay(uint16_tDATAa,uint16_tDATAb,uint16_tDATAc,uint16_tDATAd);其中函數(shù)voidNTUBE_DIS_GPIO_Config(void)是對單片機連接的數(shù)碼管對應(yīng)的A、B、C、D、E、F、G引腳的初始化。VoidNTUBE_CS_GPIO_Config(void)函數(shù)是對數(shù)碼管四個片選端引腳的初始化。主要包含引腳的輸出模式,輸出速度和初始狀態(tài)下引腳的電平狀態(tài)。voidNTUBE_GPIO_Config(void)是將上面的兩個函數(shù)包含在內(nèi),增加程序的可讀性。函數(shù)voidNtube_DisplayEWSN(void)和函數(shù)voidDisplay(uint16_tDATAa,uint16_tDATAb,uint16_tDATAc,uint16_tDATAd)編寫的是東西南北方向數(shù)碼管的顯示函數(shù)。具體函數(shù)見附錄三。6藍牙模塊6.1HC-05藍牙模塊介紹本次交通燈的設(shè)計在特殊情況下可以實現(xiàn)手機遠程對交通燈的控制。根據(jù)需求無線控制模塊采用的是JDY-30藍牙模塊,根據(jù)數(shù)據(jù)手冊可知,該模塊是基于藍牙3.0的協(xié)議標準,不僅性能穩(wěn)定,而且數(shù)據(jù)傳輸快且信號強。它的工作頻率2.4GHZ。圖SEQ圖\*ARABIC13藍牙實物圖如上圖13所示,是本次設(shè)計所需藍牙的實物圖,該產(chǎn)品功能強大,帶有內(nèi)置PCB天線,同時支持UART接口,支持與SPP主藍牙模塊,Android手機SPP和計算機SSP藍牙進行通信。此外,它還符合藍牙SPP串行端口協(xié)議,其傳輸速率可以達到每秒8K以上。產(chǎn)品原理圖14所示:圖SEQ圖\*ARABIC14藍牙模塊原理圖盡管模塊有許多引腳,但與STM32F103C8T6通信時僅使用了四個引腳,即TX,RX,VCC和GND。其中,VCC和GND是藍牙模塊的電源引腳,分別連接到電源的正極和負極。TX是發(fā)送數(shù)據(jù)線,連接到STM32串行端口的接收數(shù)據(jù)線RX。RX是接收數(shù)據(jù)線,與STM32微控制器串行端口的發(fā)送數(shù)據(jù)線連接。此外,藍牙模塊實現(xiàn)串口通信之前,還需要提前通過AT指令對藍牙的各項參數(shù)進行設(shè)置。不同型號的的藍牙其對應(yīng)的AT指令集也有所不同??筛鶕?jù)數(shù)據(jù)手冊查詢。以本藍牙為例:例子:設(shè)置配置密碼為1234發(fā)送:AT+PIN1234\r\n返回:+PIN=1234此時表示配對密碼已經(jīng)配置成1234例子:設(shè)置115200波特率發(fā)送:AT+BAUD8\r\n返回:+BAUD=8此時模塊波特率已經(jīng)設(shè)置成115200波特率根據(jù)以上例子依次用AT對藍牙進行名稱、密碼、波特率等的設(shè)置藍牙就可以和單片機連接使用了。6.2串口通信串口是微型計算機重要的外部接口之一,在軟件調(diào)試和程序下載過程中起著很重要的作用。現(xiàn)在使用的微型計算機基本上都帶有串口,當然STM32單片機也不例外。STM32F103C8T6擁有USART1、USART2和USART3三路串口。串口是異步通信,在使用時只用到了三個引腳,分別包括TX、RX和GND。本次交通燈遠程通信模塊的設(shè)計用到的是STM32C8T6單片機的串口二和藍牙模塊連接,即單片機的TX(GPIOA2)和藍牙模塊的RX連接,單片機的RX(GPIOA3)和藍牙模塊的TX連接REF_Ref25354\r[8]REF_Ref25638\r[9]。STM32單片機在使用庫函數(shù)開發(fā)時,不需要去配置寄存器,直接在庫函數(shù)中去調(diào)用相關(guān)函數(shù)。在stm32f10x_usart.c和stm32f10x_usart.h這兩個文件中包含了串口相關(guān)的函數(shù)。本設(shè)計中和串口相關(guān)的函數(shù)主要在bsp_usart.c和bsp_usart.h這兩個文件中。在C文件下主要包含了兩個函數(shù),一個是串口初始化函數(shù)voidbsp_USART2_Init(u32bound);另一個是串口中斷服務(wù)函數(shù)voidbsp_USART2_IRQHandler(void);串口初始化函數(shù),在上面已經(jīng)做了基本的概述,主要是配置對引腳的輸入輸出模式,端口的分時復(fù)用和串口模式和基本參數(shù)的設(shè)置,函數(shù)如下:NVIC_InitTypeDefNVIC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA時鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);USART_DeInit(USART2);//復(fù)位串口1//USART2_TXPA.2GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//PA.2GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //復(fù)用推挽輸出GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA2//USART2_RX PA.3GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化通過藍牙遠程控制交通燈,主要是在串口二的中斷服務(wù)函數(shù)里面實現(xiàn)的,當單片機接收到數(shù)據(jù)進入中斷,根據(jù)接收到的命令執(zhí)行相應(yīng)的函數(shù),函數(shù)如下:Voidbsp_USART2_IRQHandler(void){charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET){ USART_ReceiveData(USART2);} if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); //賦值 switch(Res) { case0X01:Action1();break;//夜間,全黃 case0X02:Action2();break; //禁止,全紅 case0X03:Action3();break;//南北通行,南北綠,東西禁止,東西紅 case0X04:Action4();break; //南北禁止,南北紅,東西通行,東西綠 case0X05:Action5();break; //復(fù)位 default:brea
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式身份認證協(xié)議的效率與安全性提升-全面剖析
- 人教版小學(xué)三年級英語詞匯擴展計劃
- 標簽設(shè)計對消費者感知影響-全面剖析
- 智慧城市安全框架構(gòu)建-全面剖析
- 人教版八年級下冊生物知識競賽計劃
- 智能物流配送系統(tǒng)研究-全面剖析
- 音樂學(xué)科學(xué)習(xí)能力提升計劃
- 品牌形象與消費者信任關(guān)系-全面剖析
- 小學(xué)數(shù)學(xué)二年級下冊教學(xué)計劃的跨學(xué)科教學(xué)設(shè)計
- 九年級物理知識鞏固計劃
- 腦梗死護理查房教學(xué)
- (新版)浙江省地方執(zhí)法證考試題庫及答案
- 車輛交通安全培訓(xùn)全面指南
- 手術(shù)室護士子宮切除手術(shù)護理配合常規(guī)
- 科技大篷車進校園方案
- DB61T 5097-2024 強夯法處理濕陷性黃土地基技術(shù)規(guī)程
- 12zg003多層和高層混凝土房屋結(jié)構(gòu)抗震構(gòu)造圖集
- 浙江省杭州地區(qū)七校聯(lián)考2025屆高二數(shù)學(xué)第一學(xué)期期末復(fù)習(xí)檢測試題含解析
- 甲狀腺手術(shù)甲狀旁腺保護
- 2023年江蘇常州中考滿分作文《方寸之間天地大》4
- 個人所得稅贍養(yǎng)老人書面分攤協(xié)議2024年
評論
0/150
提交評論