面向庫文件函數(shù)的程序設(shè)計GPIO課件_第1頁
面向庫文件函數(shù)的程序設(shè)計GPIO課件_第2頁
面向庫文件函數(shù)的程序設(shè)計GPIO課件_第3頁
面向庫文件函數(shù)的程序設(shè)計GPIO課件_第4頁
面向庫文件函數(shù)的程序設(shè)計GPIO課件_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向庫文件函數(shù)的程序設(shè)計GPIO,06面向庫文件函數(shù)的程序設(shè)計-GPIO,面向庫文件函數(shù)的程序設(shè)計GPIO,本章內(nèi)容,STM32F10 x標(biāo)準(zhǔn)外設(shè)庫概述stm32f10 x.h分析建立基于庫文件函數(shù)的工程stm32f10 x_gpio.c函數(shù)調(diào)用,面向庫文件函數(shù)的程序設(shè)計GPIO,STM32F10 x標(biāo)準(zhǔn)外設(shè)庫概述,STM32F10 x標(biāo)準(zhǔn)外設(shè)庫是一個固件函數(shù)包,由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設(shè)的性能特征。還包括每一個外設(shè)的驅(qū)動描述和應(yīng)用實例。每個外設(shè)驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個器件的開發(fā)都由一個通用API(ApplicationProgrammin

2、gInterface應(yīng)用編程界面)驅(qū)動。,面向庫文件函數(shù)的程序設(shè)計GPIO,STM32F10 x標(biāo)準(zhǔn)外設(shè)庫文件結(jié)構(gòu),面向庫文件函數(shù)的程序設(shè)計GPIO,CMSIS架構(gòu),ARM公司于2008年11月12日發(fā)布了ARMCortex微控制器軟件接口標(biāo)準(zhǔn)(CMSIS:CortexMicrocontrollerSoftwareInterfaceStandard)。CMSIS是獨立于供應(yīng)商的Cortex-M處理器系列硬件抽象層,為芯片廠商和中間件供應(yīng)商提供了連續(xù)的、簡單的處理器軟件接口,簡化了軟件復(fù)用,降低了Cortex-M3上操作系統(tǒng)的移植難度,并縮短了新入門的微控制器開發(fā)者的學(xué)習(xí)時間和新產(chǎn)品的上市時間。

3、,面向庫文件函數(shù)的程序設(shè)計GPIO,CMSIS層結(jié)構(gòu),外設(shè)寄存器和中斷向量定義層,用戶,應(yīng)用程序代碼,面向庫文件函數(shù)的程序設(shè)計GPIO,CMSIS層結(jié)構(gòu),core_cm3.h,面向庫文件函數(shù)的程序設(shè)計GPIO,STM32F10 x標(biāo)準(zhǔn)外設(shè)庫文件結(jié)構(gòu),Libraries,面向庫文件函數(shù)的程序設(shè)計GPIO,啟動文件的選擇,startup_stm32f10 x_cl.s互聯(lián)型的器件,STM32F105xx,STM32F107xxstartup_stm32f10 x_hd.s大容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10 x_hd_vl.

4、s大容量的STM32F100 xxstartup_stm32f10 x_ld.s小容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10 x_ld_vl.s小容量的STM32F100 xxstartup_stm32f10 x_md.s中容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10 x_md_vl.s中容量的STM32F100 xxstartup_stm32f10 x_xl.sFLASH在512K到1024K字節(jié)的STM32F101xx,STM32F102xx,STM32F103

5、xx,STM32F103RBT6,面向庫文件函數(shù)的程序設(shè)計GPIO,core_cm3.h解析,內(nèi)核文件,定義了一些Cortex-M3的寄存器和一些函數(shù),包括NVIC,MPU,SCB,SysTick,Debug寄存器。8488:定義版本號90:包含stdint.h(數(shù)據(jù)類型定義)9799:定義_NVIC_PRIO_BITS110116:定義_I,_O,_IO120732:定義寄存器結(jié)構(gòu),寄存器位定義(CortexM3)7371812:函數(shù)定義,面向庫文件函數(shù)的程序設(shè)計GPIO,core_cm3.c解析,_ASMuint32_t_get_PSP(void):獲取進程堆棧指針PSP。_ASMvoid

6、_set_PSP(uint32_ttopOfProcStack):設(shè)置PSP。_ASMuint32_t_get_MSP(void):獲取主堆棧指針MSP。_ASMvoid_set_MSP(uint32_tmainStackPointer):設(shè)置MSP。_ASMuint32_t_REV16(uint16_tvalue):反轉(zhuǎn)半字中字節(jié)順序,如0 xABCD反轉(zhuǎn)后得到0 xCDAB。_ASMint32_t_REVSH(int16_tvalue):反轉(zhuǎn)字節(jié)順序,并做符號拓展。就是在_REV16函數(shù)得到的結(jié)果上再進行一次符號拓展。這兩個函數(shù)主要是方便進行大小端的切換。,面向庫文件函數(shù)的程序設(shè)計GPIO

7、,core_cm3.c解析,_ASMvoid_CLREX(void):清除由LDREX指令造成的互斥鎖。LDREX和STREX是Cortex用來實現(xiàn)互斥訪問,保護臨界資源的指令,LDREX執(zhí)行后,只有離它最近的一條存儲指令(STR,STREX)才能執(zhí)行,其他的存儲指令都會被駁回,而CLREX就是用于清除互斥訪問狀態(tài)的標(biāo)記。_ASMuint32_t_get_BASEPRI(void):獲取BASEPRI寄存器的值,優(yōu)先級號高于該寄存器的中斷都會被屏蔽(優(yōu)先級號越大,優(yōu)先級越低),為零時不屏蔽任何中斷。_ASMvoid_set_BASEPRI(uint32_tbasePri):設(shè)置BASEPRI的

8、值。_ASMuint32_t_get_PRIMASK(void):PRIMASK是一個只有一位的寄存器,置位時屏蔽絕大部分的異常中斷,只剩下NMI和HardFault可以響應(yīng)。_ASMvoid_set_PRIMASK(uint32_tpriMask):設(shè)置PRIMASK的值。,面向庫文件函數(shù)的程序設(shè)計GPIO,core_cm3.c解析,_ASMuint32_t_get_FAULTMASK(void):FAULTMASK也是一個只有一位的寄存器,為1時只有NMI才能響應(yīng),其他異常與中斷全部被屏蔽。_ASMvoid_set_FAULTMASK(uint32_tfaultMask):設(shè)置FAULTM

9、ASK的值。_ASMuint32_t_get_CONTROL(void):獲取CONTROL的值。寄存器CONTROL只有兩位。CONTROL0選擇特權(quán)級別,0為特權(quán)級,1為敵用戶級。CONTROL1用于選擇堆棧指針,0為MSP,1為PSP。_ASMvoid_set_CONTROL(uint32_tcontrol):設(shè)置CONTROL寄存器的值。BASEPRI,PRIMASK,F(xiàn)AULTMASK,CONTROL都只能在特權(quán)模式下被修改。,面向庫文件函數(shù)的程序設(shè)計GPIO,stm32f10 x.h分析,6597:定義CPU,選擇STM32F10X_MD99106:定義USE_STDPERIPH_

10、DRIVER,確定是否使用外設(shè)驅(qū)動庫。115121:定義HSE頻率。128:定義HSE啟動時間上限130:定義HSI頻率132143:定義固件函數(shù)庫版本號155159:定義MPU160:定義_NVIC_PRIO_BITS161:定義_Vendor_SysTickConfig,面向庫文件函數(shù)的程序設(shè)計GPIO,stm32f10 x.h分析,167472:定義中斷向量,數(shù)據(jù)類型IRQ_TYPE。478480:包含頭文件487517:定義新數(shù)據(jù)類型519524:定義狀態(tài)常量(枚舉)5421261:定義外設(shè)寄存器結(jié)構(gòu)體12721370:定義外設(shè)基地址13801453:定義外設(shè)寄存器指針14678286

11、:定義外設(shè)寄存器中的位82968298:根據(jù)是否定義USE_STDPERIPH_DRIVER決定是否包含stm32f10 x_conf.h。83048316:定義寄存器位操作函數(shù)。,面向庫文件函數(shù)的程序設(shè)計GPIO,system_stm32f10 x.c分析_時鐘設(shè)置,65:包含stm32f10 x.h106116:定義系統(tǒng)時鐘頻率(根據(jù)實際情況選擇)128:定義VECT_TAB_OFFSET148165:定義SystemCoreClock167:定義AHB預(yù)分頻數(shù)組1761080:定義函數(shù),面向庫文件函數(shù)的程序設(shè)計GPIO,system_stm32f10 x.c分析,externvoidSy

12、stemInit(void);設(shè)置系統(tǒng)時鐘(系統(tǒng)時鐘源、PLL倍頻因子、AHB/APBx的預(yù)分頻及其Flash)該函數(shù)在啟動后的復(fù)位中被調(diào)用。externvoidSystemCoreClockUpdate(void);更新系統(tǒng)內(nèi)核時鐘,當(dāng)系統(tǒng)內(nèi)核時鐘變化后必須執(zhí)行該函數(shù)進行更新,面向庫文件函數(shù)的程序設(shè)計GPIO,外設(shè)庫結(jié)構(gòu),misc.c/misc.hNVIC外設(shè)驅(qū)動,代替原來的stm32f10 x_nvic.c.stm32f10 x_adc.c/stm32f10 x_adc.hstm32f10 x_bkp.c/stm32f10 x_bkp.hstm32f10 x_can.c/stm32f10

13、x_can.hstm32f10 x_cec.c/stm32f10 x_cec.hstm32f10 x_crc.c/stm32f10 x_crc.hstm32f10 x_dac.c/stm32f10 x_dac.hstm32f10 x_dbgmcu.c/stm32f10 x_dbgmcu.hstm32f10 x_dma.c/stm32f10 x_dma.hstm32f10 x_exti.c/stm32f10 x_exti.hstm32f10 x_flash.c/stm32f10 x_flash.h,面向庫文件函數(shù)的程序設(shè)計GPIO,外設(shè)庫結(jié)構(gòu),stm32f10 x_fsmc.c/stm32f10

14、 x_fsmc.hstm32f10 x_gpio.c/stm32f10 x_gpio.hstm32f10 x_i2c.c/stm32f10 x_i2c.hstm32f10 x_iwdg.c/stm32f10 x_iwdg.hstm32f10 x_pwr.c/stm32f10 x_pwr.hstm32f10 x_rcc.c/stm32f10 x_rcc.hstm32f10 x_rtc.c/stm32f10 x_rtc.hstm32f10 x_sdio.c/stm32f10 x_sdio.hstm32f10 x_spi.c/stm32f10 x_spi.hstm32f10 x_tim.c/stm3

15、2f10 x_tim.hstm32f10 x_usart.c/stm32f10 x_usart.hstm32f10 x_wwdg.c/stm32f10 x_wwdg.h,面向庫文件函數(shù)的程序設(shè)計GPIO,文檔和庫規(guī)范,面向庫文件函數(shù)的程序設(shè)計GPIO,文檔和庫規(guī)范,PPP表示任一外設(shè)縮寫,例如:ADC。系統(tǒng)、源程序文件和頭文件命名都以“stm32f10 x_”作為開頭,例如:stm32f10 x_conf.h。常量僅被應(yīng)用于一個文件的,定義于該文件中;被應(yīng)用于多個文件的,在對應(yīng)頭文件中定義。所有常量都由英文字母大寫書寫。寄存器作為常量處理。他們的命名都由英文字母大寫書寫。外設(shè)函數(shù)的命名以該外設(shè)

16、的縮寫加下劃線為開頭。每個單詞的第一個字母都由英文字母大寫書寫,例如:SPI_SendData。在函數(shù)名中,只允許存在一個下劃線,用以分隔外設(shè)縮寫和函數(shù)名的其它部分。,面向庫文件函數(shù)的程序設(shè)計GPIO,常用函數(shù),PPP_Init根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP,例如TIM_Init。PPP_DeInit復(fù)位外設(shè)PPP的所有寄存器至缺省值,例如TIM_DeInit。,面向庫文件函數(shù)的程序設(shè)計GPIO,建立GPIO工程模版,1.建立目錄,面向庫文件函數(shù)的程序設(shè)計GPIO,建立一個GPIO工程模版,2.拷貝文件,.STM32F10 x_StdPeriph_Lib_V3

17、.5.0ProjectSTM32F10 x_StdPeriph_Templatestm32f10 x_conf.h,面向庫文件函數(shù)的程序設(shè)計GPIO,建立一個GPIO工程模版,3.建立工程“Project”“NewuVisionProject”,選擇在工程目錄的“V1Project”目錄下命名新建工程為“GPIO_LIB.uvproj”.CPU選擇窗口,選擇CPU為STMicroelectronics”“STM32F103103RB”;復(fù)制啟動文件對話框選NO,面向庫文件函數(shù)的程序設(shè)計GPIO,建立一個GPIO工程模版,3.建立工程“Project”“NewuVisionProject”,選擇

18、在工程目錄的“V1Project”目錄下命名新建工程為“GPIO_LIB.uvproj”.,面向庫文件函數(shù)的程序設(shè)計GPIO,面向庫文件函數(shù)的程序設(shè)計GPIO,建立一個GPIO工程模版,4.配置工程建立源程序組添加.c文件到源程序組配置output和list目錄配置包含文件目錄預(yù)定義變量,面向庫文件函數(shù)的程序設(shè)計GPIO,面向庫文件函數(shù)的程序設(shè)計GPIO,添加源程序到組,面向庫文件函數(shù)的程序設(shè)計GPIO,面向庫文件函數(shù)的程序設(shè)計GPIO,工程配置,面向庫文件函數(shù)的程序設(shè)計GPIO,工程配置,1.符號預(yù)定義:STM32F10X_MD,USE_STDPERIPH_DRIVER2.設(shè)置包含頭文件路徑

19、:所有包含.h文件的路徑,面向庫文件函數(shù)的程序設(shè)計GPIO,編輯空白main.c、編譯工程,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO.h分析,輸出速度定義輸入輸出類型定義初始化結(jié)構(gòu)體定義,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO.h分析,輸出速度定義輸入輸出類型定義初始化結(jié)構(gòu)體定義位狀態(tài)定義引腳定義引腳復(fù)用功能定義函數(shù)定義,面向庫文件函數(shù)的程序設(shè)計GPIO,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_DeInit例:關(guān)閉GPIOA時鐘GPIO_DeInit(GPIOA),面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_AFIODeInit例:關(guān)閉AFIO時鐘GPIO

20、_AFIODeInit();,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_Init例:設(shè)置PA2,PA3為推挽輸出,速度上限50MHz。GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_St

21、ructInit例:設(shè)置PA為初始狀態(tài)GPIO_InitTypeDefGPIO_InitStructure;GPIO_StructInit(,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_ReadInputDataBit例:讀取PB7輸入寄存器數(shù)據(jù)到變量k1unsignedcharK1;K1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_ReadInputData例:讀取PC輸入寄存器數(shù)據(jù)到變量ReadValueu16ReadValue;ReadValue=GPIO_ReadInputDa

22、ta(GPIOC);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_ReadOutputDataBit例:讀取PB7輸出寄存器數(shù)據(jù)到變量ReadValue。u8ReadValue;ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_ReadOutputData例:讀取PC輸出寄存器數(shù)據(jù)到變量ReadValueu16ReadValue;ReadValue=GPIO_ReadOutputData(GPIOC);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_SetB

23、its例:置位PA10,PA15GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_ResetBits例:復(fù)位PA10,PA15GPIO_ResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_WriteBit注:使用較少,可用GPIO_SetBits和GPIO_ResetBits代替,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_Write例:寫入0 x450f到PAGPIO_Write(GPIOA,

24、0 x450f);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_PinLockConfig例:鎖定PA0,PA1GPIO_PinLockConfig(GPIOA,GPIO_Pin_0|GPIO_Pin_1);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_EventOutputConfig例:選擇PC5作為事件輸出GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_EventOutputCmd例:使能PC6事件輸出GPIO_EventOut

25、putConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_PinRemapConfig例:GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);,面向庫文件函數(shù)的程序設(shè)計GPIO,GPIO函數(shù),GPIO_EXTILineConfig例:選擇PB8作為line8外部中斷源GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);,面向庫文件函數(shù)的程序設(shè)

26、計GPIO,GPIO函數(shù),GPIO_ETH_MediaInterfaceConfig例:,面向庫文件函數(shù)的程序設(shè)計GPIO,例1.流水燈,建立工程配置工程修改stm32f10 x_conf.h包含頭文件misc.h包含頭文件stm32f10 x_gpio.h包含頭文件stm32f10 x_rcc.h預(yù)定義宏STM32F10X_MD,USE_STDPERIPH_DRIVER,面向庫文件函數(shù)的程序設(shè)計GPIO,例1.流水燈,使用函數(shù)RCC_APB2PeriphClockCmd-使能GPIOA,GPIOB時鐘GPIO_Init-設(shè)置PA2,PA3,PB2為推挽輸出GPIO_SetBits,GPIO_

27、ResetBits-置位、復(fù)位IO引腳,面向庫文件函數(shù)的程序設(shè)計GPIO,程序設(shè)計,#includevoidDelay(volatileunsignedintnCount)/延時函數(shù)for(;nCount!=0;nCount-);intmain()GPIO_InitTypeDefGPIO_InitStructure;/*GPIODPeriphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);,面向庫文件函數(shù)的程序設(shè)計GPIO,程序設(shè)計,/*ConfigurePA2andPA3inoutputpushpullmode*/GPIO_In

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論