




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)“藍(lán)橋杯”嵌入式設(shè)計與開發(fā)競賽培訓(xùn)教材第1章STM32MCU
實驗1軟件開發(fā)環(huán)境
☆第2章軟件開發(fā)環(huán)境與工具 實驗2GPIO
☆第3章通用并行接口GPIO 實驗3LCD
☆第4章通用同步/異步收發(fā)器接口
實驗4USART
☆第5章串行設(shè)備接口SPI
實驗5SPI
☆第6章內(nèi)部集成電路總線接口I2C
實驗6I2C ☆第7章
模數(shù)轉(zhuǎn)換器ADC 實驗7ADC
☆第8章
定時器TIM
實驗8TIM
☆第9章
嵌套向量中斷控制器NVIC 實驗9NVIC ☆第10章
直接存儲器存取DMA
實驗10DMA
☆第12章
往屆試題
☆嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)目
錄2024/6/4方法以實驗為核心,采用翻轉(zhuǎn)課堂形式教學(xué)具體方法:課前預(yù)習(xí),課上討論,課后總結(jié)課前:預(yù)習(xí)實驗內(nèi)容,完成預(yù)習(xí)報告課上:提出問題,回答問題,通過討論掌握實驗內(nèi)容課后:結(jié)合實驗和討論,在預(yù)習(xí)報告基礎(chǔ)上完成實驗報告23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)嵌入式系統(tǒng)嵌入式系統(tǒng)是嵌入到對象體系中的專用計算機(jī)系統(tǒng)嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),硬件和軟件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積和功耗等嚴(yán)格要求的專用計算機(jī)系統(tǒng)嵌入式系統(tǒng)和通用計算機(jī)系統(tǒng)類似,由處理器、存儲器、輸入輸出接口和輸入輸出設(shè)備以及軟件等部分組成但作為專用計算機(jī)系統(tǒng)的嵌入式系統(tǒng)和通用計算機(jī)系統(tǒng)相比,具有以下幾個重要特征:系統(tǒng)簡練、專用性強(qiáng)、實時操作系統(tǒng)支持和專門開發(fā)工具支持23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)嵌入式系統(tǒng)嵌入式系統(tǒng)最初的應(yīng)用是單片機(jī)系統(tǒng)最早的單片機(jī)是Intel公司的8048(1976)和8051(1980)近幾年流行的是ARM公司的Cortex-M系列Cortex-M0(基本型)、Cortex-M3、Cortex-M4(DSP)物聯(lián)網(wǎng)(IoT)=互聯(lián)網(wǎng)+智能硬件(嵌入式系統(tǒng))智能硬件是以平臺性底層軟硬件為基礎(chǔ),以智能傳感互聯(lián)、人機(jī)交互、新型顯示及大數(shù)據(jù)處理等新一代信息技術(shù)為特征,以新設(shè)計、新材料、新工藝硬件為載體的新型智能終端產(chǎn)品及服務(wù)23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)嵌入式系統(tǒng)設(shè)計硬件設(shè)計:需求分析
功能確定
方框圖
電路圖
PCB制作
硬件調(diào)試23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)嵌入式系統(tǒng)設(shè)計軟件設(shè)計:需求分析
算法確定
流程圖
源程序
調(diào)試運(yùn)行23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)嵌入式系統(tǒng)設(shè)計嵌入式系統(tǒng)的C語言程序設(shè)計與一般的C語言程序設(shè)計基本相同,主要差別是:嵌入式系統(tǒng)C語言程序設(shè)計常用到位操作,包括“位反~”、“左移<<”、“右移>>”、“位與&”、“位或|”和“位異或^”等注意“位與&”和“位或|”與“邏輯與&&”和“邏輯或||”的區(qū)別使用位操作的主要目的是只對控制和狀態(tài)寄存器的指定位進(jìn)行操作,對其他位的值不產(chǎn)生影響。23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.1STM32MCU結(jié)構(gòu)
☆1.2STM32MCU存儲器映像
☆1.3STM32MCU系統(tǒng)時鐘樹
☆1.4Cortex-M4簡介
☆前頁
返回第1章STM32MCU嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)2024/6/4前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第1章STM32MCU1.1STM32MCU結(jié)構(gòu)由控制單元、從屬單元和總線矩陣三大部分組成,控制單元和從屬單元通過總線矩陣相連接控制單元包括Cortex-M4內(nèi)核和兩個DMA控制器(DMA1和DMA2)總線矩陣:
I-bus、D-bus、S-busAHB1、AHB2前頁
返回23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.1STM32MCU結(jié)構(gòu)從屬單元包括存儲器(FLASH和SRAM等)和設(shè)備(連接片外設(shè)備的接口和片內(nèi)設(shè)備)連接片外設(shè)備的接口有并行接口和串行接口,并行接口即通用IO接口GPIO,串行接口有USART、SPI、I2C、USB和CAN等前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.1STM32MCU結(jié)構(gòu)片內(nèi)設(shè)備有定時器TIM、模數(shù)轉(zhuǎn)換器ADC和數(shù)模轉(zhuǎn)換器DAC等定時器包括高級控制定時器TIM1/8、通用定時器TIM2-5、基本定時器TIM6/7、實時鐘RTC、獨(dú)立看門狗IWDG和窗口看門狗WWDG等前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.1STM32MCU結(jié)構(gòu)注意:系統(tǒng)復(fù)位后,除FLASH接口和SRAM時鐘允許外,所有設(shè)備時鐘都被關(guān)閉,使用前必須設(shè)置時鐘使能寄存器(RCC_APBENR)允許設(shè)備時鐘。前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.2STM32MCU存儲器映像程序存儲器、數(shù)據(jù)存儲器和輸入輸出端口寄存器被組織在同一個4GB的線性地址空間內(nèi)前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹系統(tǒng)時鐘樹由系統(tǒng)時鐘源、系統(tǒng)時鐘和設(shè)備時鐘等部分組成系統(tǒng)時鐘源有5個:高速外部時鐘HSE(4~48MHz)、低速外部時鐘LSE(32.768kHz)、高速內(nèi)部時鐘HSI(16MHz)、高速內(nèi)部時鐘HSI48(48MHz)和低速內(nèi)部時鐘LSI(32kHz)外部時鐘用晶體振蕩器OSC實現(xiàn),內(nèi)部時鐘用RC振蕩器實現(xiàn)前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹系統(tǒng)時鐘SYSCLK(最大170MHz)可以是HSE或HSI,也可以是HSE或HSI通過鎖相環(huán)倍頻后的鎖相環(huán)時鐘PLLCLK系統(tǒng)復(fù)位后的系統(tǒng)時鐘為HSI,這就意味著即使沒有HSE系統(tǒng)也能正常工作,只是HSI的精度沒有HSE高SYSCLK經(jīng)AHB預(yù)分頻器分頻后得到AHB總線時鐘HCLK(最大170MHz),HCLK經(jīng)APB1/APB2預(yù)分頻器分頻后得到APB1/APB2總線時鐘PCLK1(最大170MHz)和PCLK2(最大170MHz),PCLK1和PCLK2分別為相連的設(shè)備提供設(shè)備時鐘前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹系統(tǒng)時鐘樹中的時鐘選擇、預(yù)分頻值和外設(shè)時鐘使能等都可以通過對復(fù)位和時鐘控制(RCC)寄存器編程實現(xiàn)前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹復(fù)位和時鐘控制(RCC)寄存器結(jié)構(gòu)體RCC_TypeDef在Drivers\CMSIS\
Device\ST\STM32G4xx\Include\stm32g431xx.h中定義常用的RCC
HAL宏定義在stm32g4xx_hal_rcc.h中定義如下:#define__HAL_RCC_GPIOA_CLK_ENABLE()\do{\__IOuint32_ttmpreg;\
SET_BIT(RCC->AHB2ENR,RCC_AHB2ENR_GPIOAEN);\/*DelayafteranRCCperipheralclockenabling*/\tmpreg=READ_BIT(RCC->AHB2ENR,RCC_AHB2ENR_GPIOAEN);\UNUSED(tmpreg);\}while(0)前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹復(fù)位和時鐘控制(RCC)寄存器結(jié)構(gòu)體RCC_TypeDef在Drivers\CMSIS\
Device\ST\STM32G4xx\Include\stm32g431xx.h中定義常用的RCC
LL庫函數(shù)在stm32g4xx_ll_bus.h中聲明如下:__STATIC_INLINEvoidLL_AHB2_GRP1_EnableClock(uint32_tPeriphs){__IOuint32_ttmpreg;
SET_BIT(RCC->AHB2ENR,Periphs);/*DelayafteranRCCperipheralclockenabling*/tmpreg=READ_BIT(RCC->AHB2ENR,Periphs);(void)tmpreg;}
前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.3STM32MCU系統(tǒng)時鐘樹對比RCC的HAL和LL實現(xiàn)可以看出:兩者的操作相同,都是對指定寄存器(RCC->AHB2ENR)的指定位(RCC_AHB2ENR_GPIOAEN)進(jìn)行讀(READ_BIT)寫(SET_BIT)操作。因此,寄存器的讀寫操作是所有操作的基礎(chǔ)
前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介Cortex-M4是采用哈佛結(jié)構(gòu)的32位處理器內(nèi)核,擁有獨(dú)立的指令總線和數(shù)據(jù)總線,兩者共享同一個4GB存儲空間Cortex-M4內(nèi)建一個嵌套向量中斷控制器(NVIC:NestedVectoredInterruptController),支持可嵌套中斷、向量中斷和動態(tài)優(yōu)先級等Cortex-M4內(nèi)部還包含一個系統(tǒng)滴答定時器SysTick前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介SysTick的核心是1個24位遞減計數(shù)器,使用時根據(jù)需要設(shè)置初值(LOAD),啟動(ENABLE=1)后在系統(tǒng)時鐘(HCLK或HCLK/8)的作用下遞減,減到0時置計數(shù)標(biāo)志位(COUNTFLAG)并重裝初值系統(tǒng)可以查詢計數(shù)標(biāo)志位,也可以在中斷允許時產(chǎn)生SysTick中斷前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介SysTick通過4個32位寄存器進(jìn)行操作前頁
返回控制狀態(tài)寄存器有3個控制位和1個狀態(tài)位第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介常用的SysTick
HAL庫函數(shù)在stm32g4xx_hal.c中聲明如下:HAL_StatusTypeDefHAL_InitTick(uint32_tTickPriority);voidHAL_Delay(uint32_tDelay);前頁
返回第1章STM32MCU(1)SysTick初始化HAL_StatusTypeDefHAL_InitTick(uint32_tTickPriority);參數(shù)說明:
★TickPriority:SysTick中斷優(yōu)先級,在stm32g4xx_hal_conf.h中定義如下:
#defineTICK_INT_PRIORITY 0U返回值:HAL_StatusTypeDef-HAL狀態(tài),在stm32g4xx_hal_def.h中定義23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介常用的SysTick
HAL庫函數(shù)在stm32g4xx_hal.c中聲明如下:HAL_StatusTypeDefHAL_InitTick(uint32_tTickPriority);voidHAL_Delay(uint32_tDelay);前頁
返回第1章STM32MCU(2)HAL延時voidHAL_Delay(uint32_tDelay);參數(shù)說明:
★Delay:延時值(ms)23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介常用的SysTickLL庫函數(shù)在stm32g4xx_ll_utils.h中聲明如下:voidLL_Init1msTick(uint32_tHCLKFrequency);voidLL_mDelay(uint32_tDelay);前頁
返回第1章STM32MCU(1)SysTick初始化voidLL_Init1msTick(uint32_tHCLKFrequency);參數(shù)說明:
★HCLKFrequency:HCLK頻率(170MHz)注意:LL_Init1msTick()沒有允許SysTick中斷,需要用stm32g4xx_ll_cortex.h中的下列函數(shù)允許SysTick中斷:voidLL_SYSTICK_EnableIT(void);23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介常用的SysTickLL庫函數(shù)在stm32g4xx_ll_utils.h中聲明如下:voidLL_Init1msTick(uint32_tHCLKFrequency);voidLL_mDelay(uint32_tDelay);前頁
返回第1章STM32MCU(2)LL延時voidLL_mDelay(uint32_tDelay);參數(shù)說明:
★Delay:延時值(ms)23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)1.4Cortex-M4簡介Keil中的SysTick對話框其中包含SysTick所有寄存器及其復(fù)位值前頁
返回第1章STM32MCU23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)注意:HAL和LL操作本質(zhì)相同。HAL操作將底層操作進(jìn)行封裝,操作簡單,移植性好,比較適合計算機(jī)等相關(guān)專業(yè)的學(xué)生學(xué)習(xí)使用;LL操作和直接操作寄存器類似,目標(biāo)程序小,有利于對硬件的理解,比較適合電子、通信和自動化等相關(guān)專業(yè)的學(xué)生學(xué)習(xí)使用。前頁
返回第1章STM32MCU嵌入式系統(tǒng)的C語言程序設(shè)計與一般的C語言程序設(shè)計基本相同,主要差別是嵌入式系統(tǒng)C語言程序設(shè)計常用到位操作,包括“位反~”、“左移<<”、“右移>>”、“位與&”、“位或|”和“位異或^”等(注意“位與&”和“位或|”與“邏輯與&&”和“邏輯或||”的區(qū)別),使用位操作的主要目的是只對控制和狀態(tài)寄存器的指定位進(jìn)行操作,對其他位的值不產(chǎn)生影響。23:09:47嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第2章軟件開發(fā)環(huán)境與工具前頁
返回2.1軟件開發(fā)包(SDK)
☆2.2MCU配置工具(STM32CubeMX)
☆2.3集成開發(fā)環(huán)境(IDE)
☆嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)2024/6/4第2章軟件開發(fā)環(huán)境與工具前頁
返回2.1軟件開發(fā)包(SDK)STM32軟件開發(fā)包是STM32系統(tǒng)設(shè)計的基礎(chǔ),經(jīng)歷了下列3個階段:固件庫(FirmWareLibrary):FWLibV0.3(2007)~V2.0.3(2008)標(biāo)準(zhǔn)外設(shè)庫(StandardPeripheralsLibrary):SPLibV3.0.0(2009)~V3.5.0(2011)固件包(FirmwarePackage):STM32CubeG4V1.0.0(2019)~V1.5.0(2021)注意:STM32G431只有固件包,沒有固件庫和標(biāo)準(zhǔn)庫嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)23:09:47第2章軟件開發(fā)環(huán)境與工具2.1軟件開發(fā)包(SDK)STM32Cube固件包包括:STM32Cube嵌入式軟件包:HAL:硬件抽象層嵌入式軟件庫,確保STM32系列產(chǎn)品的移植性LL:低層API,提供比HAL更接近硬件的快速輕量化的專業(yè)API中間件:USB、RTOS、FatFs和TCP/IP等應(yīng)用程序:提供完整的應(yīng)用程序、示例程序和工程模板STM32CubeMX:圖形化軟件配置工具,用圖形向?qū)沙跏蓟a嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.1軟件開發(fā)包(SDK)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.1軟件開發(fā)包(SDK)STM32軟件開發(fā)最基礎(chǔ)的工作和單片機(jī)類似,是對STM32的設(shè)備寄存器進(jìn)行操作。但STM32的寄存器操作要比單片機(jī)復(fù)雜得多,初學(xué)者很難下手。為了降低開發(fā)難度,MCU生產(chǎn)廠商把基本的寄存器操作封裝成庫函數(shù),軟件開發(fā)者使用這些庫函數(shù)進(jìn)行軟件開發(fā)就方便很多。根據(jù)封裝的方法不同,目前常用的有HAL和LL兩種庫函數(shù)。HAL(HardwareAbstractionLayer:硬件抽象層)將底層硬件操作封裝在庫函數(shù)中,上層用戶無需關(guān)心寄存器如何操作,通過調(diào)用庫函數(shù)實現(xiàn)相應(yīng)功能,操作簡單,移植性強(qiáng)。但HAL封裝有些過度,靈活性較差。LL(LowLayer:低層)提供比HAL更接近硬件的快速輕量化的專業(yè)庫函數(shù),功能強(qiáng)大,使用靈活。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.1軟件開發(fā)包(SDK)LL直接操作MCU寄存器,HAL直接或通過LL操作MCU寄存器,接口與設(shè)備驅(qū)動(gpio.c和adc.c等)通過HAL或LL間接操作MCU寄存器,實現(xiàn)用戶程序與HAL/LL的隔離,這樣用戶程序就與HAL/LL無關(guān),可以很方便的進(jìn)行移植。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)STM32CubeMX是STM32配置和生成初始化代碼的圖形化軟件配置工具,可以用圖形向?qū)渲煤蜕沙跏蓟a。STM32CubeMX支持32位(x86)和64位(x64)Windows7/8/10,下面以STM32CubeMX6.9.0為例介紹STM32CubeMX的安裝和使用。STM32CubeMX安裝文件如下:SetupSTM32CubeMX-6.9.0-Win.exe:STM32CubeMX安裝文件stm32cube_fw_g4_v150.zip:STM32g4系列固件包(可以在STM32CubeMX中下載)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)STM32CubeMX的使用包括下列步驟:(1)安裝嵌入式軟件包(2)從MCU新建工程(3)引腳配置(4)時鐘配置(5)工程管理(6)生成HAL/LL工程嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47(1)安裝嵌入式軟件包單擊“Help”菜單下的“ManageEmbededSoftwarePackages”菜單項,或單擊主界面右側(cè)“Managesoftwareinstallations”下的“INSTALL/REMOVE”,打開嵌入式軟件包管理對話框安裝STM32G4軟件包第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(2)從MCU新建工程嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47
單擊“File”菜單下的“NewProject...”菜單項,或單擊“NewProject”下的“ACCESSTOMCUSELECTOR”,打開從MCU新建工程對話框,在MCU列表中選擇“STM32G431RBTx”
第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(3)引腳配置GPIOUSART1SPI2I2C1ADC1~2TIM1~3NVICRCCSYS嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(4)時鐘配置嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47
在HSE左側(cè)輸入晶振頻率“24”MHz,選中“PLLSourceMux”輸入為“HSE”將“PLLM”、“*N”和“/R”的值分別設(shè)為“/6”、“X85”和“/2”,將HCLK設(shè)為“170”MHz第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(5)工程管理①單擊工程管理標(biāo)簽,在ProjectName下輸入工程名“HAL”,在ProjectLocation下輸入“D:\CT117E-M4”,Toolchain/IDE選擇“MDK-ARM”,MinVersion選擇“V5”,確認(rèn)固件包名稱和版本為“STM32CubeFW_G4V1.5.0”。②單擊“CodeGenerator”,在“STM32CubeMCUpackkagesandembeddedsofewarepacks”中選擇“Copyonlythenecessarylibraryfiles”(只復(fù)制必要的庫文件)。③在“GeneratedFiles”中選中“Generateperipheralinitializationasapairof‘.c/.h’filesperperipheral”(每個設(shè)備分別生成一對初始化‘.c/.h’文件)。④單擊“AdvancedSettings”,驅(qū)動程序默認(rèn)使用“HAL”。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(6)生成HAL/LL工程①單擊右上角的“GENERAECODE”生成HAL工程和初始化代碼,生成完成后顯示代碼生成對話框。②單擊“OpenFolder”打開工程文件夾HAL,其中包含下列文件和文件夾:HAL.ioc:STM32CubeMX工程文件MDK-ARM:Keil工程文件夾,包含Keil工程文件和啟動代碼匯編語言文件Drivers:驅(qū)動軟件庫,包括CMSIS和STM32G4xx_HAL_Driver兩個文件夾Core:用戶文件夾,包括Inc和Src兩個文件夾,Inc包括用戶頭文件,Src包括用戶源文件和1個系統(tǒng)初始化源文件注意:為了多個工程共用驅(qū)動軟件庫和用戶文件,可以將“Src”文件夾中的“main.c”文件剪切粘帖到“MDK-ARM”文件夾,Keil工程中也要做相應(yīng)的修改嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.2MCU配置工具(STM32CubeMX)(6)生成HAL/LL工程③在“AdvancedSettings”中將驅(qū)動程序全部修改為“LL”。④單擊“File”下“SaveProjectAs..”菜單項,將工程另存到“D:\CT117E-M4\LL”文件夾。⑤單擊右上角的“GENERAECODE”生成LL工程和初始化代碼,生成完成后打開工程文件夾LL,其中包含下列文件和文件夾:LL.ioc:STM32CubeMX工程文件MDK-ARM:Keil工程文件夾,包含Keil工程文件和啟動代碼匯編語言文件Drivers:驅(qū)動軟件庫,包括CMSIS和STM32G4xx_HAL_Driver兩個文件夾Core:用戶文件夾,包括Inc和Src兩個文件夾,Inc包括用戶頭文件,Src包括用戶源文件和1個系統(tǒng)初始化源文件嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)STM32的集成開發(fā)環(huán)境有MDK-ARM、EWARM和STM32CubeIDE等,本書以MDK-ARM為例介紹集成開發(fā)環(huán)境的安裝和使用。MDK-ARM是ARM收購Keil后推出的ARMMCU開發(fā)工具,是Keil集成開發(fā)環(huán)境uVision和ARM高效編譯工具RVCT(RealViewComplieTools)的完美結(jié)合。MDK-ARM經(jīng)歷了下列5個階段:DK-ARMV1.0~V1.4KeilDevelopmentToolsforARMV1.5KeilDevelopmentSuiteforARMV2.00~V2.42RealViewMicrocontrollerDevelopmentKitV2.50,V3.00~V3.80,V4.00~V4.20MicrocontrollerDevelopmentKitV4.21~V4.73,V5.00~V5.38嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)早期版本的MDK-ARM內(nèi)嵌軟件開發(fā)包如RVMDKV4.12內(nèi)嵌FWLibV2.0.1MDKV4.73內(nèi)嵌SPLibV3.5.0從MDK-ARMV5.00開始,軟件開發(fā)包以STM32Cube固件包的形式單獨(dú)發(fā)布,如stm32cube_fw_g4_v150.zip。下面以MDK-ARMV5.38為例介紹MDK-ARM的安裝和使用。MDK-ARM安裝文件如下:MDK538.exe:MDK-ARM安裝文件Keil.STM32G4xx_DFP.1.2.1.pack:器件支持包嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)MDK-ARM的使用包括:(1)生成目標(biāo)程序文件(2)配置CMSIS-DAP下載調(diào)試器(3)下載目標(biāo)程序(4)調(diào)試目標(biāo)程序(5)修改工程文件嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(1)生成目標(biāo)程序文件HAL工程中包含下列4個文件夾:Application/MDK-ARM:包含1個匯編語言源文件Application/User/Core:包含10個用戶源文件Drivers/STM32G4xx_HAL_Driver:包含HAL驅(qū)動程序源文件Drivers/CMSIS:包含1個系統(tǒng)初始化源文件注意:在“Project”窗口中右擊“main.c”,從彈出菜單中選擇“OptionsforFile‘main.c’...”,在對話框中將“Path”由“../Core/Src/main.c”修改為“main.c”。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(1)生成目標(biāo)程序文件選擇“Optimization”為“Level0(-O0)”(不優(yōu)化,方便調(diào)試)。確認(rèn)編譯包含路徑注意:這些路徑對編譯非常重要,如果編譯包含路徑不正確,編譯時將會有很多錯誤。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(1)生成目標(biāo)程序文件編譯C語言源文件并連接生成目標(biāo)程序文件“HAL.axf”注意:如果生成過程中有錯誤則不能生成目標(biāo)程序文件。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(2)配置CMSIS-DAP下載調(diào)試器嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47
第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(2)配置CMSIS-DAP下載調(diào)試器嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(3)下載目標(biāo)程序單擊生成工具欄中的“Download”按鈕,將目標(biāo)程序下載到競賽實訓(xùn)平臺,競賽實訓(xùn)平臺的8個LED點(diǎn)亮。(4)調(diào)試目標(biāo)程序程序中的語法錯誤生成時可以發(fā)現(xiàn),但功能錯誤只能通過調(diào)試發(fā)現(xiàn)。通過調(diào)試不僅可以發(fā)現(xiàn)功能錯誤,還可以驗證程序中語句和函數(shù)的功能。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(5)修改工程文件為了將main.c與HAL/LL隔離,可以對工程做如下修改:①單擊新建按鈕新建文件“Text1”,單擊保存按鈕將文件另存到“HAL\Core\Src”或“LL\Core\Src”文件夾,文件名為“sys.c”。②右擊“Project”中的“Application/User/Core”,在彈出菜單中選擇“AddExistingFiletoGroup‘Application/User/Core’...”,選擇“Core\Src”文件夾中的“sys.c”文件,單擊“Add”按鈕將“sys.c”添加到工程中。③在“sys.c”中添加下列代碼:#include"main.h"嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(5)修改工程文件為了將main.c與HAL/LL隔離,可以對工程做如下修改:④將main.c中的SystemClock_Config()函數(shù)代碼剪切粘帖到sys.c文件中。⑤將main()中的下列代碼剪切粘帖到SystemClock_Config()函數(shù)內(nèi)前部:/*HAL工程*/HAL_Init();/*LL工程*/LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO);LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);LL_PWR_DisableUCPDDeadBattery();嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第2章軟件開發(fā)環(huán)境與工具2.3集成開發(fā)環(huán)境(IDE)(5)修改工程文件為了將main.c與HAL/LL隔離,可以對工程做如下修改:⑥在SystemClock_Config()函數(shù)內(nèi)后部添加下列代碼(僅對LL工程):
LL_SYSTICK_EnableIT();/*允許SysTick中斷*/注意:如果生成目標(biāo)程序時生成輸出中出現(xiàn)下列信息:FCARM-OutputNamenotspecified,pleasecheck'OptionsforTarget-Utilities'則是“sys.c”文件類型錯誤,解決方法是:右擊“Application/User/Core”中的“sys.c”,在彈出菜單中選擇“OptionforFile‘sys.c’...”,在選項對話框中將“sys.c”的文件類型修改為“CSourcefile”。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)前頁
返回23:09:47第3章通用并行接口GPIO前頁
返回3.1GPIO簡介
☆3.2GPIO配置
☆3.3GPIO庫函數(shù)
☆3.3.1GPIOHAL庫函數(shù)3.3.2GPIOLL庫函數(shù)3.4GPIO設(shè)計實例
☆3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)3.4.2LL庫函數(shù)軟件設(shè)計與實現(xiàn)3.5GPIO設(shè)計調(diào)試
☆3.6LCD使用
☆嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)2024/6/4前頁
返回3.1GPIO簡介GPIO包括多個16位I/O端口,每個端口可以獨(dú)立設(shè)置4種輸入方式和4種輸出方式,并可獨(dú)立地置位或復(fù)位GPIO由寄存器、輸入驅(qū)動器和輸出驅(qū)動器等部分組成嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.1GPIO簡介GPIO通過11個32位寄存器進(jìn)行操作嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.1GPIO簡介GPIO通過11個32位寄存器進(jìn)行操作(續(xù))嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.1GPIO簡介輸入驅(qū)動器包括上拉/下拉電阻和施密特觸發(fā)器,實現(xiàn)4種輸入配置:浮空輸入時上拉/下拉電阻斷開;上拉/下拉輸入時根據(jù)PUPDR的設(shè)置連接上拉/下拉電阻,這兩種輸入配置下施密特觸發(fā)器打開,輸入數(shù)據(jù)經(jīng)施密特觸發(fā)器輸入到輸入數(shù)據(jù)寄存器或片上設(shè)備(復(fù)用輸入);模擬輸入時上拉/下拉電阻斷開,施密特觸發(fā)器關(guān)閉,模擬輸入到片上設(shè)備(如ADC等)。輸出驅(qū)動器包括輸出控制和輸出MOS管等,實現(xiàn)4種輸出配置:通用輸出的數(shù)據(jù)來自輸出數(shù)據(jù)寄存器,復(fù)用輸出的數(shù)據(jù)來自片上設(shè)備;推挽輸出0時N-MOS管導(dǎo)通,輸出1時P-MOS管導(dǎo)通;開漏輸出時P-MOS管關(guān)閉,輸出0時N-MOS管導(dǎo)通,輸出1時N-MOS管也關(guān)閉,端口處于高阻狀態(tài),通過內(nèi)部或外接上拉電阻輸出高電平。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.1GPIO簡介輸入配置時輸出驅(qū)動器關(guān)閉,輸出配置時輸入驅(qū)動器的上拉/下拉電阻斷開,施密特觸發(fā)器打開,輸出數(shù)據(jù)可經(jīng)施密特觸發(fā)器輸入到輸入數(shù)據(jù)寄存器。輸入數(shù)據(jù)通過IDR實現(xiàn)。輸出數(shù)據(jù)可以通過ODR實現(xiàn),也可以通過BSRR和BRR實現(xiàn)位操作,即只對1對應(yīng)的位設(shè)置或清除,而不影響0對應(yīng)的位,相當(dāng)于對ODR進(jìn)行按位“或”操作(設(shè)置)和按位“與”操作(清除)。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置輸入功能配置GPIOPull-up/Pull-down:
Nopull-upandnopull-down
(不上拉下拉)
Pull-up(上拉)
Pull-down(下拉)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置輸出功能配置GPIOoutputlevel:
Low(低電平)
High(高電平)GPIOmode:
OutputPushPull(推挽輸出)
OutputOpenDrain(開漏輸出)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置輸出功能配置GPIOPull-up/Pull-down:
Nopull-upandnopull-down
(不上拉下拉)
Pull-up(上拉)
Pull-down(下拉)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置輸出功能配置Maximumoutputspeed:
Low(低速:5MHz)
Medium(中速:25MHz)
High(高速:50MHz)
VeryHigh(超高速:120MHz)嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置GPIO配置完成后生成的相應(yīng)HAL和LL初始化程序分別在HAL\Core\Src\gpio.c和LL\Core\Src\gpio.c中/*HAL工程*/__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_0;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.2GPIO配置GPIO配置完成后生成的相應(yīng)HAL和LL初始化程序分別在HAL\Core\Src\gpio.c和LL\Core\Src\gpio.c中/*LL工程*/LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);GPIO_InitStruct.Pin=LL_GPIO_PIN_0;GPIO_InitStruct.Mode=LL_GPIO_MODE_INPUT;GPIO_InitStruct.Pull=LL_GPIO_PULL_NO;LL_GPIO_Init(GPIOB,&GPIO_InitStruct);嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)基本的GPIOHAL庫函數(shù)在stm32g4xx_hal_gpio.h中聲明如下:voidHAL_GPIO_Init(GPIO_TypeDef
*GPIOx,
GPIO_InitTypeDef
*GPIO_Init);GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef
*GPIOx,
uint16_tGPIO_Pin);voidHAL_GPIO_WritePin(GPIO_TypeDef
*GPIOx,uint_16GPIO_Pin,
GPIO_PinStatePinState);voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)注意:HAL沒有讀寫IDR和ODR的函數(shù),可以使用宏定義或直接讀寫寄存器嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(1)初始化GPIOvoidHAL_GPIO_Init(GPIO_TypeDef
*GPIOx,
GPIO_InitTypeDef
*GPIO_Init);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★GPIO_Init:GPIO初始化參數(shù)結(jié)構(gòu)體指針,初始化參數(shù)結(jié)構(gòu)體定義如下:
typedefstruct
{uint32_tPin; /*引腳*/
uint32_tMode; /*模式*/
uint32_tPull; /*上拉/下拉*/
uint32_tSpeed; /*速度*/uint32_tAlternate; /*復(fù)用功能*/
}GPIO_InitTypeDef;嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(1)初始化GPIOvoidHAL_GPIO_Init(GPIO_TypeDef
*GPIOx,
GPIO_InitTypeDef
*GPIO_Init);其中Pin和Mode分別在stm32g4xx_hal_gpio.h中定義如下:
#defineGPIO_PIN_0 ((uint16_t)0x0001) /*引腳0*/
……………………
#defineGPIO_PIN_15 ((uint16_t)0x8000) /*引腳15*/
#defineGPIO_PIN_All ((uint16_t)0xFFFF) /*所有引腳*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(1)初始化GPIOvoidHAL_GPIO_Init(GPIO_TypeDef
*GPIOx,
GPIO_InitTypeDef
*GPIO_Init);其中Pin和Mode分別在stm32g4xx_hal_gpio.h中定義如下:#defineGPIO_MODE_INPUT
0x00000000u/*浮空輸入*/#defineGPIO_MODE_OUTPUT_PP
0x00000001u/*通用推挽輸出*/#defineGPIO_MODE_OUTPUT_OD 0x00000011u/*通用開漏輸出*/#defineGPIO_MODE_AF_PP 0x00000002u/*復(fù)用推挽輸出*/#defineGPIO_MODE_AF_OD 0x00000012u/*復(fù)用開漏輸出*/#defineGPIO_MODE_ANALOG 0x00000003u
/*模擬輸入*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(2)GPIO讀引腳GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef
*GPIOx,
uint16_tGPIO_Pin);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★GPIO_Pin:GPIO引腳,取值是GPIO_PIN_0~GPIO_PIN_15返回值:GPIO引腳狀態(tài),GPIO引腳狀態(tài)在stm32g4xx_hal_gpio.h中定義如下:
typedefenum
{GPIO_PIN_RESET=0U,
GPIO_PIN_SET
}GPIO_PinState;注意:對于多個引腳,所有引腳都為低電平時返回GPIO_PIN_RESET(0)。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(3)GPIO寫引腳voidHAL_GPIO_WritePin(GPIO_TypeDef
*GPIOx,uint16_tGPIO_Pin,
GPIO_PinStatePinState);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★GPIO_Pin:GPIO引腳,取值是GPIO_PIN_0~GPIO_PIN_15
★PinState:GPIO引腳狀態(tài),取值是GPIO_PIN_RESET或GPIO_PIN_SET注意:對于多個引腳,所有引腳的狀態(tài)相同。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.1GPIOHAL庫函數(shù)(4)GPIO切換引腳voidHAL_GPIO_TogglePin(GPIO_TypeDef
*GPIOx,uint16_tGPIO_Pin);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★GPIO_Pin:GPIO引腳,取值是GPIO_PIN_0~GPIO_PIN_15嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)基本的GPIOLL庫函數(shù)在stm32g4xx_ll_gpio.h中聲明如下:ErrorStatusLL_GPIO_Init(GPIO_TypeDef
*GPIOx,
LL_GPIO_InitTypeDef
*GPIO_InitStruct);uint32_tLL_GPIO_ReadInputPort(GPIO_TypeDef
*GPIOx);uint32_tLL_GPIO_IsInputPinSet(GPIO_TypeDef
*GPIOx,
uint32_tPinMask);voidLL_GPIO_WriteOutputPort(GPIO_TypeDef
*GPIOx,
uint32_tPortValue);voidLL_GPIO_SetOutputPin(GPIO_TypeDef
*GPIOx,uint32_tPinMask);voidLL_GPIO_ResetOutputPin(GPIO_TypeDef
*GPIOx,uint32_tPinMask);嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(1)初始化GPIOErrorStatusLL_GPIO_Init(GPIO_TypeDef
*GPIOx,
LL_GPIO_InitTypeDef
*GPIO_InitStruct);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★GPIO_InitStruct:GPIO初始化參數(shù)結(jié)構(gòu)體指針,初始化參數(shù)結(jié)構(gòu)體定義如下:
typedefstruct
{uint32_tPin; /*引腳*/
uint32_tMode; /*模式*/
uint32_tSpeed; /*速度*/
uint32_tOutputType; /*輸出類型*/
uint32_tPull; /*上拉/下拉*/
}LL_GPIO_InitTypeDef;嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(1)初始化GPIOErrorStatusLL_GPIO_Init(GPIO_TypeDef
*GPIOx,
LL_GPIO_InitTypeDef
*GPIO_InitStruct);其中Pin、Mode和OutputType分別在stm32g4xx_ll_gpio.h中定義如下:
#defineLL_GPIO_PIN_0
GPIO_BSRR_BS0 /*引腳0*/
……………………
#defineLL_GPIO_PIN_15
GPIO_BSRR_BS15 /*引腳15*/#defineLL_GPIO_OUTPUT_PUSHPULL 0x00000000U /*推挽輸出*/#defineLL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT0 /*開漏輸出*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(1)初始化GPIOErrorStatusLL_GPIO_Init(GPIO_TypeDef
*GPIOx,
LL_GPIO_InitTypeDef
*GPIO_InitStruct);其中Pin、Mode和OutputType分別在stm32g4xx_ll_gpio.h中定義如下:#defineLL_GPIO_MODE_INPUT
(0x00000000U) /*輸入模式*/#defineLL_GPIO_MODE_OUTPUT
GPIO_MODER_MODE0_0
/*輸出模式*/#defineLL_GPIO_MODE_ALTERNATE
GPIO_MODER_MODE0_1/*復(fù)用模式*/#defineLL_GPIO_MODE_ANALOG
GPIO_MODER_MODE0
/*模擬模式*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(1)初始化GPIOErrorStatusLL_GPIO_Init(GPIO_TypeDef
*GPIOx,
LL_GPIO_InitTypeDef
*GPIO_InitStruct);返回值:錯誤狀態(tài),錯誤狀態(tài)在stm32g4xx.h中定義如下:
typedefenum
{SUCCESS=0U,
ERROR=!SUCCESS
}ErrorStatus;嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(2)GPIO讀輸入端口uint32_tLL_GPIO_ReadInputPort(GPIO_TypeDef
*GPIOx);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG返回值:端口值(3)GPIO輸入引腳設(shè)置uint32_tLL_GPIO_IsInputPinSet(GPIO_TypeDef
*GPIOx,
uint32_tPinMask);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★PinMask:引腳屏蔽,取值是LL_GPIO_PIN_0~15或LL_GPIO_PIN_ALL返回值:引腳狀態(tài)(0或1)注意:對于多個引腳,所有引腳都為高電平時返回1。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(4)GPIO寫輸出端口voidLL_GPIO_WriteOutputPort(GPIO_TypeDef
*GPIOx,
uint32_tPortValue);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★PortValue:端口值(5)GPIO設(shè)置輸出引腳voidLL_GPIO_SetOutputPin(GPIO_TypeDef
*GPIOx,uint32_tPinMask);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★PinMask:引腳屏蔽,取值是LL_GPIO_PIN_0~15或LL_GPIO_PIN_ALL嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.3GPIO庫函數(shù)3.3.2GPIOLL庫函數(shù)(6)GPIO復(fù)位輸出引腳voidLL_GPIO_ResetOutputPin(GPIO_TypeDef
*GPIOx,uint32_tPinMask);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★PinMask:引腳屏蔽,取值是LL_GPIO_PIN_0~15或LL_GPIO_PIN_ALL(7)GPIO切換引腳voidLL_GPIO_TogglePin(GPIO_TypeDef
*GPIOx,uint32_tPinMask);參數(shù)說明:
★GPIOx:GPIO名稱,取值是GPIOA~GPIOG
★PinMask:引腳屏蔽,取值是LL_GPIO_PIN_0~15或LL_GPIO_PIN_ALL嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例系統(tǒng)包括STM32MCU(內(nèi)嵌SysTick定時器)、4個按鍵和8個LED,實現(xiàn)用按鍵控制LED顯示的流水方向,LED流水顯示,每秒移位1次,1s定時由SysTick實現(xiàn)。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:473.4GPIO設(shè)計實例74HC573的LE端為1時,Q端隨D端變化;LE端為0時,Q端不隨D端變化(鎖存數(shù)據(jù))。LED輸出時,首先通過PC8~PC15輸出數(shù)據(jù),然后LE輸出1,Q端變化,最后LE輸出0,鎖存數(shù)據(jù)。前頁
返回嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例PC8~PC15輸出0時LED點(diǎn)亮,輸出1時LED熄滅(負(fù)邏輯)。為了操作方便,LED通過D0~D7控制,并且1時LED點(diǎn)亮,0時LED熄滅(正邏輯),所以輸出時將LED取位反并左移8位,通過PC8~PC15輸出。嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)包括SysTick、按鍵和LED程序設(shè)計與實現(xiàn)3部分。(1)SysTick程序設(shè)計與實現(xiàn)HAL工程的HAL_Init()已將SysTick配置為1ms中斷,并在stm32g4xx_it.c的SysTick_Handler()中通過HAL_IncTick()實現(xiàn)uwTick加1。實現(xiàn)1s定時的步驟是:
①
在main.c中定義如下全局變量:
/*USERCODEBEGINPV*/
uint8_tucSec;/*秒計時*/
/*USERCODEENDPV*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)包括SysTick、按鍵和LED程序設(shè)計與實現(xiàn)3部分。(1)SysTick程序設(shè)計與實現(xiàn)②在stm32g4xx_it.c中定義如下變量:/*USERCODEBEGINSysTick_IRQn0*/staticuint16_tusTms;/*毫秒計時*/
externuint8_tucSec;/*秒計時*//*USERCODEENDSysTick_IRQn0*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)包括SysTick、按鍵和LED程序設(shè)計與實現(xiàn)3部分。(1)SysTick程序設(shè)計與實現(xiàn)
③在stm32g4xx_it.c的SysTick_Handler()中添加下列代碼:/*USERCODEBEGINSysTick_IRQn1*/if(++usTms==1000)
/*1s到*/{usTms=0;ucSec++;/*秒加1*/}/*USERCODEENDSysTick_IRQn1*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)(2)按鍵程序設(shè)計與實現(xiàn)按鍵程序包括按鍵讀取和按鍵處理兩部分,設(shè)計與實現(xiàn)步驟是:
①在gpio.h中添加下列函數(shù)聲明:
/*USERCODEBEGINPrototypes*/
uint8_tKEY_Read(void);/*按鍵讀取*/
/*USERCODEENDPrototypes*/嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)(2)按鍵程序設(shè)計與實現(xiàn)
②在gpio.c中添加下列代碼:
uint8_tKEY_Read(void)/*按鍵讀取*/
{
uint8_tucKval=0;
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{ /*B1按鍵按下(PB0=0)*/
HAL_Delay(10);/*延時10ms消抖*/
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
ucKval=1;/*賦值鍵值1*/
}
returnucKval;/*返回鍵值*/
}嵌入式設(shè)計與開發(fā)實訓(xùn)指導(dǎo)第3章通用并行接口GPIO23:09:47前頁
返回3.4GPIO設(shè)計實例3.4.1HAL庫函數(shù)軟件設(shè)計與實現(xiàn)(2)按鍵程序設(shè)計與實現(xiàn)③在main.c中定義如下全局變量:
/*USERCODEBEGINPV*/
uint8_tucSec;/*秒計時*/
uint8_tucKey,ucDir;/*按鍵值,LED流水方向*/
/*USERCODEENDPV*/④在main.c中添加下列函數(shù)聲明:
/*USERCODEBEGINPFP*/
voidKEY_Proc(void);/*按鍵處理
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 語音識別與自然語言處理融合-第1篇-深度研究
- 跨域網(wǎng)絡(luò)功能互操作-深度研究
- 裂解酶高效表達(dá)系統(tǒng)-深度研究
- 移動醫(yī)療與遠(yuǎn)程會診的發(fā)展趨勢-深度研究
- 跨平臺工具鏈研究-深度研究
- 腦機(jī)交互用戶體驗優(yōu)化-深度研究
- 膈疝基礎(chǔ)研究進(jìn)展-深度研究
- 監(jiān)理服務(wù)合同管理優(yōu)化-深度研究
- 護(hù)理信息化在慢性病管理中的應(yīng)用-深度研究
- 明清時期思想解放運(yùn)動-深度研究
- 白血病合并感染
- GB/T 18601-2024天然花崗石建筑板材
- 致病菌引起的食品安全事件
- 有機(jī)肥配施氮肥對玉米根系生長、氮素利用及產(chǎn)量和品質(zhì)的影響
- 2024年山西省中考語文試卷
- 《大學(xué)美育教程》第二單元-心靈的熏陶:審美活動
- 浙江省溫州市(2024年-2025年小學(xué)五年級語文)人教版期中考試(下學(xué)期)試卷及答案
- 數(shù)據(jù)要素白皮書(2024年)-中國通信標(biāo)準(zhǔn)化協(xié)會
- 2023年云南公務(wù)員錄用考試《行測》題
- 電子商務(wù)運(yùn)營(第二版) 課件 項目1 認(rèn)識電商運(yùn)營
- 冰淇淋店選址與競爭環(huán)境分析
評論
0/150
提交評論