下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
YLYL-796智能建筑工程物聯(lián)網(wǎng)技術(shù)實(shí)訓(xùn)考浙江YL教育裝第一章產(chǎn)品簡(jiǎn) 第二章YLSTM32F107VCT開(kāi)發(fā)板硬件簡(jiǎn) 板載AD實(shí) 實(shí)時(shí)時(shí)鐘 第六章ARM應(yīng)用綜合實(shí) 第七章物聯(lián)網(wǎng)安卓應(yīng)用綜合實(shí) 第八章物聯(lián)網(wǎng)安卓開(kāi)發(fā) 第一章產(chǎn)品簡(jiǎn)介浙江YL教育裝備專(zhuān)利產(chǎn) 杯”大學(xué)生智能建筑工程實(shí)踐技能競(jìng)賽指定設(shè) 參考,以實(shí)際配置為準(zhǔn)系統(tǒng)器件主要包括各種電源、網(wǎng)絡(luò)、、顯示、輸入及輸出裝置等;輔材主要軟件則由各種系統(tǒng)軟件與通用軟件等組成使用本設(shè)備能夠使學(xué)生在模擬建筑平臺(tái)的各個(gè)自定義區(qū)域中對(duì)“ 周邊安防系統(tǒng)“DDC智能照明系統(tǒng)“物聯(lián)網(wǎng)智能家居系統(tǒng)”及“SASBAS及物聯(lián)網(wǎng)集成系統(tǒng)”進(jìn)行設(shè)計(jì)、安裝、接線、編程、組態(tài)、集成、調(diào)試、運(yùn)行、診斷作而各在的并熟其技點(diǎn)夠訓(xùn)練與檢驗(yàn)學(xué)生的團(tuán)隊(duì)協(xié)作、計(jì)劃組織、交流溝通、工程規(guī)劃及實(shí)施等能力,富職素,高合是適項(xiàng)考、師學(xué)學(xué)實(shí)實(shí)等方面求建電與能系實(shí)訓(xùn)核備。YLSTM32F107VCT整體功能簡(jiǎn)物聯(lián)網(wǎng)智能建筑主控板采用意法半導(dǎo)體的物聯(lián)型控制stm32F107VCT,其實(shí)物圖如圖2LCD12864圖3TFT觸摸屏液晶擴(kuò)展模一、YL主板功能簡(jiǎn)STM32F107VCT6,ARMCortex-M3內(nèi)核,ARMCortex-M3內(nèi)核,主頻72Mhz字節(jié)的FLASH和64K字節(jié)的1個(gè)10M/100M以太網(wǎng)接口,標(biāo)準(zhǔn)RJ45接1個(gè)USB2.0OTG全速接口,可以作為USBSLAVE,也可以作為USB1個(gè)標(biāo)準(zhǔn)的2.8/3.2寸TFTLCD接口,帶觸摸功能,分辨率320X240,26萬(wàn)色(支持的TFT驅(qū)動(dòng)ILI9341)1個(gè)SD卡接2個(gè)CAN總線接1個(gè)RS-485接2個(gè)RS-232C串口(使用DB9,線序與PC機(jī)相同1個(gè)IIC接口的EEPROM,24C02,容量2K比14個(gè)功能按鈕,其中包括WAKEUP喚醒功能和TEMPER功1個(gè)電源指示燈(綠色4個(gè)用戶狀態(tài)指示燈21個(gè)標(biāo)準(zhǔn)的JTAG/SWD仿真調(diào)試接1路電位器可調(diào)電阻模擬輸入,可以數(shù)轉(zhuǎn)換實(shí)2個(gè)DAC數(shù)模轉(zhuǎn)換接口連接到接線2個(gè)ADC模數(shù)轉(zhuǎn)換接口連接到接線1個(gè)DC5V電源接1個(gè)電源開(kāi)關(guān),板的電源,可以選擇從USB取電或DC5V電源接口取支持從JLINK取5V電源或3.3V電主板各模塊簡(jiǎn)YL主控板的處理器是STM32F107VCT6,該處理器基于ARMV7架構(gòu)的Cortex-M3內(nèi)核,主頻72Mhz,內(nèi)部含有256K字節(jié)的FLASH和64K字節(jié)的SRAM,LQFP100封裝。STM32主要產(chǎn)品系列家譜如圖4所示,STM32F107屬于互聯(lián)型系列(STM32ConnectivityLine),資源非常豐富,比其他系列多了USB2.0OTG全速接口和以太網(wǎng)IEEE1588接口。10M/100M
YL主控板采用高性價(jià)比的DM9161A作為10M/100M以太網(wǎng)PHY,采用RMII接口與處理器STM32F107內(nèi)部的IEEE1588MAC連接,標(biāo)準(zhǔn)RJ45接口,支持平行交叉網(wǎng)線自適USB2.0OTGYL主控板含有一個(gè)USB2.0OTG全速接口,既可以作為OTG與其它OTG設(shè)備相連協(xié)商主從角色;也可以固定作為USBSLAVE從設(shè)備與PC等主設(shè)備相連實(shí)現(xiàn)USB,USB鼠標(biāo),USB固件升級(jí)等功能;還可以固定作為USBHOST連接U盤(pán),USB鍵鼠等從設(shè)備。22320 X 40的顯示分辨率64萬(wàn)色可以真的顯示、文字和菜單等,配合觸摸功能實(shí)現(xiàn)靈活的控制,我們提供已經(jīng)調(diào)試成功的LCD液晶屏和觸摸屏的示例代碼。本開(kāi)發(fā)板具有市面罕見(jiàn)的完美支持ILI9341液晶驅(qū)動(dòng)功能SD有了它,我們的開(kāi)發(fā)板就相當(dāng)于擁有了一個(gè)大容量的外部器,不單可以用來(lái)提供數(shù)據(jù),也可以用來(lái)數(shù)據(jù),使得我們的板子可以完成的功能。CAN總線YL主控板提供兩組CAN總線CAN是控制器局域網(wǎng)絡(luò)(ControllerAreaNetwork,的簡(jiǎn)稱(chēng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。其所具主控板提供的兩組CAN總線接口可以很方便的與CAN設(shè)備CAN總線控制實(shí)驗(yàn)S-485接口YL主控板提供一組485RS-485采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。加上總線收發(fā)器具有高靈敏度,能檢測(cè)低至200mV的電壓,故傳輸信號(hào)能在千米以外得到恢復(fù)。RS-485采用半雙工工作方式,任何時(shí)候只能有一點(diǎn)處于發(fā)送狀態(tài),因此,發(fā)送電路須由使能信號(hào)加以控制。RS-485用于多點(diǎn)互連時(shí)非常方便,可以省掉許多信號(hào)線,其最大傳輸距離約為1219米,最大傳輸速率為10Mbps。-YL主控板提供兩個(gè)串口。由STM32F107VCT6的USART1和USART2 IICIICEEPROM常用于掉電數(shù)據(jù)保存,和配置數(shù)據(jù)等場(chǎng)合,YL主控板板載有一顆24C02,用于重要數(shù)據(jù),也可以用來(lái)做IIC實(shí)驗(yàn)及實(shí)現(xiàn)其他應(yīng)用。復(fù)位該按鈕是YL主控板整板硬件復(fù)位按鈕,當(dāng)按鍵按下時(shí),STM32處理器,液晶,以太網(wǎng),以及音頻 都將復(fù)位。YL主控板除了前面提到的復(fù)位按鍵這一特殊功能按鍵外,還提供四個(gè)按鍵,其中兩個(gè)按鍵分別為WAKEUP喚醒按鍵,以及TAMPER按鍵,另兩個(gè)為用戶可自定義功能的通用按鍵USER1和UE2。(說(shuō)明:這四個(gè)按鍵,可依據(jù)實(shí)際產(chǎn)品,定義成產(chǎn)品的功能按鍵,包括WAKEUP按鍵與TAMPER按鍵)YL主控板提供了1個(gè)電源指示燈和4路通用LED指示燈。電源指示燈指示3.3V電源是否正常。4路通用ED指示燈可以用于指示STM32開(kāi)發(fā)板的狀態(tài)。功User(默認(rèn)模式RTC實(shí)時(shí)時(shí)YL主控板內(nèi)置RTC實(shí)時(shí)時(shí)鐘,我們提供支持年月日時(shí)YL主控板提供了一路可調(diào)電阻作為模擬信號(hào)輸入,通過(guò)這一路可調(diào)電阻可以學(xué)習(xí)處理器的ADTAW仿真調(diào)試YL主控板提供標(biāo)準(zhǔn)的20針JTAG接口,可以直接和ULINK或者JINK等主流仿真器連接,同時(shí)支持SWD(因?yàn)镾TM32支持SWD)??梢杂糜谡{(diào)試STM32,更方便的開(kāi)發(fā)軟件。DC5V電源接YL主控板提供5V直流電源輸入接口,DC電源座符合常見(jiàn)電源適配器接口標(biāo)準(zhǔn),DC電源座的里面為電源正極,外面為電源負(fù)極。YL主控板支持4種供電方式:1、DC5V提供5V;2、USB提供5V;3、JLINK提供5V;4JLINK提供3.3VYL主控板板上使用3.3V電源,所以我們需要將USB的5V或DC電源座的5V或者Jlink提供的5V電壓轉(zhuǎn)換為3.3V。YL主控板將STM32處理器部分具有特殊功能的管腳連接到預(yù)留接線端子,提供一些可擴(kuò)展的功能。預(yù)留接口的管腳定義如下:1112223344556Y32f10的E功能復(fù)用的跳線設(shè) CAN總線的跳線與ICEEPROM選擇跳將P4跳帽連接上時(shí)I2CEEPROM被選擇連接,否則CAN總RS232串口1與USB選擇跳RS-232串口與USBOTG接口,跳線定義串口11-1-USBOTG接2-2-串口1RS232RS232串口1與USB選擇跳串口2可通過(guò)跳串口21-串口2RS4852-串口2RS232RTC實(shí)時(shí)時(shí)鐘跳TM32的BT采用CR1220紐扣電池和VCC3.3混合供電的方式,在有外部電源(VCC3.3)的時(shí)候,BT1不給處理器的VBTBT1給BTBTTCAN總線120Ω由于CAN總線在運(yùn)行時(shí)需在總線兩端匹配120Ω的電阻,因而在本物聯(lián)網(wǎng)智能建筑設(shè)備實(shí)訓(xùn)系統(tǒng)中,需用跳線帽將A總線連接的第一塊主板(燃?xì)怆娫辞度氚?和AN總線連接的最好()的2短接。觸摸屏和以太網(wǎng)接口的跳線2-3第三章相關(guān)驅(qū)動(dòng)安裝CANCANUSB 系統(tǒng)提示找到新硬件,選擇“是,僅這一次(Y)”選項(xiàng),并點(diǎn)擊“下一步”在如下畫(huà)面中,選擇“從列表或指定位置安裝(高級(jí)(S)”,并點(diǎn)擊“下一步”最后點(diǎn)擊“完成”(”((話框中選擇“硬件”(4)而后選擇“設(shè)備管理器”(5)最后在設(shè)備處理器中查看是否完成驅(qū)Z-TEKUSBGSMZ-TEK串口線插入U(xiǎn)SB口Z-TEK產(chǎn)品驅(qū)動(dòng)支持的windows系統(tǒng)包含如下WindowsWindows8WindowsWindows7WindowsWindowsWindowsXPWindows安裝方式一:一鍵式驅(qū)動(dòng)安裝步驟 \Windows全系統(tǒng)驅(qū)動(dòng) ,點(diǎn)擊點(diǎn)擊“下一步點(diǎn)擊“完成,安裝方式二:inf驅(qū)動(dòng)插入產(chǎn)品 端,系統(tǒng)會(huì)提示要安裝驅(qū)動(dòng),在“我的電腦”右鍵菜單選擇“管理進(jìn)入管理界面,打黃色感嘆號(hào)的即為USB在黃色設(shè)備上點(diǎn)擊右鍵“更新驅(qū)動(dòng)程序,選擇“瀏覽計(jì)算機(jī)。手動(dòng)查找并安裝選擇路徑至…\驅(qū)動(dòng)程序\Windows全系統(tǒng)驅(qū)動(dòng)\inf系統(tǒng)提示您,再安裝一次驅(qū)動(dòng),請(qǐng)重復(fù)步驟第四章ARM關(guān)開(kāi)MDK412備注:該軟件 :“YL-796用戶光盤(pán)\相關(guān)軟件\keilMDK安裝軟件MDk412.exe開(kāi)始安裝在下圖中點(diǎn)擊而后(1)點(diǎn)擊“Browse…”選擇安 ,(2)點(diǎn)擊確定,(3)并點(diǎn)擊 按鈕”繼續(xù)安點(diǎn)擊“Next安裝完成后,在桌面上雙擊 uVision4”進(jìn)入主程序選擇File菜單欄,點(diǎn)擊“LicenseManagement”進(jìn)行你的CID雙擊安裝源文 中的KEIL_Lic.exe文在跳出的如下界面中,的CID碼進(jìn)去,并選擇Target為“ARM”,而后點(diǎn)擊碼會(huì)自動(dòng)生成得到的序列號(hào),放到如圖所示位置,并點(diǎn)擊 LIC”按完成安裝JLink驅(qū)動(dòng)程序的安裝備注:該軟件 :“YL-796用戶光盤(pán)\相關(guān)驅(qū)動(dòng)\JLink驅(qū)動(dòng)雙擊“Setup_JLinkARM_V412.exe”接著跳轉(zhuǎn)到如下畫(huà)面,點(diǎn)擊“Yes”點(diǎn)擊“Next”點(diǎn)擊“Next”而后,點(diǎn)擊“Next”而后,點(diǎn)擊“Next”10.最后,點(diǎn)擊點(diǎn)擊“Finish”ARMLED作為開(kāi)發(fā)板硬件經(jīng)典入門(mén)實(shí)驗(yàn),非流水燈莫屬(流水燈也叫跑馬燈。YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板板載了4個(gè)LED指示燈,LED1,LED2,LED3和LED4。本實(shí)驗(yàn)將通過(guò)教你如該實(shí)驗(yàn)的關(guān)鍵在于如何控制STM32的IO口輸出高低電平。通過(guò)這一節(jié)的學(xué)習(xí),您將初步掌握STM32基本IO口的使用,邁出STM32學(xué)習(xí)的第一步。前面已經(jīng)跑馬燈的關(guān)鍵實(shí)際上就是如何控制STM32處理器的GPIO接口作為輸出STM32GPIO的原理和控制STM32IO8模擬輸入輸入浮空輸入下拉輸入上拉開(kāi)漏輸出推挽輸出typedef{GPIO_Mode_AIN=0x0,GPIO_Mode_IPD=0x28,GPIO_Mode_IPU=0x48,GPIO_Mode_Out_PP=0x10,GPIO_Mode_AF_OD=0x1C,GPIO_Mode_AF_PP=0x18在我們使用一個(gè)GPIO之前,我們一般需要對(duì)GPIO管腳的時(shí)鐘,和GPIO管腳模式以及STM32的GPIO端口在作為輸出時(shí),可以軟件配置端口最大支持的時(shí)鐘速率,有以下幾種輸出模式,最大時(shí)鐘速率輸出模式,最大時(shí)鐘速率2MHz50MHztypedefenum{STM32處理器的功耗可以依據(jù)實(shí)際的需求,選擇合適的時(shí)鐘速率,GPIO口支在對(duì)STM32的GPIO管腳有了一定的了解后,我們看一個(gè)完整的GPIO端口子為程序便于大家修改和移植,此處使用宏來(lái)定義指示燈的管腳等:#define #defineGPIO_LED_PORT #define #define #define #define #define 下面的LED_config函數(shù)是初始化YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板的4個(gè)LEDGPIO端口初始void{GPIO_InitTypeDef/*EnableGPIOB,GPIOCandAFIOclock*/RCC_APB2PeriphClockCmd(RCC_GPIO_LED|RCC_APB2Periph_AFIO,ENABLE);/*LEDspinsconfiguration*/GPIO_InitStructure.GPIO_Pin=GPIO_LED_ALL;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_LED_PORT,&GPIO_InitStructure);}YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板上總共有4個(gè)是用戶LED指示燈,由4個(gè)GPIO管腳分別LEDGPIO管腳輸出低電平時(shí),LED指示燈亮。反之,當(dāng)GPIO管腳輸出高電平時(shí),LED指示燈滅。這四個(gè)LED指示燈分別由PD2、PD3、PD4和PD7控制。LEDGPIOLEDGPIOGPIO管腳與對(duì)應(yīng)的LED燈關(guān)系如下LED指示燈電路如下所示:LEDLEDYLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板LED流水燈實(shí)驗(yàn)使用宏來(lái)定義指示燈的管腳等#defineRCC_GPIO_LED #defineGPIO_LED_PORT #define #define #define #define #define 下面的LED_config函數(shù)是初始化YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板的4個(gè)LEDGPIO端口初始化的子函數(shù)void{GPIO_InitTypeDef/*EnableGPIOB,GPIOCandAFIOclock*/RCC_APB2PeriphClockCmd(RCC_GPIO_LED|RCC_APB2Periph_AFIO,ENABLE);/*LEDspinsconfiguration*/GPIO_InitStructure.GPIO_Pin=GPIO_LED_ALL;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_LED_PORT,&GPIO_InitStructure);}以下為一些底層的函數(shù),Led_Turn_on_all函數(shù)就是點(diǎn)亮所有Led,其中調(diào)用的GPIO_ResetBits就是STM32F10x_StdPeriph_Lib_V3.3.0庫(kù)的標(biāo)準(zhǔn)函數(shù),作用是將指定的一個(gè)或多個(gè)管腳輸出低電平,前面講過(guò)只要Led管腳輸出低電平,指示燈就會(huì)發(fā)光。void{/*TurnOnAllLEDs*/}Led_Turn_off_all函數(shù)就是熄滅所有Led,其中那個(gè)調(diào)用的GPIO_SetBits也是STM32F10x_StdPeriph_Lib_V3.3.0庫(kù)的標(biāo)準(zhǔn)函數(shù),作用是將指定的一個(gè)或多個(gè)管腳輸出高電平,前面講過(guò)只要Led管腳高電平,指示燈就會(huì)熄滅。void{/*TurnOffAllLEDs*/}Led_Turn_on函數(shù)就是實(shí)現(xiàn)根據(jù)傳入的參數(shù)點(diǎn)亮特定的LedLed。voidLed_Turn_on(u8led){/*TurnOffSelectLED*/{casecasecasecase}}Delay_MyARM流水燈使用的延時(shí)函數(shù),簡(jiǎn)單的For循staticvoidDelay_MyARM(IOuint32_t{for(;nCount!=0;nCount--}有了以上的子函數(shù) 主函數(shù)就會(huì)比較簡(jiǎn)單int{u8KeyNum= ///*USARTxconfiguredasBaudRate=115200WordLength=8OneStopNoHardwareflowcontroldisabled(RTSandCTSReceiveandtransmitUSART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_Mode=USART_Mode_Rx|/*完成串口時(shí)鐘配置、GPIO配置、根據(jù)上述參數(shù)初始化并使能串口*/Init(COM1,&USART_InitStructure);//標(biāo)記COM2代表“COM1口”,COM1代表“COM2/*OutputamessageonHyperterminalusingprintffunction*/printf("\n\rUSARTIsNowReady\n\r");printf("|||/_|/_printf("| | | / )|)| |||| printf("| ||\\/|</ ||||\\\\/)| | |)//_||||_| while }MAIN函數(shù)一開(kāi)始就初始化LEDGPIO,然后“上電或復(fù)位后所有的LED閃爍一下”這樣的目的可以檢測(cè)4個(gè)指示燈是否可以正??捎谩W詈筮M(jìn)入While循環(huán),KeyNum變量每次加一,將KeyNum對(duì)4求余數(shù)(也可以說(shuō)取模)得到的0-3數(shù)字就是點(diǎn)亮對(duì)應(yīng)的LED,這LED流水燈實(shí)5VJLink 雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))而后對(duì)開(kāi)發(fā)板上電,最后跑馬燈會(huì)依次點(diǎn)亮,驗(yàn)證程序在正常運(yùn)行。(D1->D2->D3-按鍵檢測(cè)實(shí)YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板有的4個(gè)按鍵(SW2、SW3、SW4、SW5)制板上的LED1LEDSW5LED2LEDSW4LED3LEDSW3LED4LEDSW2YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板四個(gè)LED等和四個(gè)按鍵的管腳分別如下圖所示LEDLEDLED燈對(duì)應(yīng)的STM32GPIOIO8模擬輸入輸入輸入開(kāi)漏推挽typedef{GPIO_Mode_AIN=0x0,GPIO_Mode_IPD=0x28,GPIO_Mode_IPU=0x48,GPIO_Mode_Out_PP=0x10,GPIO_Mode_AF_OD=0x1C,GPIO_Mode_AF_PP=0x18在我們使用一個(gè)GPIO之前,我們一般需要對(duì)GPIO管腳的時(shí)鐘,和GPIO管腳模式以及STM32的GPIO端口在作為輸出時(shí),可以軟件配置端口最大支持的時(shí)鐘速率,有以下幾種10MHz輸出模式,最大時(shí)鐘速率2MHz50MHztypedefenum{速率主要針 GPIO作為輸出使用時(shí),作為輸入使用時(shí)可以不關(guān)注#defineRCC_GPIO_LED #defineGPIO_LED_PORT #define #define #define #define #define LED_configYLSTM32F1074LEDGPIO端口初void{GPIO_InitTypeDef/*EnableGPIOB,GPIOCandAFIOclock*//*LEDspinsconfiguration*/GPIO_InitStructure.GPIO_Pin=GPIO_LED_ALL;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_LED_PORT,&GPIO_InitStructure);}/*KEY按
鍵值/*ValuesmagictotheBoardkeys012345YLSTM32F107GPIO會(huì)使相應(yīng)的GPIO口變?yōu)榈碗娖?,因此,我們?cè)谟布霞恿松侠娮?,這樣我們配置按鍵使(GPO_ode_IN_FOTING下,也可以使用內(nèi)部的上拉電阻,這時(shí)我們需要配置按鍵使用的GPIO為輸入上拉模式(GPIO_Mode_IPU。為了不失一般性在這里我們配置按鍵使用的GPIO為輸入上拉模式。沒(méi)有收到有效信號(hào),保持這些GPIO口為高電平。Function : :ConfigurestheExtension : : :voidGPIO_KEY_Config(void){GPIO_InitTypeDef/*ConfigureKEY1Button*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_KEY1;/*ConfigureKEY2Button*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_KEY2;/*ConfigureKEY3Button*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_KEY3;/*ConfigureKEY4Button*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_KEY4;}按鍵檢測(cè)函數(shù),當(dāng)有按鍵按下時(shí),按鍵檢測(cè)函數(shù)返回對(duì)應(yīng)的鍵值。Function : :Readskeyfrom : : :ReturnKEY1,KEY2,KEY3,KEY4oru8ReadKeyDown(void){/*1keyispressed*/{return}/*2keyispressed*/{return}/*3keyispressed*/{return}/*4keyispressed*/{return}/*Nokeyispressed*/{return}}LEDLED的控制和int{u8KeyNum=/*LEDGPIO*//*LED閃爍幾次 /*KEYGPIO*//*Mainloop*/while(1){/*判斷是否與按鍵按下*//*LED燈,沒(méi)有按鍵按下點(diǎn)亮全部*/}5VJLink 在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))按下復(fù)位鍵的時(shí)候,4個(gè)LED燈起先閃爍3次,然后全部亮起。當(dāng)按住SW2鍵不放,D4亮起,其余熄滅。當(dāng)按住SW3鍵不放,D3亮起,其余熄滅。當(dāng)按住SW4鍵不放,D2亮起,其余熄滅。當(dāng)按住SW5鍵不放,D1亮起,其余熄滅。如下圖所示沒(méi)有按住按鍵時(shí),四個(gè)LED全亮,如SW2SW3SW4SW5LCD12864液晶屏顯示實(shí)LCD12864介庫(kù)的點(diǎn)陣圖形液晶顯示模塊;屏幕分辨率為128×64內(nèi)置有819216*16點(diǎn)漢字,和12816*8ASCII文人機(jī)交互圖形界面??梢燥@示8×4行16×16點(diǎn)陣的漢字.也可以顯示出自定義的圖形.2、顯示分辨率:128×64點(diǎn)3、內(nèi)置漢字字庫(kù),提供8192個(gè)16×164、內(nèi)置12816×8點(diǎn)陣字5、2MHZ時(shí)鐘頻6、顯示方式:STN、7、驅(qū)動(dòng)方式2DY8、視角方向:69、背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—10、通訊11、內(nèi)置DC-DC轉(zhuǎn)換電12、無(wú)需片選信號(hào),簡(jiǎn)化軟件設(shè)13、工作溫度:0℃-+55℃,溫度:-20℃-12864表5.3.112864的管腳管腳名稱(chēng)電管腳123.0--3-對(duì)比度(亮度)4RS=“H”,表示DB7——DB0RS=“L”,表示DB7——DB0為顯示5W=,E=,數(shù)據(jù)被讀到DB7——DB0==“ DB7——DB0的數(shù)據(jù)IR6使能信號(hào)7三態(tài)8三態(tài)9三態(tài)三態(tài)三態(tài)三態(tài)三態(tài)三態(tài)H:8位或4位并口方式,L-空S復(fù)位-LCD驅(qū)動(dòng)A背光源正端K背光(DDRAM字符顯示是通過(guò)將字符顯示編碼寫(xiě)入該字符顯示RAM實(shí)現(xiàn)的。根據(jù)寫(xiě)入內(nèi)容的不同,可分別在液晶屏上顯示CGROM(中文字庫(kù)、HCGROM(ASCII碼字庫(kù))及CGRAM(自定義字形的內(nèi)容三種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別 共4個(gè))顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8192種GB2312中文字庫(kù)字形。字符顯示RAM在液晶模塊中的地址80H~9FH。本實(shí)驗(yàn)中 采用串行方式驅(qū)動(dòng),其電路原理圖如下所LCD12864實(shí)驗(yàn)操作流5VJLink打開(kāi)文件 “ARM使用外擴(kuò)2014\3.LCD12864液晶顯示\Project\LCD12864\MDK-ARM”,雙擊“Project.uvproj”在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))5.3.3int{u8KeyNum= //LCD//LCD管腳////1 write_strdate("你好while{ }串口一通訊實(shí)STM32ST32的串口資源相當(dāng)豐富的,功能也相當(dāng)強(qiáng)勁。YT3107物聯(lián)網(wǎng)開(kāi)發(fā)板所使用的ST3F07T6最多可提供5路串口,有分?jǐn)?shù)波特率發(fā)生器、支持同步單線通信和半雙工單IIrDAIRENEDA等。串口最基本的設(shè)置,就是波特率的設(shè)置。STM32的串口使用起來(lái)還是蠻簡(jiǎn)單的,只要你開(kāi)啟了串口時(shí)鐘,并設(shè)置相應(yīng)IO口的模式,然后配置一下波特率,數(shù)據(jù)位長(zhǎng)度,奇偶校串口設(shè)置的一般步驟可以串口時(shí)鐘使能,GPIO時(shí)鐘使能。串口作為STM32的一個(gè)外設(shè),其時(shí)鐘由外設(shè)時(shí)鐘串口控制。STM32的每個(gè)串口都有3個(gè)控制寄存器USART_CR1~3置都是通過(guò)這3數(shù)據(jù)發(fā)送與接收。STM32的發(fā)送與接收是通過(guò)數(shù)據(jù)寄存器USART_DR來(lái)實(shí)現(xiàn)的,TDR和RDR串口狀態(tài)串口的狀態(tài)可以通過(guò)狀態(tài)寄存器USART_SR。其中包含RXNE和TC并且可以讀出來(lái)了這時(shí)候我們要做的就是盡快去USART_DR,通過(guò)讀USART_DR可以將該位清零,也可以向該位寫(xiě)0,直接清除。void //1{GPIO_InitTypeDefGPIO_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;ENABLE);//使能USART1,GPIOA時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_Init(GPIOA,&GPIO_InitStructure);//Usart1NVIC配N(xiāo)VIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3搶占優(yōu)先級(jí)3NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //子優(yōu)先級(jí)3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //根據(jù)指定的參數(shù)初始化VIC寄存器//USARTUSART_InitStructure.USART_BaudRate=9600; //bound;//一般設(shè)置為9600; USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長(zhǎng)為8位數(shù)據(jù)格式USART_InitStructure.USART_StopBits=USART_StopBits_1;//一個(gè)停止位USART_InitStructure.USART_Parity=USART_Parity_No;//無(wú)奇偶校驗(yàn)位 USART_InitStructure.USART_ModeUSART_Mode_Rx|USART_Mode_Tx;//收發(fā)模式USART_Init(USART1,&USART_InitStructure);//初始化串口USART_Cmd(USART1,ENABLE); }串口1對(duì)應(yīng)著PA9和PA10,分別為T(mén)XD1和RXD1,如下圖1P223P323該跳用一根“直連公線”的一端插上開(kāi)發(fā)板的串口一上,另一端與一“交叉母線”的一端相連接,“交叉母線”的剩余一端連接到串口線上,然后再將串口線連接至電腦,如下圖所示。5VJLink給開(kāi)發(fā)板上電 “ARM使用外擴(kuò)2014\4串口1\Project\chuankou\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download7.將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))最后打開(kāi)串口調(diào)試助手 設(shè)置波特率“9600校驗(yàn)位“無(wú)串口調(diào)試助手會(huì)收到如下信息在串口調(diào)試助手中發(fā)送任意5如下串口二通訊實(shí)STM32ST32的串口資源相當(dāng)豐富的,功能也相當(dāng)強(qiáng)勁。YT3107物聯(lián)網(wǎng)開(kāi)發(fā)板所使用的ST3F07T6最多可提供5路串口,有分?jǐn)?shù)波特率發(fā)生器、支持同步單線通信和半雙工單IIrDAIRENEDA等。串口最基本的設(shè)置,就是波特率的設(shè)置。STM32的串口使用起來(lái)還是蠻簡(jiǎn)單的,只要你開(kāi)啟了串口時(shí)鐘,并設(shè)置相應(yīng)IO口的模式,然后配置一下波特率,數(shù)據(jù)位長(zhǎng)度,奇偶校串口設(shè)置的一般步驟可以串口時(shí)鐘使能,GPIO時(shí)鐘使能。串口作為STM32的一個(gè)外設(shè),其時(shí)鐘由外設(shè)時(shí)鐘串口控制。STM32的每個(gè)串口都有3個(gè)控制寄存器USART_CR1~3置都是通過(guò)這3數(shù)據(jù)發(fā)送與接收。STM32的發(fā)送與接收是通過(guò)數(shù)據(jù)寄存器USART_DR來(lái)實(shí)現(xiàn)的,TDR和RDR串口狀態(tài)串口的狀態(tài)可以通過(guò)狀態(tài)寄存器USART_SR。其中包含RXNE和TC并且可以讀出來(lái)了這時(shí)候我們要做的就是盡快去USART_DR,通過(guò)讀USART_DR可以將該位清零,也可以向該位寫(xiě)0,直接清除。TC(發(fā)送完成),當(dāng)該位被置位的時(shí)候,表示USART_DR內(nèi)的數(shù)據(jù)已經(jīng)被發(fā)送完成void //2{NVIC_InitTypeDef/*SettheVectorTablebaseaddressat0x NVIC_InitStructure.NVIC_IRQChannel= NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_Mode=USART_Mode_Rx|Init(COM1, //對(duì)應(yīng)為串口/*Enablethe 1Transmoitinterrupt:thisinterruptisgeneratedwhenthe1transmitdataregisterisempty*/USART_ITConfig(USART2,USART_IT_TXE,/*Enablethe 1Receiveinterrupt:thisinterruptisgeneratedwhenthe 1receivedataregisterisnotempty*/USART_ITConfig(USART2,USART_IT_RXNE,TxCounter=/*OutputamessageonHyperterminalusingprintffunction//printf("\n\rUSARTPrintfExample:retargettheClibraryprintffunctiontothe x,printf("\n\r !############ "- printf("\n\rSTM32F107use printf("\n\rFlash大小為:%dK字節(jié)! IOprintf("\n\r系統(tǒng)內(nèi)核時(shí)鐘頻率(SystemCoreClock)為:%dHz.\n\r",}串串口2對(duì)應(yīng)著PD5和PD6,分別為T(mén)XD2和RXD2,如下圖所串口2通訊實(shí)驗(yàn)的跳線說(shuō)明如下:用跳線帽將P5下面兩個(gè)腳短該跳線設(shè)置的特寫(xiě)圖如下5VJLink給開(kāi)發(fā)板上電 “ARM使用外擴(kuò)2014\5串口2\Project\chuankou\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download7.將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi)) ,設(shè)置波特率為“115200”校驗(yàn)位為“無(wú)NON,數(shù)據(jù)位為“8,停止位為“1。如下圖所示。串口調(diào)試助手會(huì)收到如下信息在串口調(diào)試助手中發(fā)送任意5板載AD實(shí)STM32ADC簡(jiǎn)STM32擁有1~3個(gè)ADC(STM32F101/102系列只有1個(gè)ADC),這些ADC可以獨(dú)立使用,也可以使重模式(提高采樣率)。STM32的ADC是12位逐次近型的模擬數(shù)字連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式在16位數(shù)據(jù)寄存器STM32將ADC的轉(zhuǎn)換分為2個(gè)通道組:規(guī)則通道組和注入通道組。規(guī)則通道相當(dāng)于打斷你的執(zhí)行的。同這個(gè)類(lèi)似,注入通道的轉(zhuǎn)換可以打斷規(guī)則通道的轉(zhuǎn)換,在注入通道被轉(zhuǎn)換完成之后,規(guī)則通道才得以繼續(xù)轉(zhuǎn)換。STM32其ADC的規(guī)則通道組最多包含16個(gè)轉(zhuǎn)換,而注入通道組最多包含4個(gè)通道。STM32中自帶的AD14MHZ,共有16個(gè)轉(zhuǎn)換通道,每個(gè)轉(zhuǎn)換通道對(duì)ADC123_IN10表明PC0管腳可以作為AD1,AD2,AD3的第10ADC轉(zhuǎn)換的詳細(xì)設(shè)置步驟如開(kāi)啟ADC使能ADC時(shí)鐘,并設(shè)置分頻因子。要使用ADC,第一步就是要使能ADC的時(shí)鐘,在使能完時(shí)鐘之后,進(jìn)行一次ADC的復(fù)位。接著我們就可以通過(guò)RCC_CFGR設(shè)置ADC的分頻因子。分頻因子要確保ADC的時(shí)鐘(ADCCLK)不要超過(guò)14Mhz。設(shè)置ADC的工作模式。在設(shè)置完分頻因子之后,我們就可以開(kāi)始ADC的模式配置了,設(shè)置ADC開(kāi)啟AD在設(shè)置完了以上信息后,我們就開(kāi)啟AD轉(zhuǎn)換器,執(zhí)行復(fù)位校準(zhǔn)和AD是必須的!不校準(zhǔn)將導(dǎo)致結(jié)果很確ADC值。在上面的校準(zhǔn)完成之后,ADC就算準(zhǔn)備好了。板載ADC原理YLSTM32F107物聯(lián)網(wǎng)開(kāi)發(fā)板板載電位器與STM32處理器的PC0管腳相連,可以實(shí)現(xiàn)AD模數(shù)轉(zhuǎn)換。外部模擬信號(hào)由電位器(可調(diào)電阻)3.3V電壓分壓得到,其硬件原理圖如/*EnableDMA1clock*//*DMA1channel1 //DMA對(duì)應(yīng)的外設(shè)DMA_InitStructure.DMA_MemoryBaseAddr=//內(nèi) DMA_InitStructure.DMA_DIR=DMA_InitStructure.DMA_BufferSize=1;DMA_InitStructure.DMA_PeripheralIncDMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=//定義外設(shè)數(shù)據(jù)寬度為16DMA_InitStructure.DMA_MemoryDataSize=//DMA搬數(shù)據(jù)尺寸,HalfWord就是為16DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel1,&DMA_InitStructure);/*EnableDMA1channel1*//*EnableADC1andGPIOCclock*/ ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode=ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_NbrOfChannel=1; ADC_Init(ADC1,&ADC_InitStructure);//板子測(cè)試的/*ADC1regularchannel10configurationADC101,轉(zhuǎn)換時(shí)間*/ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);ADC_DMACmd(ADC1, //ADC/*EnableADC1ADC_Cmd(ADC1, //開(kāi)啟/*EnableADC1resetcalibarationregister*/ /*ChecktheendofADC1resetcalibrationregister //等待重/*StartADC1calibaration*/ /*ChecktheendofADC1calibration //等待校/*StartADC1SoftwareConversion*///連續(xù)轉(zhuǎn)換開(kāi)始,ADC通過(guò)DMA方式不斷的更新RAMwhile{ADCConvertedValueLocal=Precent //算出百分比 //3.3V的電平,計(jì)算等效電平COM1_SEND_BUF[0]=Voltage/1000+0x30;COM1_SEND_BUF[1]='.';COM1_SEND_BUF[3]=(Voltage%100)/10+0x30; }} P223P323該跳1用一根“直連公線”的一端插上開(kāi)發(fā)板的串口一上,另一端與一“交叉母線”的一端相連接,“交叉母線”的剩余一端連接到串口線上,然后再將串口線連接至電腦,如下圖所示。331286445VJLink6 “\ARM使用外擴(kuò)2014\6板載ADC\Project\ADC\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì) “9600,“無(wú)NON,數(shù)據(jù)位為“8,停止位為“1。如下圖所示。串口調(diào)試助手會(huì)收到如下信息 液晶屏上能15.調(diào)節(jié)調(diào)節(jié)CAN口1通訊實(shí)CAN是ControllerAreaNetwork的縮寫(xiě)(以下稱(chēng)為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通數(shù)量”、“通過(guò)多個(gè)LAN,進(jìn)行大量數(shù)據(jù)的高速通信”的需要,1986年德國(guó)電氣商博世公司開(kāi)發(fā)出面向汽車(chē)的CAN通信協(xié)議。此后,CAN通過(guò)ISO11898及ISO11519進(jìn)行了標(biāo)準(zhǔn)化,現(xiàn)備、工業(yè)設(shè)備等方面。現(xiàn)場(chǎng)總線是自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域CAN控制器根據(jù)兩根線上的電位差來(lái)判斷總線電平??偩€電平分為顯性電平和隱性電CAN協(xié)議同時(shí)開(kāi)始發(fā)送消息時(shí),根據(jù)標(biāo)識(shí)符(Identifier以下稱(chēng)為ID)決定優(yōu)先級(jí)。ID并不是表示發(fā)送的目的地址,而是表示總線的消息的優(yōu)先級(jí)。兩個(gè)以上的單元同時(shí)開(kāi)始發(fā)送消息時(shí),通信速度較快,通信距離遠(yuǎn)。最高1Mbps(距離小于40M),最遠(yuǎn)可達(dá)10KM(5Kbps)具有錯(cuò)誤檢測(cè)、錯(cuò)誤通知和錯(cuò)誤恢復(fù)功能。所有單元都可以檢測(cè)錯(cuò)誤(錯(cuò)誤檢測(cè)功能,檢測(cè)出錯(cuò)誤的單元會(huì)立即同時(shí)通知其他所有單元(錯(cuò)誤通知功能),正在發(fā)送消息的單元一旦檢測(cè)出錯(cuò)誤,會(huì)強(qiáng)制結(jié)束當(dāng)前的發(fā)送。強(qiáng)制結(jié)束發(fā)送的單元會(huì)不斷反復(fù)地重新發(fā)送此消息直到成功發(fā)送為止(錯(cuò)誤恢復(fù)功能)。故障封閉功能。CAN可以判斷出錯(cuò)誤的類(lèi)型是總線上暫時(shí)的數(shù)據(jù)錯(cuò)誤(如外部噪聲等)持續(xù)數(shù)據(jù)錯(cuò)誤時(shí),可將引起此故障的單元從總線上出去。連接節(jié)點(diǎn)多。CAN總線是可同時(shí)連接多個(gè)單元的總線??蛇B接的單元總數(shù)理論上是沒(méi)有250KbpsISO11898標(biāo)準(zhǔn),該標(biāo)準(zhǔn)的物理CANCANCANCANCANCANCANVVCAN-VCAN-顯性 隱性時(shí)間單元輸出顯性電平,總線上即為顯性電平。而電平則具有包容的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強(qiáng)。另外,在CAN總線的起止端都有一個(gè)120?的終端電阻,來(lái)做阻抗匹配,以減少回波反射。CANCAN1HCANCAN1H和開(kāi)發(fā)板的CAN1H連接,CAN1L和開(kāi)發(fā)板的CAN1L連接(同時(shí)將120ΩP23的1,2腳用跳線帽短接P2335V4.JLink5打開(kāi)文件 “\ARM使用外擴(kuò)2014\7CAN1\Project\CAN\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))將CAN適配卡和電腦連接好,最后,打開(kāi)CAN調(diào)試界面,設(shè)置CAN的波特率為250kbps,設(shè)置過(guò)程如下在跳出的界面中,將波特率設(shè)置 bps,然后點(diǎn)擊確定,如下圖所如果配置正確,將會(huì)出現(xiàn)下圖所示提示CAN從CANCAN口2通訊實(shí)CAN是ControllerAreaNetwork的縮寫(xiě)(以下稱(chēng)為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通數(shù)量”、“通過(guò)多個(gè)LAN,進(jìn)行大量數(shù)據(jù)的高速通信”的需要,1986年德國(guó)電氣商博世公司開(kāi)發(fā)出面向汽車(chē)的CAN通信協(xié)議。此后,CAN通過(guò)ISO11898及ISO11519進(jìn)行了標(biāo)準(zhǔn)化,現(xiàn)備、工業(yè)設(shè)備等方面?,F(xiàn)場(chǎng)總線是自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域CAN控制器根據(jù)兩根線上的電位差來(lái)判斷總線電平??偩€電平分為顯性電平和隱性電CAN協(xié)議同時(shí)開(kāi)始發(fā)送消息時(shí),根據(jù)標(biāo)識(shí)符(Identifier以下稱(chēng)為ID)決定優(yōu)先級(jí)。ID并不是表示發(fā)送的目的地址,而是表示總線的消息的優(yōu)先級(jí)。兩個(gè)以上的單元同時(shí)開(kāi)始發(fā)送消息時(shí),通信速度較快,通信距離遠(yuǎn)。最高1Mbps(距離小于40M),最遠(yuǎn)可達(dá)10KM(5Kbps)具有錯(cuò)誤檢測(cè)、錯(cuò)誤通知和錯(cuò)誤恢復(fù)功能。所有單元都可以檢測(cè)錯(cuò)誤(錯(cuò)誤檢測(cè)功能,檢測(cè)出錯(cuò)誤的單元會(huì)立即同時(shí)通知其他所有單元(錯(cuò)誤通知功能),正在發(fā)送消息的單元一旦檢測(cè)出錯(cuò)誤,會(huì)強(qiáng)制結(jié)束當(dāng)前的發(fā)送。強(qiáng)制結(jié)束發(fā)送的單元會(huì)不斷反復(fù)地重新發(fā)送此消息直到成功發(fā)送為止(錯(cuò)誤恢復(fù)功能)。故障封閉功能。CAN可以判斷出錯(cuò)誤的類(lèi)型是總線上暫時(shí)的數(shù)據(jù)錯(cuò)誤(如外部噪聲等)持續(xù)數(shù)據(jù)錯(cuò)誤時(shí),可將引起此故障的單元從總線上出去。連接節(jié)點(diǎn)多。CAN總線是可同時(shí)連接多個(gè)單元的總線??蛇B接的單元總數(shù)理論上是沒(méi)有250KbpsISO11898標(biāo)準(zhǔn),該標(biāo)準(zhǔn)的物理CANCANCANCANCANCANCANVVCAN-VCAN-顯性 隱性時(shí)間單元輸出顯性電平,總線上即為顯性電平。而電平則具有包容的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強(qiáng)。另外,在CAN總線的起止端都有一個(gè)120?的終端電阻,來(lái)做阻抗匹配,以減少回波反射。CANCAN1HCANCAN1H和開(kāi)發(fā)板的CAN2H連接,CAN1L和開(kāi)發(fā)板的CAN2L連接(同時(shí)將120ΩP23的1,2腳用跳線帽短接P2335V4.JLink5打開(kāi)文件 “\ARM使用外擴(kuò)2014\8CAN2\Project\CAN\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))將CAN適配卡和電腦連接好后打開(kāi)CAN調(diào)試界面設(shè)置的波特率 250kbps,設(shè)置過(guò)程如在跳出的界面中,將波特率設(shè)置 bps,然后點(diǎn)擊確定,如下圖所如果配置正確,將會(huì)出現(xiàn)下圖所示提示CAN從CANCAN1有數(shù)據(jù)接收到,LED燈全滅;CAN2有數(shù)據(jù)接收到,LED觸摸屏顯示實(shí)我們一般液晶所用的觸摸屏,最多的就是電阻式觸摸屏了(多點(diǎn)觸摸屬于電容式觸摸屏,比如幾乎所有智能機(jī)都支持多點(diǎn)觸摸,它們所用的屏就是電容式的觸摸屏),我們所用的的觸摸屏屬于電阻式觸摸屏,下面簡(jiǎn)單介紹下電阻式觸摸屏的原理。電阻式觸摸屏利用壓力感應(yīng)進(jìn)行控制。電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復(fù)合薄膜,它以一層玻璃或硬塑料平板作為基層,表面涂有一層透明氧化金屬(透明的導(dǎo)電電阻)導(dǎo)電層,上面再蓋有一層外表面硬化處理、光滑防擦的塑料層、它的內(nèi)表面也涂有一層涂層、在他們之間有許多細(xì)小的(小于1/1000英寸)的透明點(diǎn)把兩層導(dǎo)電層隔開(kāi)絕緣化,在X和Y兩個(gè)方向上產(chǎn)生信號(hào),然后送觸摸屏控制器??刂破鱾蓽y(cè)到這一接觸并計(jì)算出電阻屏的特點(diǎn)有:是一種對(duì)外界完全的工作環(huán)境,不怕灰塵、水汽和油污可以用任何物體來(lái)觸摸,可以用來(lái)寫(xiě)字畫(huà)畫(huà),這是它們比較大的優(yōu)勢(shì)電阻觸摸屏的精度只取決于A/D轉(zhuǎn)換的精度,因此都能輕松達(dá)到4096*4096 轉(zhuǎn)換器,一般來(lái)說(shuō)是需要一個(gè)控制器的,本開(kāi)發(fā)板標(biāo)配的液晶驅(qū)動(dòng)為ILI9341,其電路原理圖如下圖所示:1本實(shí)驗(yàn)的.P2223P22短接口的2.注意以太網(wǎng)和觸摸屏的跳35V4.JLink56.打開(kāi)文 “\ARM使用外擴(kuò)2014\9觸摸屏\stm32觸摸屏實(shí)驗(yàn)-ILI9341觸摸顯\USER”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)而后對(duì)開(kāi)發(fā)板上 ,再按下板子上的復(fù)位鍵,如下圖所按下復(fù)位鍵后,在TFT屏幕上 .用手指或筆SysTick實(shí)驗(yàn)SysTick實(shí)際就是系統(tǒng)滴答定時(shí)器主要是為操作系統(tǒng)提供一個(gè)的硬件上的定時(shí)中斷。本例程通過(guò)SysTick定時(shí)器,產(chǎn)生的中斷進(jìn)行點(diǎn)燈控制。產(chǎn)生一個(gè)中斷,即使是系統(tǒng)在睡眠OSCM3器件之間的移植中不必修改系統(tǒng)定時(shí)器的代碼,移植工作一下子容易多了。如下圖兩個(gè)任務(wù)間通過(guò)SysTick輪Sysik定時(shí)器被在NVIC中,用于產(chǎn)生SYSSICK異常(異常號(hào):15)。在以前,大多數(shù)系統(tǒng)需要一個(gè)硬件定時(shí)器來(lái)產(chǎn)生操作系統(tǒng)需要的滴答多個(gè)任務(wù)許以不同的時(shí)間片,確保沒(méi)有一個(gè)任務(wù)能霸占系統(tǒng);或者把每個(gè)定時(shí)器周期的某個(gè)時(shí)間范圍賜予特定的任務(wù)等,還有操作系統(tǒng)提供的各種定時(shí)功能,都與這個(gè)滴答定時(shí)器有關(guān)。因此,需要一個(gè)定時(shí)器來(lái)產(chǎn)生周期性的中斷,而且最好還是讓用戶程序不能隨意它的寄存器,以維持操作系統(tǒng)“心跳”的節(jié)律。Corex-M3處理器內(nèi)部包含了一個(gè)簡(jiǎn)單的定時(shí)器。因?yàn)樗械腃M3都帶有這個(gè)定時(shí),軟件在不同CM3器件間的移植工作得以化簡(jiǎn)。該定時(shí)器的時(shí)鐘源可以是內(nèi)部時(shí)鐘(FCLK,CM3上的自由運(yùn)行時(shí)鐘,或者是外部時(shí)鐘(CM3處理器上的SCLK信號(hào)STCLK的具體來(lái)源則由設(shè)計(jì)者決定,因此不同產(chǎn)品之間的時(shí)鐘頻率可能會(huì)大不相同,你需要檢視芯片的器件手冊(cè)來(lái)決定選擇什么作為時(shí)鐘源。席CM3CM3SysTick定時(shí)器是作為NVIC(嵌套向量中斷控制器)的一部分實(shí)現(xiàn)的。前面提到的,可以為系統(tǒng)提供一個(gè)“時(shí)基(用于切換任務(wù),同時(shí),Systick的精準(zhǔn)計(jì)時(shí),也可以用來(lái)作為延遲。對(duì)于時(shí)間要求嚴(yán)格的場(chǎng)合,SysTick的意義是相當(dāng)重大的。本實(shí)例需要用到使用GPIO管腳控制LEDLEDLEDSysTick示例中新增添的代碼進(jìn)行說(shuō)明。本次為SysTick系統(tǒng)滴答中斷實(shí)驗(yàn),所以需要配置SysTick系統(tǒng)滴答參數(shù),使用SysTick_ConfigurationSysTick_Config(SystemCoreClock/100)函數(shù)可以看(SystmCoClok/100一的SystemCoreClock個(gè)時(shí)鐘數(shù)產(chǎn)生一次中斷,那么一秒鐘就會(huì)有100次中斷。(注:表示系統(tǒng)主時(shí)鐘頻率,在參數(shù)為SystemFrequency。NVIC_SetPriority函數(shù)配置中斷優(yōu)選級(jí)Function : :ConfigureaSysTickBasetimeto10 : : :void{/*SetupSysTickTimerfor10msecinterrupts if(SysTick_Config(SystemCoreClock/100)){/*Captureerror*/while(1);}/*ConfiguretheSysTickhandlerpriority*/NVIC_SetPriority(SysTick_IRQn,0x0);}以下的“InterruptConfig()”函數(shù)告訴處理器中斷向量表存放的起始地址,STM32支持中斷向量表起始地址動(dòng)態(tài)設(shè)置,這個(gè)特性在SRAM調(diào)試和DFU固件升級(jí)時(shí)很有用,以為這些情況下中斷向量表起始地址已經(jīng)不是0x0000此處將中斷向量表起始地址設(shè)置為內(nèi)部Flash的起始地址0x void{/*SettheVectorTablebaseaddressat0x }我們看一下主程序main的相關(guān)LED的初始化和SysTick的中如下int{/*LEDGPIO*//*LED閃爍幾次,以確定指示燈電路正常 /*配置中斷向量表的地址等*//*配置SysTick的中斷參數(shù) /*Mainloop*/while(1){;}}從上面的main函數(shù)可以看出,main函數(shù)中只是做了LED的初始化和SysTick的中斷配while死LED燈的亮滅是在SysTick中斷服務(wù)程序中控制。下面,我們介紹關(guān)于SysTick中斷程序的實(shí)現(xiàn)。本次SysTick系統(tǒng)滴答中斷實(shí)驗(yàn)需要在該文件的voidSysTick_Handler(void){}中斷接口函LED指示燈每秒點(diǎn)亮熄滅一次。我們?cè)凇皊tm32f10x_it.c”中的SysTick中斷接口函數(shù)中調(diào)用LED_Spark函數(shù)控制LED燈閃爍。void{}由于LED_Spark函數(shù)是在main.c中實(shí)現(xiàn)以我們要在“stm32f10x_it.c”中使用一個(gè)外部LED_Spark函數(shù),以使該函數(shù)在“stm32f10x_it.c”中可以被調(diào)用externvoid下面我們來(lái)看一下LED_Spark函數(shù)的具體實(shí)void{ IOuint32_tTimingDelayLocal=if(TimingDelayLocal!={ //50LED{} //50LED{}TimingDelayLocal該函數(shù)每一次被調(diào)用靜態(tài)本地變量TimingDelayLocal}{}}由上述實(shí)驗(yàn)代碼可知每產(chǎn)生一次SysTick中斷,進(jìn)入SysTick中斷服務(wù)LED_Spark函數(shù),而我們配置的是每秒中100次SysTick中斷,那么LED_Spark函數(shù)每秒中會(huì)被調(diào)用100次,所以我們使用一個(gè)靜態(tài)本地變量TimingDelayLocal來(lái)存放該函數(shù)被調(diào)用的次數(shù)。該函數(shù)每一次被調(diào)用靜態(tài)本地變量TimingDelayLocal便會(huì)減一,當(dāng)減為0時(shí)重新賦值點(diǎn)亮LED指示燈,這樣周而復(fù)始便可以使LED指示燈每秒閃爍一次。為什么使用靜態(tài)變量TimingDelayLoca1?目的是每次進(jìn)入LED_Spark函數(shù)時(shí)靜態(tài)變量鍵字則每次每次進(jìn)入LED_Spark函數(shù)時(shí)TimingDelayLocal為0,執(zhí)行else后其值為100,退5VJLink “ARM使用外擴(kuò)2014\10SysTick\Project\SysTick\MDK-ARM”,雙擊在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi))按下復(fù)位鍵后,會(huì)發(fā)按下復(fù)位鍵后,會(huì)發(fā)現(xiàn)四個(gè)LED燈不斷的閃爍,如短暫產(chǎn)品唯一標(biāo)識(shí)實(shí)產(chǎn)品唯一的標(biāo)識(shí)(UniqueDeviceID)非常適合●用來(lái)作為序列號(hào)(例如 96位的產(chǎn)品唯一標(biāo)識(shí)所提供的參考號(hào)碼對(duì)任意一個(gè)STM32微控制器,在任何這個(gè)96位的產(chǎn)品唯一標(biāo)識(shí),按照用戶不同的用法,可以以字節(jié)(8位)為單位,也可以以字(16位)或者全字(32)位96位獨(dú)特的ID位于地址0x1FFFF7E8~0x1FFFF7F3的系統(tǒng)區(qū),用戶可以以字節(jié)、半字、或字的方式單獨(dú)其間的任一地址,其中0x1FFFFF3中為最高字節(jié),0x1FFFF7E8中為最低字節(jié)。作為擴(kuò)展本次試驗(yàn)順帶位于0x1FFFF7E0地址的“閃存容量寄存器”獲得開(kāi)發(fā)板內(nèi)部集成Flash的大小信息,通過(guò)調(diào)用系統(tǒng)Printf函數(shù)來(lái)打印產(chǎn)品內(nèi)部Flash產(chǎn)品唯一標(biāo)識(shí)(UniqueDeviceID)為處理器內(nèi)部組件,這部分不需要硬件電路,這里僅在串口輸出產(chǎn)品唯一標(biāo)識(shí)(UniqueDeviceID)即可程序中定義全局變量IntDeviceSerial存放讀到的設(shè)備ID96位的獨(dú)特ID位于地址0x1FFFF7E8~0x1FFFF7F3的系統(tǒng)區(qū),程序如下uint32_tIntDeviceSerial[3]; /*全局變量IntDeviceSerial存放讀到的設(shè)備ID*/voidGet_ChipSerialNum(void){IntDeviceSerial[0]=*(IOuint32_t*)(0x1FFFF7E8);IntDeviceSerial[1]=*(IOuint32_t*)(0x1FFFF7EC);IntDeviceSerial[2]=*(IOuint32_t*)(0x1FFFF7F0);}MyDelay函數(shù)流水燈使用的延時(shí)函數(shù),用簡(jiǎn)單的for循環(huán)實(shí)staticvoidMyDelay(IOuint32_t{for(;nCount!=0;nCount--}下面來(lái)看看在MAIN主函數(shù)中調(diào)用的Get_ChipSerialNum()以后就可以使用Printf來(lái)打印,然后作為擴(kuò)展,本次試驗(yàn)順帶位于0x1FFFF7E0地址的“閃存容量寄存器”使用Printf來(lái)打印出來(lái)。 Main @retvalint{/*!<Atthisstagethemicrocontrollerclocksettingisalreadyconfigured,thisisdonethroughSystemInit()functionwhichiscalledfromstartupfile(startup_stm32f10x_xx.s)beforetobranchtoapplicationmain.ToreconfigurethedefaultsettingofSystemInit()function,refertosystem_stm32f10x.cfile/*USARTxconfiguredasBaudRate=115200WordLength=8OneStopNoHardwareflowcontroldisabled(RTSandCTSReceiveandtransmitUSART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;Init(COM1,/*OutputamessageonHyperterminalusingprintffunctionprintf("\n\rUSARTPrintfExample:retargettheClibraryprintffunctiontotheUSART\n\r");printf("\r\n\n\nSTM32F107 %sconfigured...", printf("\n\r############STM32F107############(" "- printf("printf(" |/_|/_ | | /)|)||||| printf("\\ | ||\\/| | | |</)//_|||||\\\\/|||_| |_| / |/*Mainloop*/while(1){/*OutputamessageonHyperterminalusingUSART1_SendStringfunction*/printf("\n\r產(chǎn)品唯一標(biāo)識(shí)(UniqueDeviceID)為:[%X-%X-printf("\n\r產(chǎn)品內(nèi)部Flash大小為:%dK字節(jié) IO }}1本實(shí)驗(yàn)的.用跳線帽將P5下面兩個(gè)腳短該跳2.25V5VJLink給開(kāi)發(fā)板上電打開(kāi)文 “ARM使用外擴(kuò)2014\11產(chǎn)品唯一標(biāo)識(shí)\Project\產(chǎn)品唯一標(biāo)在跳出的keil界面中點(diǎn)擊“Rebuild在keil界面中點(diǎn)擊“download將開(kāi)發(fā)板電源關(guān)閉,將jlink從開(kāi)發(fā)板上拔下來(lái)(該操作很重要,jlink連接在板子上時(shí)對(duì)開(kāi)) NON,串口調(diào)試助手會(huì)收到如下信息實(shí)時(shí)時(shí)鐘RTC(Real-timeclock)是實(shí)時(shí)時(shí)鐘的意思。YL開(kāi)發(fā)板的處理器STM32F107集成了系統(tǒng)當(dāng)前的時(shí)間和日期的準(zhǔn)確性。實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的定時(shí)器。RTC實(shí)時(shí)時(shí)鐘模塊擁有一可編程的預(yù)分頻系數(shù):分頻系數(shù)最高 22032位的可編程計(jì)數(shù)器,可用于較長(zhǎng)時(shí)間段2APB1PCLK1RTC時(shí)鐘(RTC 時(shí)鐘頻率的四分之一以上可以選擇以下三種RTC的時(shí)鐘—HSE—HSE振蕩—LSI振蕩器時(shí)2—APB1接口由— (預(yù)分頻器、鬧鐘、計(jì)數(shù)器和分頻器)只能由后備域復(fù)位3個(gè)專(zhuān)門(mén)的可中斷—時(shí)鐘中斷,用來(lái)產(chǎn)生一個(gè)軟件可編程的鬧—秒中斷,用來(lái)產(chǎn)生一個(gè)可編程的周期性中斷信號(hào)(最長(zhǎng)可 秒—溢出中斷,只是內(nèi)部可編程計(jì)數(shù)器溢出并回轉(zhuǎn)為0的狀16APB1總線對(duì)其進(jìn)行讀寫(xiě)操作(16.4節(jié)。APB1接口由APB1總線時(shí)鐘驅(qū)動(dòng),用來(lái)與APB1總線接口。另一部分(RTC)由一組可編程計(jì)數(shù)器組成,分成兩個(gè)主要模塊。第一個(gè)模塊是RTC的預(yù)分頻模塊,它可編程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場(chǎng)衛(wèi)生間改造敲墻協(xié)議
- 藝術(shù)品交易公司購(gòu)房合同樣本
- 道路照明臨時(shí)電力供應(yīng)合同
- 大學(xué)食堂勤雜工聘用合同
- 皮革制造晉升管理準(zhǔn)則
- 書(shū)法輔導(dǎo)班教師勞動(dòng)合同
- 攝影棚拍攝技巧分享
- 環(huán)保設(shè)備房產(chǎn)交易合同樣板
- 城市綠化養(yǎng)護(hù)投標(biāo)方案
- 家具行業(yè)協(xié)會(huì)會(huì)長(zhǎng)環(huán)保承諾
- 小兒預(yù)防接種過(guò)敏性休克
- 組裝簡(jiǎn)易太陽(yáng)能小車(chē)
- 模切機(jī)安全操作管理制度
- 年產(chǎn)30萬(wàn)噸高鈦渣生產(chǎn)線技改擴(kuò)建項(xiàng)目環(huán)評(píng)報(bào)告公示
- 07221美術(shù)設(shè)計(jì)與創(chuàng)意
- 基于海洋文化背景下校本化特色課程開(kāi)發(fā)深化實(shí)踐研究資料
- 胸外科食管切除、食管-胃胸內(nèi)吻合術(shù)技術(shù)操作規(guī)范
- 心靈的幻象 課件-2023-2024學(xué)年高中美術(shù)湘美版(2019)美術(shù)鑒賞
- 藏式餐飲創(chuàng)業(yè)計(jì)劃書(shū)
- 建筑安裝工程有限公司關(guān)于加大市場(chǎng)開(kāi)拓力度的激勵(lì)辦法
- 網(wǎng)絡(luò)安全技術(shù)及應(yīng)用 第5版 習(xí)題及答案 賈鐵軍 習(xí)題集 第1章
評(píng)論
0/150
提交評(píng)論