版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章STM32I/O應(yīng)用實(shí)戰(zhàn)《嵌入式技術(shù)入門與實(shí)戰(zhàn)(基于STM32)》第3章STM32I/O應(yīng)用實(shí)戰(zhàn)0102初識(shí)STM32的I/O口任務(wù)1GPIO實(shí)現(xiàn)跑馬燈的控制21、初識(shí)STM32的I/O口第3章STM32I/O應(yīng)用實(shí)戰(zhàn)PartOneGPIO端口和引腳的概念,GPIO工作模式1、初識(shí)STM32的I/O口1.1STM32的I/0口定義1.2GPIO的工作模式和結(jié)構(gòu)41.1STM32的I/0口定義STM32的I/0口,又叫做GPIO(General-PurposeInputs/Outputs),是STM32數(shù)字輸入輸出的基本模塊,可以實(shí)現(xiàn)STM32與外部環(huán)境進(jìn)行數(shù)字交換。GPIO的引腳與外部硬件設(shè)備連接,可實(shí)現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據(jù)的功能:借助GPIO,微控制器可以實(shí)現(xiàn)對(duì)外圍設(shè)備(如LED和按鍵等)最簡單、最直觀的監(jiān)控。當(dāng)微控制器沒有足夠的I/O引腳或片內(nèi)存儲(chǔ)器時(shí),GPIO還可用于串行和并行通信、存儲(chǔ)器擴(kuò)展等。通用I/O端口GPIO51系列單片機(jī)有1個(gè)8位雙向并行I/O端口P0和3個(gè)8位準(zhǔn)雙向并行I/O端口P1~P3。?51系列單片機(jī)的端口和引腳?STM32的GPIO的每個(gè)端口組有16個(gè)引腳,STM32不同型號(hào)的芯片,具有不同的端口組和不同的引腳數(shù)量STM32F407微控制器有9組通用I/O端口,端口號(hào)用GPIOx(x是A、B、C、D、E、F、G、H、I)表示,即GPIOA、GPIOB、……GPIOI每組端口有16個(gè)引腳(0~15),引腳號(hào)分別用Px0、Px1、……Px15(x是A~I(xiàn))表示1.2GPIO的工作模式GPIO端口的每個(gè)位(引腳)可以由軟件分別配置成多種模式。狀態(tài)配置模式HAL庫代碼中宏定義名稱通用輸出開漏(Push-Pull)GPIO_MODE_OUTPUT_PP推挽式(Open-Drain)GPIO_MODE_OUTPUT_OD復(fù)用功能輸出開漏(Push-Pull)GPIO_MODE_AF_PP推挽式(Open-Drain)GPIO_MODE_AF_OD輸入上拉輸入GPIO_MODE_INPUT,GPIO_PULLUP下拉輸入GPIO_MODE_INPUT,GPIO_PULLDOWN浮空輸入GPIO_MODE_INPUT,GPIO_NOPULL模擬輸入GPIO_MODE_ANALOG1.2.2GPIO端口位的基本結(jié)構(gòu)9GPIO不同工作模式下的電壓標(biāo)準(zhǔn)非模擬輸入模式端口能夠讀取當(dāng)前電平的高低,讀取電壓高低的范圍為5V/3.3V~0V。模擬輸入模式端口能夠讀取當(dāng)前電路的模擬電壓值,分辨率為4096(12bit),采集范圍為3.3V~0V。采集電壓盡可能不要超過3.3V,否則可能會(huì)對(duì)芯片產(chǎn)生損壞。通用輸出模式端口能夠輸出電平,控制輸出口的電壓范圍為3.3V~0V。 復(fù)用模式端口復(fù)用到芯片內(nèi)置的各種功能寄存器上,比如串口發(fā)送接收,SPI通信,Can總線等。這些寄存器沒有直接的輸出口,都是通過復(fù)用端口完成它們的功能。2、任務(wù)1GPIO實(shí)現(xiàn)跑馬燈的控制第3章STM32I/O應(yīng)用實(shí)戰(zhàn)PartTwo了解應(yīng)用實(shí)例功能,GPIO工作模式的選擇,硬件設(shè)計(jì)2、任務(wù)1GPIO實(shí)現(xiàn)跑馬燈的控制2.1軟硬件設(shè)計(jì)2.2實(shí)現(xiàn)與代碼分析11122.1軟硬件設(shè)計(jì)基于嵌入式MCU設(shè)計(jì)并實(shí)現(xiàn)一個(gè)流水燈系統(tǒng),具體要求:系統(tǒng)上電后,微控制器控制2個(gè)LED燈間隔200ms依次閃爍,并以此循環(huán)往復(fù)。13GPIO作為輸出的應(yīng)用芯片:STM32F407ZGT6實(shí)驗(yàn)板:正點(diǎn)原子探索開發(fā)套件實(shí)驗(yàn)板已實(shí)現(xiàn)了硬件電路,無需重新搭建。14硬件平臺(tái)條件硬件設(shè)計(jì)原理圖STM32芯片作為輸出的引腳:PF9、PF10LED連接硬件電路輸出狀態(tài)下的GPIO內(nèi)部配置推挽輸出模式下:1:P導(dǎo)通,輸出高0:N導(dǎo)通,輸出低開漏輸出模式下,0:N導(dǎo)通,輸出低高阻狀態(tài):N不導(dǎo)通(P-MOS從不被激活)原理:輸出寄存器上的0激活N-MOS,而輸出寄存器上的1將激活P-MOS。推挽電路是兩個(gè)參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù)。電路工作時(shí),兩只對(duì)稱的功率開關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小、效率高。用途:可以輸出高、低電平,連接數(shù)字器件;特點(diǎn):推拉式輸出級(jí)既提高電路的負(fù)載能力,又提高開關(guān)速度。17推挽輸出原理輸出寄存器上的0激活N-MOS,輸出低電平,輸出寄存器上的1將端口置于高阻狀態(tài)用途適合做電流型的驅(qū)動(dòng)特點(diǎn):
利用外部電路的驅(qū)動(dòng)能力,減少IC內(nèi)部的驅(qū)動(dòng)一般來說,開漏是用來連接不同電平的器件,匹配電平用的因?yàn)殚_漏引腳不連接外部的上拉電阻時(shí),只能輸出低電平,如果需要同時(shí)具備輸出高電平的功能,則需要接上拉電阻,很好的一個(gè)優(yōu)點(diǎn)是通過改變上拉電源的電壓,便可以改變傳輸電平,比如輸出5V開漏輸出功能:基于嵌入式MCU設(shè)計(jì)并實(shí)現(xiàn)一個(gè)流水燈系統(tǒng)。LED燈驅(qū)動(dòng)需要輸出高低電平,GPIO引腳的模式選擇推挽輸出模式GPIO作為輸出的應(yīng)用-模式選擇思考與練習(xí)◎簡述GPIO有哪幾種工作模式。◎分析推挽輸出和開漏輸出的區(qū)別。212.2實(shí)現(xiàn)與代碼分析掌握詳細(xì)實(shí)現(xiàn)過程,分析具體實(shí)現(xiàn)代碼第一步使用STM32CubeIDE新建工程第二步
使用STM32CubeMX完成時(shí)鐘配置第三步使用STM32CubeMX完成GPIO端口引腳初始化配置第四步導(dǎo)出工程第五步LED流水燈功能代碼編寫第六步下載調(diào)試2.2.1實(shí)現(xiàn)過程2.2.2代碼分析1)程序框架設(shè)計(jì)的程序可以采用“只執(zhí)行一次初始化函數(shù),重復(fù)執(zhí)行功能函數(shù)”這種框架,如下所示:int
main(void)
{
//init()
while(1)
{
//test()
}
}
231)程序框架2)HAL庫函數(shù)HAL庫是ST推出的官方的固件庫,它將這些寄存器底層操作都封裝起來,提供一整套接口(API)供開發(fā)者調(diào)用,降低開發(fā)難度。用戶在開發(fā)過程中不需要詳細(xì)掌握寄存器的配置方法,只要知道調(diào)用哪些固件庫函數(shù)即可,只要掌握了固件庫開發(fā)思想,就大大降低了初學(xué)者入門的難度。寄存器標(biāo)準(zhǔn)庫HAL庫2)引腳控制的HAL庫函數(shù)1、HAL_GPIO_Init功能:GPIO初始化,每個(gè)引腳可獨(dú)立配置,也可同時(shí)傳入多個(gè)引腳進(jìn)行配置,包括GPIO工作模式、響應(yīng)速度等相關(guān)寄存器的配置。無返回值。函數(shù)原型voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)26GPIO_InitTypeDef結(jié)構(gòu)體內(nèi)容解析27成員含義配置選項(xiàng)Pin引腳號(hào)GPIO_PIN_0~GPIO_PIN_15(使用符號(hào)“|”進(jìn)行或運(yùn)算便可以合并)GPIO_PIN_All(一次初始化全部16個(gè)端口)Mode工作模式GPIO_MODE_INPUT(輸入,需進(jìn)一步配置)GPIO_MODE_OUTPUT_PP(推挽輸出)GPIO_MODE_OUTPUT_OD(開漏輸出)GPIO_MODE_AF_PP(復(fù)用推挽)GPIO_MODE_AF_OD(復(fù)用開漏)GPIO_MODE_ANALOG(模擬輸入)Pull上下拉電阻的選擇配置GPIO_NOPULL(無上下拉的浮空輸入)GPIO_PULLUP(上拉輸入)GPIO_PULLDOWN(下拉輸入)SpeedI/O口驅(qū)動(dòng)電路的響應(yīng)速度,輸出模式下有效GPIO_SPEED_FREQ_LOW(2MHz)GPIO_SPEED_FREQ_MEDIUM(25MHz)GPIO_SPEED_FREQ_HIGH(50MHz)GPIO_SPEED_FREQ_VERY_HIGH(100MHz)本任務(wù)中,配置PF9、PF10為推挽輸出,無上下拉,速度2MHz2)引腳控制的HAL庫函數(shù)2、HAL_GPIO_ReadPin功能:從輸入數(shù)據(jù)寄存器(IDR)中讀取引腳狀態(tài)值,0或1,返回引腳狀態(tài)值“0”或“1”。函數(shù)原型:GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)282)引腳控制的HAL庫函數(shù)3、HAL_GPIO_WritePin功能:向輸出數(shù)據(jù)寄存器(ODR)中寫入輸出狀態(tài)(0或1),無返回值函數(shù)原型:voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)4、HAL_GPIO_TogglePin293)GPIO初始化的代碼實(shí)現(xiàn)GPIO的初始化在STM32CubeMx中完成配置,會(huì)自動(dòng)轉(zhuǎn)化成初始化代碼30開啟外設(shè)時(shí)鐘31
__HAL_RCC_GPIOF_CLK_ENABLE();4)流水燈功能的實(shí)現(xiàn)在while(1)中無限循環(huán)執(zhí)行以下LED0/1交替亮滅,實(shí)現(xiàn)跑馬燈效果。32思考與練習(xí)◎?qū)τ趹?yīng)用案例,修改跑馬燈功能為全亮和全滅,調(diào)用HAL_GPIO_TogglePin函數(shù)實(shí)現(xiàn)3、GPIO的寄存器描述GPIO寄存器實(shí)現(xiàn)對(duì)GPIO端口初始化配置和數(shù)據(jù)輸入輸出控制每個(gè)寄存器只能以32位(字)進(jìn)行訪問,不允許16位(半字)或8位(字節(jié))訪問*GPIO配置寄存器GPIO端口模式寄存器GPIOx_MODERGPIO端口輸出類型寄存器GPIOx_OTYPERGPIO端口輸出速度寄存器GPIOx_OSPEEDRGPIO端口上拉/下拉寄存器GPIOx_PUPDR數(shù)據(jù)寄存器GPIO端口輸入數(shù)據(jù)寄存器GPIOx_IDRGPIO端口輸出數(shù)據(jù)寄存器GPIOx_ODR置位/復(fù)位寄存器GPIOx_BSRR鎖定寄存器GPIOx_LCKR復(fù)用功能選擇寄存器GPIO復(fù)用功能高位寄存器GPIOx_AFRHGPIO復(fù)用功能低位寄存器GPIOx_AFRLGPIO端口模式寄存器GPIOx_MODER36GPIO端口輸出類型寄存器GPIOx_OTYPER37GPIO端口輸出速度寄存器GPIOx_OSPEEDR38GPIO端口上拉/下拉寄存器GPIOx_PUPDR3940端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIO_PinStatebitstatus;/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));if((GPIOx->IDR&GPIO_Pin)!=(uint32_t)GPIO_PIN_RESET){bitstatus=GPIO_PIN_SET;}else{bitstatus=GPIO_PIN_RESET;}returnbitstatus;}41端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)42端口位設(shè)置/復(fù)位寄存器(GPIOx_BSRR)voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState){/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState!=GPIO_PIN_RESET){
GPIOx->BSRR=GPIO_Pin;}else{
GPIOx->BSRR=(uint32_t)GPIO_Pin<<16u;}}通用I/O(GPIO)說明事項(xiàng)復(fù)位期間和剛復(fù)位后:復(fù)用功能未開啟,I/O端口被配置成浮空輸入模式(CNFx[1:0]=01b,MODEx[1:0]=00b)。當(dāng)作為輸出配置時(shí):寫到輸出數(shù)據(jù)寄存器上的值(GPIOx_ODR)輸出到相應(yīng)的I/O引腳??梢砸酝仆炷J交蜷_漏模式使用輸出驅(qū)動(dòng)器。輸入數(shù)據(jù)寄存器(GPIOx_IDR)在每個(gè)APB2時(shí)鐘周期捕捉I/O引腳上的數(shù)據(jù)。所有GPIO引腳有一個(gè)內(nèi)部弱上拉和弱下拉,當(dāng)配置為輸入時(shí),它們可以被激活,也可以不被激活所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。單擊此處添加副標(biāo)題內(nèi)容謝謝聆聽44第3章STM32I/O應(yīng)用實(shí)戰(zhàn)《嵌入式技術(shù)入門與實(shí)戰(zhàn)(基于STM32)》3、STM32系列微控制器3.1STM32內(nèi)部結(jié)構(gòu)3.2STM32時(shí)鐘系統(tǒng)3.3STM32最小系統(tǒng)463.1STM32F407內(nèi)部功能結(jié)構(gòu)圖473.2STM32時(shí)鐘系統(tǒng)在嵌入式系統(tǒng)開發(fā)設(shè)計(jì)中,芯片內(nèi)部的時(shí)鐘系統(tǒng)是開發(fā)者必須要熟練掌握的內(nèi)核和任何片上外設(shè)都需要時(shí)鐘的驅(qū)動(dòng),在開發(fā)設(shè)計(jì)中需要清晰的了解時(shí)鐘系統(tǒng)的配置方法。STM32的時(shí)鐘系統(tǒng)為了適應(yīng)不同的頻率需求,需要支持多種頻率,其時(shí)鐘系統(tǒng)比51單片機(jī)要復(fù)雜很多。48STM32F4的時(shí)鐘樹結(jié)構(gòu)STM32有5個(gè)時(shí)鐘源:HSI、HSE、LSI、LSE、PLL49STM32F4的時(shí)鐘源HSIHSI是高速內(nèi)部時(shí)鐘,由內(nèi)部16MHzRC振蕩器生成可直接用作系統(tǒng)時(shí)鐘,或者用作為PLL的輸入。優(yōu)點(diǎn)是成本較低(無需使用外部組件),啟動(dòng)速度比HSE晶振快其精度不及外部晶振或陶瓷諧振器。HSEHSE是高速外部時(shí)鐘可接外部晶振/陶瓷諧振器,也可接外部用戶時(shí)鐘源可直接用作系統(tǒng)時(shí)鐘,或者用作為PLL的輸入。頻率范圍為4MHz~26MHz精度非常高。50STM32F4的時(shí)鐘源LSILSI是低速內(nèi)部時(shí)鐘,RC振蕩器可作為低功耗時(shí)鐘源在停機(jī)和待機(jī)模式下保持運(yùn)行,供獨(dú)立看門狗(IWDG)和自動(dòng)喚醒單元(AWU)使用??勺鳛閷?shí)時(shí)時(shí)鐘外設(shè)(RTC)的時(shí)鐘源。時(shí)鐘頻率在32kHz左右。LSELSE是低速外部時(shí)鐘,接頻率為32.768kHz的晶振或陶瓷諧振器可作為實(shí)時(shí)時(shí)鐘外設(shè)(RTC)的時(shí)鐘源來提供時(shí)鐘/日歷或其它定時(shí)功能具有功耗低且精度高的優(yōu)點(diǎn)。51STM32F4的時(shí)鐘源PLLPLL為鎖相環(huán)倍頻輸出,STM32F4具有兩個(gè)PLL:主PLL和專用PLL。主PLL(MainPLL)由HSE或HSI振蕩器提供時(shí)鐘信號(hào),并具有兩個(gè)不同的輸出時(shí)鐘:第一個(gè)用于生成高速系統(tǒng)時(shí)鐘(最高達(dá)168MHz),第二個(gè)用于生成USBOTGFS的時(shí)鐘(48MHz)、隨機(jī)數(shù)發(fā)生器的時(shí)鐘(48MHz)和SDIO時(shí)鐘(48MHz)。專用PLL(PLLI2S)用于生成精確時(shí)鐘,從而在I2S接口實(shí)現(xiàn)高品質(zhì)音頻性能。52STM32F4系統(tǒng)時(shí)鐘(SYSCLK)的選擇系統(tǒng)時(shí)鐘SYSCLK是提供STM32中絕大部分部件工作的時(shí)鐘源,可來源于三個(gè)時(shí)鐘源:HSI、HSE、PLL在系統(tǒng)復(fù)位后,默認(rèn)系統(tǒng)時(shí)鐘為HSI。STM32F407的SYSCLK時(shí)鐘最大168MHz53STM32F4的時(shí)鐘輸出STM32共有兩個(gè)微控制器時(shí)鐘輸出(MCO)引腳,可以選擇一個(gè)時(shí)鐘信號(hào)輸出到MCO引腳上:MCO1引腳(PA8),可選擇時(shí)鐘源:HSI、LSE、HSE、PLL
MCO2引腳(PC9),可選擇時(shí)鐘源:HSE、PLL、系統(tǒng)時(shí)鐘、PLLI2SCLK54STM32F4的總線時(shí)鐘以太網(wǎng)PTP時(shí)鐘是使用系統(tǒng)時(shí)鐘AHB時(shí)鐘經(jīng)過SYSCLK時(shí)鐘分頻得來,最大頻率為168MHzAPB2高速時(shí)鐘、APB1低速時(shí)鐘經(jīng)過AHB時(shí)鐘分頻得來,最大頻率分別為168MHz、84MHz553.3STM32最小系統(tǒng)最小系統(tǒng)是指僅包含必需的元器件,僅可運(yùn)行最基本軟件的簡化系統(tǒng),也就是用最少的元件組成,但可以工作的系統(tǒng)。無論多么復(fù)雜的嵌入式系統(tǒng),都可以認(rèn)為是由最小系統(tǒng)和擴(kuò)展功能組成。最小系統(tǒng)是嵌入式系統(tǒng)硬件設(shè)計(jì)中復(fù)用率最高,也是最基本的功能單元。典型的最小系統(tǒng)包括:STM32微控制器芯片、電源、調(diào)試接口、復(fù)位電路、時(shí)鐘、存儲(chǔ)系統(tǒng)(可選)。56電源電路STM32F4微控制器使用單電源供電,工作電壓VDD要求介于1.8V到3.6V之間。同時(shí)通過內(nèi)部的一個(gè)嵌入式線性調(diào)壓器,可以給Cortex-M4內(nèi)核提供1.2V的工作電壓。通常正常電源為5V,可以采用轉(zhuǎn)換電路轉(zhuǎn)為3.3v后給芯片供電STM32F4芯片的電源引腳可連接電容以增強(qiáng)穩(wěn)定性57調(diào)試接口STM32的CoreSight調(diào)試系統(tǒng)支持JTAG
和SWD兩種接口標(biāo)準(zhǔn),這兩種接口都要使用GPIO(普通I/O口)來供給調(diào)試仿真器使用。JTAG調(diào)試接口(JTAG-DP)提供5針標(biāo)準(zhǔn)JTAG接口串行調(diào)試接口(SW-DP)提供2針(時(shí)鐘+數(shù)據(jù))接口58復(fù)位電路復(fù)位電路的主要作用是把特殊功能寄存器的數(shù)據(jù)刷新為默認(rèn)數(shù)據(jù)。復(fù)位場(chǎng)景:單片機(jī)在運(yùn)算過程中由于干擾等外界原因造成寄存器中數(shù)據(jù)混亂不能使其正常繼續(xù)執(zhí)行程序(稱死機(jī))或產(chǎn)生的結(jié)果不正確時(shí)均需要復(fù)位,以使程序重新開始運(yùn)行。單片機(jī)在剛上電時(shí)也需要復(fù)位電路,系統(tǒng)上電時(shí)復(fù)位電路
提供復(fù)位信號(hào),直至電源穩(wěn)定后,撤銷復(fù)位信號(hào),以使單
片機(jī)能夠正常穩(wěn)定的工作。59時(shí)鐘系統(tǒng)一般在最小系統(tǒng)設(shè)計(jì)時(shí),我們會(huì)考慮選用外部時(shí)鐘源,以獲得更高的時(shí)鐘精度HSE外接晶振電路,晶振8MHz
LSE外接晶振電路,晶振32.768KHz60思考與練習(xí)STM32F4有哪些時(shí)鐘源信號(hào)?時(shí)鐘頻率分別是多少?STM32F4的系統(tǒng)時(shí)鐘的時(shí)鐘源有哪些?STM32最小系統(tǒng)包含哪些部分?請(qǐng)說明STM32F4的供電要求?STM32系統(tǒng)復(fù)位有哪些場(chǎng)景?STM32的時(shí)鐘源一般如何選擇?61單擊此處添加副標(biāo)題內(nèi)容謝謝聆聽62第3章STM32I/O應(yīng)用實(shí)戰(zhàn)《嵌入式技術(shù)入門與實(shí)戰(zhàn)(基于STM32)》3、任務(wù)2按鍵點(diǎn)燈的控制與實(shí)現(xiàn)第3章STM32I/O應(yīng)用實(shí)戰(zhàn)PartThree3、任務(wù)2按鍵點(diǎn)燈的控制與實(shí)現(xiàn)3.1GPIO輸入工作模式3.2GPIO作為輸入的應(yīng)用設(shè)計(jì)3.3實(shí)現(xiàn)與代碼分析653.4GPIO的寄存器描述3.1、GPIO輸入工作模式1、GPIO輸入工作模式模擬輸入1浮空輸入2上拉輸入3下拉輸入4輸入模式上拉、下拉和浮空輸入的內(nèi)部配置輸出緩沖器被禁止,施密特觸發(fā)器輸入被激活上拉電阻開關(guān)閉合接VDD,下拉電阻開關(guān)打開在引腳沒有外部輸入時(shí),引腳被上拉至高電平,且保持高電平狀態(tài)69上拉輸入開關(guān)閉合下拉電阻開關(guān)閉合接GND,上拉電阻開關(guān)打開在引腳沒有外部輸入時(shí),引腳被下拉至低電平,且保持低電平狀態(tài)70下拉輸入開關(guān)閉合輸入引腳即不接高電平,也不接低電平。由外部輸入決定引腳的狀態(tài)。71浮空輸入開關(guān)都打開關(guān)閉施密特觸發(fā)器,上拉和下拉電阻被禁止。72模擬輸入3.2、GPIO作為輸入的應(yīng)用設(shè)計(jì)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)按鍵控制LED燈系統(tǒng),具體要求:系統(tǒng)上電后,按下4個(gè)按鍵KEY0、KEY1、KEY2、WK_UP分別控制翻轉(zhuǎn)LED1與LED2的亮滅狀態(tài)74GPIO作為輸入的應(yīng)用芯片:STM32F407ZGT6實(shí)驗(yàn)板:正點(diǎn)原子探索開發(fā)套件實(shí)驗(yàn)板已實(shí)現(xiàn)了硬件電路,無需重新搭建。75硬件平臺(tái)條件按下按鍵時(shí)導(dǎo)通A端與B端;松開按鍵保持電路開路狀態(tài)76按鍵原理在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),抖動(dòng)時(shí)間一般為5ms~10ms。硬件消抖:在按鍵上并聯(lián)一個(gè)電容,利用電容的充放電特性來對(duì)抖動(dòng)過程中產(chǎn)生的電壓毛刺進(jìn)行平滑處理。軟件消抖:使用程序完成消抖任務(wù)。77按鍵消抖硬件設(shè)計(jì)原理圖KEY0→PE4,KEY1→PE3,KEY2→PE2、WK_UP→PA0按鍵連接硬件電路功能:基于嵌入式MCU設(shè)計(jì)并實(shí)現(xiàn)一個(gè)按鍵控制LED燈系統(tǒng)。KEY0→PE4:上拉輸入模式KEY1→PE3:上拉輸入模式KEY2→PE2:上拉輸入模式WK_UP→PA0:下拉輸入模式GPIO作為輸出的應(yīng)用-模式選擇思考與練習(xí)◎簡述GPIO有哪幾種輸入工作模式?!蚍治錾侠?、下拉和浮空輸入的區(qū)別。3.3、實(shí)現(xiàn)與代碼分析掌握詳細(xì)實(shí)現(xiàn)過程,分析具體實(shí)現(xiàn)代碼3.3.1
實(shí)現(xiàn)過程第一步使用STM32CubeMX完成GPIO引腳初始化配置和工程代碼的生成第二步按鍵掃描和按鍵點(diǎn)燈代碼添加第三步下載調(diào)試3.3.2代碼分析1)GPIO引腳初始化代碼2)按鍵掃描代碼3)按鍵點(diǎn)燈代碼83GPIO引腳初始化代碼84按鍵掃描思路按鍵掃描代碼864、GPIO的寄存器描述GPIO寄存器GPIO寄存器實(shí)現(xiàn)對(duì)GPIO端口初始化配置和數(shù)據(jù)輸入輸出控制每個(gè)寄存器只能以32位(字)進(jìn)行訪問STM3F40x芯片系列的GPIO寄存器:GPIO配置寄存器GPIO端口模式寄存器GPIOx_MODERGPIO端口輸出類型寄存器GPIOx_OTYPERGPIO端口輸出速度寄存器GPIOx_OSPEEDRGPIO端口上拉/下拉寄存器GPIOx_PUPDR數(shù)據(jù)寄存器GPIO端口輸入數(shù)據(jù)寄存器GPIOx_IDRGPIO端口輸出數(shù)據(jù)寄存器GPIOx_ODR置位/復(fù)位寄存器GPIO端口置位/復(fù)位寄存器GPIOx_BSRR鎖定寄存器GPIO端口配置鎖定寄存器GPIOx_LCKR復(fù)用功能選擇寄存器GPIO復(fù)用功能高位寄存器GPIOx_AFRHGPIO復(fù)用功能低位寄存器GPIOx_AFRL89GPIO端口模式寄存器GPIOx_MODER每個(gè)引腳2bit:MODEy[1:0]32bit可配置16個(gè)引腳,即1個(gè)端口PA0輸入模式的配置:GPIOA_MODER,MODER0[1:0]=00GPIO端口輸出類型寄存器GPIOx_OTYPER90每個(gè)引腳僅用1bit表示引腳輸出類型:OTy[0],1個(gè)端口僅占用低16位,高16位保留PE5推挽輸出:在GPIOE_MODER中,MODER5[1:0]=01,在GPIOE_OTYPER中,OT5=0GPIO端口輸出速度寄存器GPIOx_OSPEEDR91每個(gè)引腳2bit:OSPEEDRy[1:0]32bit可配置16個(gè)引腳,即1個(gè)端口GPIO端口上拉/下拉寄存器GPIOx_PUPDR92每個(gè)引腳2bit:PUPDRy[1:0],32bit可配置16個(gè)引腳,即1個(gè)端口PE3上拉輸入模式:在GPIOE_MODER中,MODER3[1:0]=00,在GPIOE_PUPDR中,PUPDR3[1:0]=01端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)93GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIO_PinStatebitstatus;/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));if((GPIOx->IDR&GPIO_Pin)!=(uint32_t)GPIO_PIN_RESET){bitstatus=GPIO_PIN_SET;}else{bitstatus=GPIO_PIN_RESET;}returnbitstatus;}每個(gè)引腳僅需1bit表示狀態(tài)“0”或“1”1個(gè)端口僅占用低16位,高16位保留:IDRy[15:0]94端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)每個(gè)引腳僅需1bit表示狀態(tài)“0”或“1”1個(gè)端口僅占用低16位,高16位保留:ODRy[15:0]95端口位設(shè)置/復(fù)位寄存器(GPIOx_BSRR)voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState){/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState!=GPIO_PIN_RESET){
GPIOx->BSRR=GPIO_Pin;}else{
GPIOx->BSRR=(uint32_t)GPIO_Pin<<16u;}}每個(gè)引腳置位和復(fù)位各1bit,低16位為置位,高16位為復(fù)位1思考與練習(xí)◎如果通過寄存器配置PB4引腳的工作模式,請(qǐng)問如何配置?◎請(qǐng)分析HAL庫函數(shù):HAL_GPIO_ReadPin、HAL_GPIO_WritePin、HAL_GPIO_TogglePin的代碼,對(duì)引腳的讀寫分別配置了哪些寄存器?單擊此處添加副標(biāo)題內(nèi)容謝謝聆聽97《嵌入式技術(shù)與應(yīng)用》
STM32的GPIO模塊-位操作
第3章STM32I/O應(yīng)用實(shí)戰(zhàn)《嵌入式技術(shù)入門與實(shí)戰(zhàn)(基于STM32)》任務(wù)3STM32I/O的位帶操作實(shí)現(xiàn)01STM32存儲(chǔ)器的映射02位帶操作原理03位帶操作的應(yīng)用分析1、STM32存儲(chǔ)器的映射STM32存儲(chǔ)器的映射
4GB地址空間內(nèi)可尋址的存儲(chǔ)空間分為8個(gè)主要塊,每個(gè)塊為512MB。嵌入式SRAM包括:192KB系統(tǒng)SRAM、4KB備份SRAM系統(tǒng)SRAM:起始地址是0x20000000,分為三塊:映射在地址0x20000000的112KB和16KB塊,供所有AHB主控總線訪問。外設(shè)存儲(chǔ)器映射外設(shè)存儲(chǔ)器映射起始地址是0x40000000通過總線AHB、APB連接外設(shè)2、位帶操作原理GPIO輸出數(shù)據(jù)寄存器寫一位值控制其對(duì)應(yīng)的引腳狀態(tài),普通的操作過程中需要3步驟:
1.
讀:讀取包含該位的字節(jié)數(shù)據(jù)
2.修改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- IP網(wǎng)絡(luò)基礎(chǔ)知識(shí)
- 氣切患者心理支持與溝通
- 沖壓員工考試題及答案
- 財(cái)務(wù)崗前培訓(xùn)考試試題及答案
- 2025-2026人教版八年級(jí)物理上冊(cè)測(cè)試
- 2026年重點(diǎn)高中自主招生考試語文試卷試題(含答案+答題卡)
- 2025-2026二年級(jí)科學(xué)學(xué)期末測(cè)試
- 2025-2026一年級(jí)體育期末考卷
- 衛(wèi)生室倉庫盤存制度
- 學(xué)校衛(wèi)生室廠家管理制度
- 2025新譯林版英語七年級(jí)下單詞默寫單
- 新高考語文專題訓(xùn)練之模擬題分類匯編文言文閱讀1(原卷版+解析)
- DL∕T 5545-2018 火力發(fā)電廠間接空冷系統(tǒng)設(shè)計(jì)規(guī)范
- 《研學(xué)旅行課程設(shè)計(jì)》課件-研學(xué)課程設(shè)計(jì)原則
- JJG 693-2011可燃?xì)怏w檢測(cè)報(bào)警器
- (本科)大學(xué)生勞動(dòng)教育理論與實(shí)踐教程全書電子教案完整版
- 黑龍江省中藥飲片炮制規(guī)范及標(biāo)準(zhǔn)
- 盤口暗語及盤口數(shù)字語言
- QC-提高衛(wèi)生間防水一次驗(yàn)收合格率
- 彈藥庫防火防爆消防演示
- 大地測(cè)量控制點(diǎn)坐標(biāo)轉(zhuǎn)換技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論