![硬石ys-f1pro開發(fā)板手冊hal庫_第1頁](http://file4.renrendoc.com/view/a9bd17114fd8fc05a3d0c9cbe665187c/a9bd17114fd8fc05a3d0c9cbe665187c1.gif)
![硬石ys-f1pro開發(fā)板手冊hal庫_第2頁](http://file4.renrendoc.com/view/a9bd17114fd8fc05a3d0c9cbe665187c/a9bd17114fd8fc05a3d0c9cbe665187c2.gif)
![硬石ys-f1pro開發(fā)板手冊hal庫_第3頁](http://file4.renrendoc.com/view/a9bd17114fd8fc05a3d0c9cbe665187c/a9bd17114fd8fc05a3d0c9cbe665187c3.gif)
![硬石ys-f1pro開發(fā)板手冊hal庫_第4頁](http://file4.renrendoc.com/view/a9bd17114fd8fc05a3d0c9cbe665187c/a9bd17114fd8fc05a3d0c9cbe665187c4.gif)
![硬石ys-f1pro開發(fā)板手冊hal庫_第5頁](http://file4.renrendoc.com/view/a9bd17114fd8fc05a3d0c9cbe665187c/a9bd17114fd8fc05a3d0c9cbe665187c5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
YS-F1Pro開發(fā)板開發(fā)手冊(HAL庫STM32入門系列技術: 話(硬石電 1117192426STM32Cube是一個全面的軟件平臺,包括ST產(chǎn)品的每個系列,(STM32Cube_F1是針對STM32F1系列STM32Cube硬件抽象層(HAL)和一套中間組件(RTOS,USB,FS,TCP等等。STM32Cube是由ST公司倡議,旨在減少開發(fā)負擔、時間和費用,為開(HAL外設的接口函數(shù)(USB以太網(wǎng)等復雜外設),代碼結構強壯,已通過CodeSonar認證。同時,HAL還集成了廣泛的例程,可以運行在不同意法半導體YS-F1Pro開發(fā)板是硬石團隊研發(fā)的針對STM32F103的綜合性實驗測試平臺,開發(fā)板幾乎囊括了所有的外設,這對新手入門是非常好的學臺,開發(fā)板幾乎所有采購來著嘉立創(chuàng)平臺,質量有保證,這與還是有很最終掌握STM32的基本編程方法,學會將STM32CubeMX應用到自己DIY應用YS-F1ProSTM32的知識也就那如果有原作者認為我們不能您的著作內(nèi)容,請務必們,我們會把本文檔參考大量文檔而編寫完成,部分內(nèi)容可能直接網(wǎng)絡文檔,所以在們會虛心求教,我們會根據(jù)情況本店模塊以表示我們的誠意。(一 硬件設 第1 YS-F1Pro開發(fā)板硬件設 YS-F1Pro開發(fā)板硬件資 YS-F1Pro開發(fā)板跳帽配置說 YS-F1Pro開發(fā)板IO分 第2 YS-F1Pro開發(fā)板原理圖詳 微控制 FSMC—擴展SRAM和TFT液 擴展 LCD液 電源管 STM32F103供 開發(fā)板供 SWD和ISP接 SWD接 ISP方 數(shù)據(jù)設 串行 串行 SD USB從設備(USB CAN通 紅外接收2.4G無線模 W5500以太網(wǎng)模 電機模 步進電 舵 直流電 AD轉 其他功能電 LED燈電 獨立按 電容式按 蜂鳴 溫濕度傳感器接 頭接 所有 第3 3.5寸液晶模組電路設 液晶顯 電阻觸摸實 (二 軟件設 第4 HAL庫介 STM32軟件編 HAL庫是什 HAL庫發(fā)展趨 HAL庫特 第5 STM32CubeMX安裝及使 STM32CubeMX使用CubeMX新建工 第6 KEILv5和IAR軟件使 KEILv5軟件使 IAR軟件使 第7 寄存 寄存器定 微控制 內(nèi)部總 器映 位帶操 外 時鐘和復 復 時鐘 第8 Cortex-M3內(nèi) CM3內(nèi)核簡化模 寄存 寄存器應用分 第9 GPIO介 GPIO相 LED燈硬件設 GPIO外設結構 GPIO編程流程分 流水燈代碼實 蜂鳴器控 蜂鳴器驅動電路設 蜂鳴器控制代碼實 第10章工程文件結構和復位啟 例程文件結 啟動代 復位啟動流 第11章GPIO—按鍵輸入掃 按鍵輸入硬件設 按鍵掃描編程流程分 按鍵輸入掃描代碼實 第12章EXTI—按鍵中斷輸 NVIC寄存 中斷優(yōu)先級分 優(yōu)先級分 NVIC相關函 中斷配置實 EXTI功能框圖分 按鍵中斷編程流程分 按鍵中碼實 第13章USART—RS-232串口通 串口通信協(xié) 物理 協(xié)議層 STM32的USART簡 使用CubeMX軟件生成USART工 USART結構 編程要 USART代碼實 第14章USART-指令控 USART的調試應 使用CubeMX生成工 編程要 USART串口指令代碼實 第15章DMA—直接內(nèi)存 DMA功能框 DMA外設結構 DMA編程流程分 內(nèi)存數(shù)據(jù)拷貝代碼實 第16章DMA-USART1接 DMA器到外設模 使用CubeMX軟件生成工 編程流程分 DMA器到外設代碼實 第17章SysTick—系統(tǒng)滴答定時 SysTick介 相關寄存器介 SysTick編程流程分 SysTick實現(xiàn)定時代碼實 第18章TIM-基本定時 基本定時器簡 基本定時器功能框 TIM6&TIM7編程流程分 TIM6&TIM7基本定時代碼實 第19章TIM-高級控制定時 高級控制定時 輸入捕獲模 輸入模 強置輸出模 輸出比較模 模 互補輸出和死區(qū)插 在外部事件時清除OCxREF信 產(chǎn)生六 輸 單脈沖模 編接口模 與霍爾傳感器的接 TIMx定時器和外部觸發(fā)的同 高級控制定時器外設結構 高級控制定時器生 編程流程分 高級控制定時器生 代碼實 第20章TIM-通用定時器(電容按鍵 電容按鍵原 電容按鍵硬件設 STM32Cube生成工 觸摸按鍵外設結構 觸摸按鍵編程流程分 觸摸按鍵代碼實 第21章TIM-通用定時器(呼吸燈 呼吸燈功能實 使用CubeMX軟件生成代 呼吸燈編程流程分 呼吸燈代碼實 第22章ADC-電壓STM32ADC介 DMA傳輸在ADC中的應 ADC外設機構體分 ADC編程流程分 基于DMA傳輸?shù)亩嗤ǖ繟D轉換代碼實 雙ADC慢速交叉模式代碼實 第23章DAC-電壓輸 DAC簡 使用CubeMX生成DAC正弦波工 DAC外設結構體分 正弦波輸出代碼實 可調電壓輸出代碼實 第24章LCD-液晶顯 LCD簡 LCD控制器簡 FSMC簡 使用CubeMX生成工 FSMC外設結構 LCD編程流程分 LCD顯示代碼實 第25章LCD顯示中英文(字模在內(nèi)部 ASCII編 字 制作字 使用CubeMX生成工 LCD顯示字符及漢字編程流程分 LCD顯示字符代碼實 LCD顯示漢字代碼實 第26章FSMC-外部SRAM實 SRAM簡 使用CubeMX生成工 FSMC-外部SRAM外設結構 FSMC-外部SRAM編程流程分 FSMC-外部SRAM代碼實 FSMC-擴展SRAM內(nèi)存管理代碼實 (一) YS-F1Pro開發(fā)板硬件設YS-F1Pro開發(fā)板YS-F1Pro1-11-2圖1-1YS-F1ProYS-F1ProSTM32F103ZET6這個控制器的內(nèi)STM32F103的內(nèi)部資源,都可以在此開發(fā)板上圖1-2YS-F1ProYS- 開發(fā)板跳帽為盡可能發(fā)揮STM32F103ZET6這顆微控制器的性能、提供的接口,開發(fā)板設計使用了跳帽選擇實現(xiàn)不同的功能,具體情況參考圖1-3和表格1-1:圖1-3表格1-1 1CH340GUSART1CH340G2PB0PG6ULN2003PG6ULN2003PD3與頭接口有共345左邊:RS-485右邊:RS-2326W5500VS1053、2.4G無線需要W55007YS-F1ProIOYS-F1ProSTM32F103ZET61-表格1-2YS-F1Pro開發(fā)板IO選連接藍牙HC-05、GPS、GSM模塊選連接藍牙HC-05、GPS、GSM模塊PB2-78PC14-9PC15-OutputEnable)Write12345圖1-4YS-F1Pro第2章YS-F1Pro微控制STM32F103ZETT6擁有的資源包括:64KBSRAM、512KBFLASH、2時器、4個通用定時器、2個高級定時器、2DMA控制器(12個通道、3SPI2IIC5個串1USB1CAN312ADC112DAC、1SDIO接口、1FSMC接口以及112IO口。(GPIO2-1,還有一部分是電源引腳(屬于電源模塊部分2-圖2-1STM32F103ZET6別對于把SWD接口功能引腳做為模塊功能引腳時特別注意需要關閉的JTAG和SWD功能。STM32F103有多種啟動模式可以選擇。啟動模式理解是:微控制器允許從理解,比如,大廳對應區(qū)0,存放了一個房號,這個房號就是由BOOT0和BOOT1引腳決定的;房間1對應內(nèi)Flash2RAM,房間3對應系統(tǒng)開發(fā)板默認通過兩個10K歐的電阻把BOOT0和BOOT1引腳都拉低Flash2-2圖2-2這里需要需要注意的一點,BOOT0BOOT1引腳是有可能被拉高為高電平的,因為這里有10K歐電阻的存在,后面在模塊電路會用到BOOT0引腳。我們需要為STM32F103提供一個時鐘源,一般使用8MHz的無源石英晶振,見。實際上,STM32F103內(nèi)部有一個主時鐘源,也為8MHz,但一般我們不年歷)還需要提供32.768KHz的時鐘源。電路設計見圖2-3。圖2-32-圖2-4STM32F103ZET6NRESET為低電平時,CPU處R6C5RC復位電路。當系統(tǒng)上電時,C50,CPU處于復位狀態(tài)VDD(3.3V)電源通R6C5充電C5的電壓升CPU的高電平門檻電壓時,CPU退出復位狀態(tài)轉入運行狀態(tài)。在設計電路時,需要選擇適當?shù)腞值和C值,以保證NRESET低電平持續(xù)時間滿足CPU復位最小脈寬的要求。(FSMCFlashcontroller所有的外部器共享控制器輸出的地址、數(shù)據(jù)和控制信號,每個外部設備SRAMStaticRAM的縮寫,它是一種具有靜止存取功能的內(nèi)存,不需這是和Flash最大的區(qū)別。YS-F1Pro開發(fā)板板載1片1MX16的靜態(tài)器(1M問模式。電路設計見圖2-5。圖2-5擴展2-表格2-1SRAM高字節(jié)控制(I/O8~低字節(jié)控制(I/O0~A0~I/O0~LCD液STM32F103ZET6沒有內(nèi)置LCD控制器,因此需要選用帶控制器的XPT2046TSC2046STM32F103ZET6SPISPI接口資源緊張我們使用普通的IO接口模擬SPI通信時序時序與TSC2046正常通信,實際測試觸摸效果并沒有因為使用模擬SPI時序而影響。TSC2046具有中斷輸出口線,當觸摸屏被按壓時PENIRQ口線輸出低電平。2-6圖2-6TFT2-表格2-2STM3212觸摸從機輸34觸摸從機輸56觸摸時鐘7~LCD_DB0~電源管STM32F103供則是通過一個電感后與3.3V連接,參考圖2-7。圖2-7STM32F103ZET6開發(fā)板供開發(fā)板不同模塊可能需要的電源電壓有+5V和+3.3V兩種。5V電源可以有兩MINIUSBUSB線5V電壓,這種方法非常方便,通常都是使用這種方法的,該最大可輸出3A電流,驅動力十足,一般只有在開發(fā)板接上很多模塊才要這種供電方法。3.3V電源則是利用AMS1117-3.3從5V電源轉換得到。電路設計見圖2-8。其中,D6SMAJ5.0A5V外圖2-85V3.3VSWD和ISP接SWD接JTAGARM20SWD接口只6個引腳。YS-F1Pro開發(fā)板僅支持SWD調試接口JTAG接口,這樣JTAG其余的功能引腳可以用作普通的GPIO使用。SWD接口調試接口和原理圖見圖2-9圖2-9SWDRESET#是STM32的硬件復位引腳。仿真器(比如J-Link和ST-Link仿真于大多數(shù),我們還是建議在調試口中增加RESET引腳。電的。對于J-Link仿真器,是必須的,因為J-Link仿真器內(nèi)部的電平轉換芯ST-Link仿真器,這個電源引腳可以不接,因缺省就是3.3V的。JTMS/SWDIO(PA13)、JTCK/SWCLK(PA14SWD調試接口的數(shù)圖設計了一個ST-LinkV2仿真器,實物圖和開發(fā)板連接圖見圖2-10。圖2-10ST-Linkv2JTAG轉成與我們開發(fā)板匹配的準,即功能引腳排序可以自行設計。實物連接見圖2-11。圖2-11ST-Linkv2JTAGSWD轉換板就可以了,僅支持SWD模式。另外我們還提供了把我們的ST-Linkv2仿真器轉換成標準的JTAG接口的轉換方案,不過僅支持SWD模式,實物連接參考圖2-12,注意這里使用的紅圖2-12硬石STLinkv2轉JTAG接ISP方STM32F103支持ISP(InSystemProgram)程序,電路設計見圖2-13,ISP電路使用到CH340G,它是一個USB轉串口IC,這里使用STM32的當STM32F103被設置為從系統(tǒng)代碼啟動后,通過通信設定后,可以接收USART1數(shù)據(jù)更新內(nèi)部Flash內(nèi)容,這樣達到程序目的,當再次從內(nèi)部Flash啟動時就0)STM32F1032-13中下方把BOOT0拉高,這樣STM32F103就可以進入ISP模式,注意這里是可以進定啟動模式,所以現(xiàn)在需要讓STM32F103進行一次復位,這時就要看DTR#引腳的功能了。當DRT#為高電平時Q1三極管導通,原本RTS#引腳就為低電平,Q1導通后U4的第2引腳(標識為“Z”)也是低電平,而U4是74HC1G66GW,實際上低電平,此時STM32F103進入復位狀態(tài)。74HC1G66GW在這里起到系統(tǒng)上電后延時RTS#引腳信號對RESET#引腳的好了,在成功復位之后就可以需要把DTR#引腳拉高,此時RESET#引腳也被拉高,現(xiàn)在ISP軟件就可以對STM32F103程序。等程序完之后,RTS#BOOT0引腳為低電平,這樣等一切就緒之后,在復位一下STM32F103就可以從Flash啟動,并運行新程序。圖2-13ISP接數(shù)據(jù)設開發(fā)板提供多種數(shù)據(jù)方式,有串行Flash、EEPROM、SD卡USB串行128Mbit(16M字節(jié))Flash,型號為W25Q128FVSIG,它掛載在STM32F103SPI1接口上,電路設計見圖2-14。圖2-14串行2-表格2-3FlashSTM32片選(ChipSelect)CS由高變低時,被能。在命令傳輸器件,CE串行數(shù)據(jù)輸出(SerialData寫保護使能(Write3.3V電源,缺省是串行數(shù)據(jù)輸入(SerialData數(shù)據(jù)輸出到Flash時停止SPI通信通過上拉電阻接電源,SPI串行EEPROMSTM32I2CI2C2線I2CI2C主設備(STM32F103控制器,可以允許并接很多I2C從設備,這些設備必須具備唯一的地址以便于區(qū)分。1-10KI2C256個字節(jié),對于我們普通應用來說是足夠了的。當然,你也可以選擇換大容量的,因為我們的電路在原理上是兼容AT24C02~24C512全系列EEPROM芯片的。電路參考圖2-15。圖2-15AT24C02程序的時候要注意這點。I2C_SCLSTM32F103PB6上,I2C_SDAPB7I2CI2C通信方SDSTM32F103ZET6SDIOSD卡操作,YS-F1Pro開發(fā)板設電路設計參考圖2-16。圖2-16SDSD4SDIO12MB/S,非常適USB從設備(USBSTM32F1031USBUSBDevice設備。USBDevice接USBUSBUSBHost。使用這個接口,我們可以做U盤實驗(將開發(fā)板SD卡和串Flash虛擬2U盤可以通過電腦讀寫文件。另外,也可以利用該USB接口實現(xiàn)模擬串口效果。2-17USBD_ENBLE(PG13)Q3三極管導通是,USBDevice接口才有效。圖2-17USB數(shù)據(jù)傳輸—通信實STM32F103集成多個通口,包括5個UART、CAN通信等等,YS-F1Pro開發(fā)板充STM32F103性能,集成了多種形式的通信方法RS-232串口通信等等,并擴展了GSM()模塊和GPS模塊。USART2—WiFi、GSM、GPS、藍GSM模塊,NEO-7MGPSHC-05藍牙模塊,使用我們配套的杜體可閱讀1.2小節(jié)。圖2-18USART2YS-F1ProESP-12FWiFi模塊。ESP-12FWiFi模塊TensilicaL10632位微型MCU16位精簡模式,主頻支該模塊支持標準的IEEE802.11b/g/n協(xié)議,完整的TCP/IP協(xié)議棧。用戶可以USART3—RS-232、RS-RS-232RS-485在設備應用中非常普遍,開發(fā)板提供1RS-232(DB9連接器)1RS-485接口,見圖2-19。圖2-19USART3這里選擇SP3232E,實現(xiàn)標準RS-232電平轉換為STM32支持的TTL電平。RS-485接口情況類似,采用差分信號負邏輯,邏輯"0”PB2PB2RS-485發(fā)則是兩個偏置電阻,以保證靜默狀態(tài)時,RS-485總線維持邏輯1。RS-485是在RS-2321200MCAN通YS-F1ProSN65HVD230作為CAN驅動器。CAN5.08mm間距的接線端子引出,參考圖2-20。圖2-20CANCAN120CAN總線的一個中間節(jié)點使用,那么可能需要去掉這個120歐阻抗匹配電阻。CAN總線的數(shù)8腳的電1.2V時,收發(fā)器處于允許發(fā)送(也可以接收。R36電阻的阻值可以控制波形的斜率。阻值越小,波形的上升沿和下大波特率也是1Mbps。SN65HVD230的第4腳是接收到的信號輸出,為推挽輸出模式,因此和STM32相連時,無需外加上拉電阻。紅外接外接收管,電路設計見圖2-21。圖2-21該信號連接在PB1上。2.4G無線模無線通信在很多場合非常有用,YS-F1ProRFID2-22圖2-222.4GNRF24L012Mbps,傳輸距離最大可以到15米左右(空曠地,無干擾SPI3PB3是SWDSDO功能引腳,所以使用SPI3時必須禁用SWD接口功能。W5500W5500以太網(wǎng)模塊包含了一個硬件TCP/IP協(xié)議棧W5500以及一個含RJ-4(HR911105A。其中,W5500TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡易的互聯(lián)網(wǎng)連接方案.使用硬件邏TCP/IP協(xié)議棧的傳輸層及網(wǎng)絡層(如:TCP,UDP,ICMP,IPv4,ARP,IGMPPPPoE等協(xié)議32KRAM作為數(shù)據(jù)收發(fā)緩存。使得上位機主控,只需承擔TCP/IP應用層控制信息的YS-F1Pro開發(fā)板集成了一個整個W5500圖2-23W5500圖2-23中上半部分是W5500及其電路,W5500需要外接一個25MHz的晶振。W5500SPISTM32F103SPI3接口,W5500PF11,W5500中斷輸出引腳同樣通過一個跳線帽連接至PF9W5500的復位硬件與STM32F103的復位引腳直接在一起。VS10532-24,VS1053可以使用SPI通信進行通信,這里預留設計SPI3接口做為VS1053的通口,同時IO供使用,實際上預留的這個接口也是可以給其他模塊使用圖2-24VS1053這里要特PB3SWD接口SDO功能引腳以使SPI3時必須禁用SWD接口功能。電機模步進電系統(tǒng)。ULN2003A7組達林頓晶體管陣列和相應的電阻網(wǎng)絡以及鉗位二極絡構成,具有同時驅動7組負載的能力,為單片雙極型大功率高速集成電路。ULN2003一般用于小型步進電機驅動。YS-F1Pro開發(fā)板集成了一個ULN2003A和對應的接口,電路設計參考圖2-2528BYJ-4842、57類型步進電機是使用控制,類似直流電機的控制方法。圖2-25圖2-26舵作原理是由發(fā)出訊號給舵機,經(jīng)由電路板上的IC判斷轉動方向,再驅動子,并將磁鐵置於圓柱體內(nèi),這就是無馬達。舵機解剖圖參考圖2-27。圖2-27圖2-28里還需要注意,PA15JTAG接口引腳,在編程時注意禁JTAG接口功能,PA15直流電STM32STM32IO接口驅動能力動器從而來實現(xiàn)電機的旋轉控制。STM32一般是通過產(chǎn)生信號控制電機驅動器,所以需要用到STM32定時器功能。STM32F103ZET6有兩個高級控制定時器TIM1和TIM8,非常適合復雜的電機控制場合,YS-F1Pro開發(fā)板設計時將圖2-29。圖2-29ADAD轉換顧名思義就是模擬量轉換成數(shù)字量,實際應用中很多信號都是模擬STM32F103內(nèi)部集成了一個12位ADC是一種逐次近型模擬數(shù)字數(shù)字3.3V2^12=4096等分,在特定的輸入引腳上的某一電YS-F1Pro6AD轉換引腳,其中兩個引腳可以直接通過跳線帽短接至光敏電阻和精密電位器,電路設計參考圖2-30。圖2-30AD6ADADC1、ADC2ADC3其他功能電LED燈電YS-F1Pro3LED2-31圖2-31LEDLED1GND(0V)PB0引腳上(中間還JP3默認使用跳線帽短路PB0引腳為高電平(3.3V)的話,此時電路存在電壓差,電流從LED1燈正極流向負極再經(jīng)電阻流入GND,此時LED1PB0引腳的高或者低電平就可以自由控制LED1燈的亮滅。LED2LED3控制原理與LED1是相同的。獨立按以做為系統(tǒng)喚醒和TAMPER(侵入事件)功能,電路設計見圖2-32。圖2-32KEY1按鍵通過R43電阻接在PA0R44電平。KEY1按鍵可以做為系統(tǒng)喚醒功能。KEY2PC13R45作用后PC13慢慢上升自3.3V。KEY2按鍵可用于系統(tǒng)侵入事件功能。電容式按電容式觸摸感應按鍵的基本原理如圖2-33所示,當(手指)接觸金屬形成一個電容,感應電容量通常有幾pF到幾十pF。利用這個最基本的原理,在外圖2-33圖2-34蜂鳴YS-F1Pro2-35STM32I/O口是無法直接驅圖2-35別是GPIO連接此基極的時候,一般在GPIO所在IC剛剛上電初始化的時GPIO的內(nèi)部也處于一種上電狀態(tài),很不穩(wěn)定,容易產(chǎn)生噪聲,引起誤動(的電流由電阻流入地)當三極管開關作用時,ONOFF時間越短越好,OFF時,因晶體管中的殘留電荷引起的時間滯后,B,ER起到放電溫濕度傳感器接YS-F1ProDS18B20、DHT11、AM2302等型號溫度傳感器和溫濕度傳感器,電路設計參考圖2-36。圖2-36頭接塊,電路設計見圖2-37。圖2-37頭接 I2C1_SCLSCCB接口的控制時鐘(I2C接口類似I2C1_SDASCCB接口的串行數(shù)據(jù)輸入(出)端(I2C接口類似 FIFO_WENFIFO寫使能(1為允許CMOS寫入到FIFO,0為);FIFO_RCLKFIFO內(nèi)存時鐘控制端;FIFO_WRST—FIFO寫指針服務端;FIFO_OEFIFO關斷控制;FIFO_RRST—FIFO讀指針復位端。所有板把所有的GPIO通過排針引出,參考圖2-38。圖2-38GPIO 3.5寸液晶模組電路設為配合YS-F1Pro開發(fā)板做人機交互界面,我們專門設計了一個3.5寸液晶顯示模組,該液晶模組是320*480的真彩屏,驅動為ILI9488。該屏使用16bit總線模式,采用6個白色LED作為背光源。液晶顯3-18bit16bit數(shù)據(jù)并口,我們默認16bit接口,這樣才可以充分發(fā)stm32的優(yōu)勢。背光采用圖3-1電阻觸參考圖3-2。圖3-2(二) HAL庫介相信會來閱讀本文的同學都大概知道STM32微控制器是什么東西,本文討論的是STM32F103ZET6,實際上合適STM32F1系列。微控制器最簡單如PA0,輸出高電平,要怎么辦呢?編寫程序,然后編譯程序并到開發(fā)板運使用Keil或者IAR。ST為廣大使用者方便編程已經(jīng)提供了與硬件底層相關的C語言文件,節(jié)省了我們很多時間,我們重點是學習如何使用。STM32C語言編程可以是直接寄存器編程、標準固件庫編程以及新推出的HAL庫編程。直接寄存器編程是直接操作寄存器方法,比如語句:PB1引腳,0x0003對應PB0PB1GPIOBBSRR是什么東西,如果要展開講有太多了,簡單講就是ST已經(jīng)為我們定義好的東GPIOBBSRRSTM32編程的一個軟件函數(shù)庫,就是目前還流行的標準固件庫。使用如下語句,就可以控制PB0引腳輸出高電平:10年以來受廣大使用者推崇,就是現(xiàn)在還有大部分工程師、公司都在使用。不過,現(xiàn)實情況有點,ST已經(jīng)不再更新STM32標準固件庫,STM32F12013年后沒有正式發(fā)布更新版本,所以現(xiàn)在都停留在V3.5.0版本。現(xiàn)在ST全力推新的軟件編程庫:HAL庫,現(xiàn)在使用HAL庫實現(xiàn)PB0輸出高電平編程如下:用誰知道,總體來說HAL庫還是比較人性化的,并且配合STM32CubeMX軟件使用可以簡化編程。關于HAL庫詳細介紹請繼續(xù)看。HAL在解釋HAL庫之前,我們先認識STM32CubeMX(簡稱CubeMX,下同。它是ST推出的一種STM32設置和初始化C代碼的,界面見圖4-1。圖4-1STM32CubeMX就是CubeMX軟件是一個工具軟件,我們只要在上面簡單的點點點就可以生成我們的工作量,我們的工作重點放在項目任務的實現(xiàn)。CubeMX的使用介紹將會HAL的全稱是:Hardware 的函數(shù)庫,因為和HAL關,在這里,我們便稱為HAL庫。HAL庫是一個由ST基于硬件抽象層而設計的軟件函數(shù)包,它由程序、HAL庫,無需深入掌握底層硬件細節(jié),開發(fā)者就可以輕松應用每一個外API(applicationprogramminginterface應用編程界面)驅動,API對該驅動程序的結構,函數(shù)和參數(shù)名稱都進行了標準化。在ST的中,HAL庫是大勢所趨,在ST公司開發(fā)的部分中,只有HAL庫而沒有標準庫,從這點便可以說明,以后的目標是逐漸的轉向HALCubeMX生成代碼后,工程項目和初始化代碼已經(jīng)完成。簡便了很多,而且最重要的是ST的大力推廣,未來功能會更加的完善,CubeMX功能示意參考圖4-2。圖4-2CubeMXSTM32CubeMX現(xiàn)在已經(jīng)支持STM32的全系列,列出F1的系列,見圖4-3CubeMX支持的F1HALAPI類型(通用和擴展,API(應用程序編程接口)是一些預先定義的可以了?;蛘哒f更簡單的:比如別人已經(jīng)做好了一塊幾何處理程序,你想拿來APISTM32各系列產(chǎn)品的特有功能和擴展性能,提高HAL驅動的擴展性。圖4-4HAL庫的一個特點?;卣{函數(shù)由外設初始化、中斷事件、處理完成/出錯觸發(fā)回調。如圖4-5,此時,我們只需關心如何處理中斷和異常。圖4-5 STM32CubeMXSTCubeMX軟件可以直接ST,具體如下 /catalog/tools/PF259242圖5-1STCebeMX軟件 STM32CubeF1版本為V1.3.0,截圖見圖5-2:圖5-2STM32CubeF1界對于STM32F1系列版本應該是V1.3.1,ST以補丁形式給出,更新,該補丁地址:5-
圖5-3Patch_CubeFW_F1中,需要直接到我們云即可。 重點放在新建STCubeMX工程上。CubeMX5-4安裝支持
圖5-4CubeMXYS-F1Pro開發(fā)板型號為STM32F103ZET6,這里需要安裝STM32F1系列的支持包,見圖5-5。圖5-5STM32F103系列支持包安圖5-6圖5-7入見圖5-8。圖5-8STM32F103系 支持包導入完新建工首先選擇“NewProject”5-9圖5-9圖5-10,然后點擊OK按鈕,自動彈出工程設置界面。圖5-10選擇型發(fā)板,這里設置使用外部晶振,并把PB0、PG6和PG7三個引腳設置為輸出模式,見圖5-11。圖5-11圖5-12界面內(nèi)容與中的設置關。我們選擇“GPIO”選項,在彈出的界面中設置圖5-13GPIO同時,我們還可以查看與RCC圖5-14見圖5-15。圖5-15圖5-16堆棧大alloc或者malloc函設置使用KEILv5編譯器的,我們還提供了基于IAR編譯器的例程,設置見圖圖5-17設置工程名稱和路徑、KEILv5圖5-18設置工程名稱和路徑、IAR5-19圖5-195-20圖5-205-21圖5-21圖5-22KEILv5IAR5-23圖5-23IAR KEILv5和IAR軟件使KEILv5HAL庫例程中《YSF1_HAL-002GPIO-軟件的目標工具選項(OptionsforTarget“魔術棒”。圖6-1KEIL(DeviceCPU,編號2的區(qū)域是該CPU的一些描述。生設置CubeMX時,我們已選擇圖6-2(arget圖6-3RO(Flash地址,Size一欄輸入大小。HEXCubeMX6-4圖6-4(Listing圖6-5(User圖6-6讓編譯器能找到自己程序中包含的庫文件,其實這和我們在程序中添加#include<>的原理是一樣的。只不過是KEIL給我們一個更好的處理。在圖6-7C/C++編程,所以不必理會。Linker是連接選項卡,對于不是特別大或者特殊的程(DebugCubeMXSetting,進入硬件調試仿真設置界面6-9FlashDownload界面,主要是對燒寫程序的功能選項,CubeMX軟件生成的配置是沒有勾選ResetandRun的,在這里,勾選它是為了更方圖6-8圖6-9DebugCubeMXKEIL的在硬石HAL庫例程中,為了使整體的程序界面更加清晰,提高易讀性,以及方例程LEDBSP。具體工程組件、配置工具環(huán)境及管理書(管理工程項目bsp_led.c文圖6-10圖6-11編譯圖6-12成功實物IARIAREmbeddedWorkbenchforARMIARSystemsARM微處理器開發(fā)的一個集成開發(fā)環(huán)境(IARARM開發(fā)環(huán)境,IAR具有入在介紹IAR軟件的使用方法,是針對CubeMX生成的工程來進行,首先是打開.夾下,打開工程“YS-F1Pro”,文件類型是:IARIDEWorkspace。圖6-13IAR個工程。鼠標工程,選擇Options,如圖6-14。圖6-14進入Options第一步是進行的選擇,如圖6-15圖6-15圖6-16運行庫配置,如圖6-17所示,選擇None表示應用程序不運行庫;選擇Normal表示普通運行庫,其中沒有Locale接口和CLocale,不支持文件描述符,printfandscanf不支持多字節(jié)操作;選擇Full表示完整運置文件。這里一般選擇Full。圖6-17Full。GeneralOptions的后面還有兩個選項,因圖6-18圖6-19C/C++language2Charchar作為無符按無符號類型編譯的,因此運行庫時選擇Signed可能導致類型不匹配錯誤。選項情況如圖6-20。圖6-20Char(OPtimization圖6-211和編2所示。定義預處理符號在上一章節(jié)中已經(jīng)講解過。圖6-22Converter圖6-23nker,6-25、圖6-26。圖6-24器選圖6-25內(nèi)部FLASHRAM圖6-266-27圖6-27MAPMCU6-28圖6-28MAPger選擇ST-Link作為硬件調試設備。圖6-29設置,這里選擇“FLASHLoader”6-30圖6-30設ST-Link6-31ST-LinkOK,完成工程的配置。其量很大,可見CubeMX的優(yōu)勢之處。圖6-31ST-Link圖6-32點擊編譯按鈕,編譯完成后,點擊調試按鈕,出現(xiàn)如圖6-33所示調試界面,點擊全速運行,即可觀察到硬石開發(fā)板上LED呈流水燈亮暗。圖6-33 寄存寄存器(Register部件中,包含的寄存器有指令寄存器(IR)和程序計數(shù)器。在處理器的算術微控制微控制器是將微型計算機的主要部分集成在一個上的單微型計算不作區(qū)別,單片機就是微控制器,微控制器就是單片機。STM32F103ST公ARMCortex-M3內(nèi)核的微控制器。幾個章節(jié)內(nèi)容,見附件1)說明Cortex-M3內(nèi)核:Cortex‐M3處理器內(nèi)核是單片機的處理單元(CPU。完整的基于的MCU還需要很多其它組件。在制造商(比如ST、NXP、TI、Atmel等等)得到CM3處理器內(nèi)核的使用后,它們就可以把CM3內(nèi)核用在自己的硅片設計中,添加器,外設,I/O以及其它功能塊,框圖見圖7-1。不同廠家設計出的單片機會有不同的配置,包括器容量、類型、外設等都各具特色。圖7-1Cortex-M3ortex‐M3是一個32位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是32位的,寄存器是32位的,器接口也是2位的。M3采用了哈佛結構,擁有獨立的指令總線和數(shù)據(jù)總線,可以讓取指與數(shù)據(jù)并行不悖。這樣一來數(shù)據(jù)不再占用指令總線,從而提升了性能。為實現(xiàn)這個特性,CM3內(nèi)部含有好幾條總線接口,每條都為自己的應用場合優(yōu)化過,并且它們可以并行工作。但是另一方面,指令總線和數(shù)據(jù)總線共享同一個器空間(一個統(tǒng)一的器系統(tǒng)。換句話說,不是因為有兩條總線,可尋址空間就變成GB了。 比,圖7-1中的CM3內(nèi)核就相當于電腦的CPU,器相當于電腦的硬盤和內(nèi)存,內(nèi)部總線相當于電腦的CPU與主板連接的導線…儲器結構。處理器首先到程序指令器中程序指令內(nèi)容,后常是執(zhí)行。想了解什么是哈佛結構與依曼結構可以閱讀附件2M3是一個32位處理器內(nèi)核”,這樣的一個結果就是CM3可以非常方便的找到地址在4G大小之內(nèi)的地址,就是從0x 到0xFFFFFFFF。這個4G內(nèi)部總圖7-2。圖7-2STM32F1x7-2CM3STM32CPU;ICode、DCode、SystemCode分別叫指令總線、數(shù)據(jù)總線、以及系統(tǒng)總線,這三個對應圖7-1中根線,可以傳輸32位數(shù)據(jù)。ICodeFlashCM3FlashFlash7-1中存儲器的一種,叫做程序器,我們編寫程序后程序一般就是在FlashDCodeSystemCode連接在一個叫總線矩陣的東西上面,實際上,掛在總DMA、Flash接口、SRAM、FSMCAHB系統(tǒng)總線這幾個部件。這里的SRAM相當于電腦的內(nèi)存,屬于圖7-1中器的一種,叫做數(shù)據(jù)器,另外通過FSMC可以連接擴展SRAM,達到增加SRAM效果,就是添加一條DMA究竟是什么東西,在這里也沒打算細講,它的全稱是:Directmemoryaccesscontroller(直接器存取控制器知道它是個操DMAFlash空間上數(shù)據(jù)傳輸SRAM上,這個過程可以無CM3內(nèi)核的控制CPU是可以做其他運算工作的。關于DMA的其他內(nèi)容我們在后面會詳細講解。 器映性地址空間內(nèi),可的器空間被分成8個主要塊,每個塊為512MB,其他的”器映射見圖7-3,很多細節(jié)部分由半導體廠家自行定義。圖7-3Cortex-M3器映射預定STM32F10x系列器映射情況見圖7-4圖7-4STM32F1的器映射實通過把片上外設的寄存器映射到外設區(qū)就可以簡單地以內(nèi)存的方式來這些外設的寄存器,從而控制外設的工作。結果,片上外設可以使用C語言來操作。這種預定義的映射關系,也使得對速度可以做高度的優(yōu)化,而且對0到4GB,這些地址的存在使得我們編程變得統(tǒng)一化、簡單化。比如把 ~0x40010BFF總共0x3FF長度的地址空間分配給PortA即端口A,端口A可以實現(xiàn)STM32的最基本功能:控制引腳輸出高低電平,實際上端口A總共有16個引腳的,定義為PA0~PA15,每個引腳都可以單獨控制的。當然端口A現(xiàn)這么多復雜的功能,顯然就需要分配0x3FF長度空間給它用才行(實際上一般都是用不完的)。這樣,比如,我們直接編寫程序往0x 0x0001就可以使得PA0這個引腳輸出高電平了,如果寫入是0x0003就可以使得PA0和PA1都輸出高電平。為什么會這樣子呢?因為在STM32F103內(nèi)部硬 于GPIOA的BSRR(GPIOA_BSRR)”,它實際上就是0x 編寫程序時非常有用的,想象一下如果寫程序總得使用 這個數(shù)據(jù)寫的,在后面我們懂得時候自然會懂得真正的原理。位帶操CM3SRAM區(qū)的最低1MB范圍,第二個則是片內(nèi)外設區(qū)的最低1MB范圍,圖7-3見中有“Bitbandregion”RAM一樣使用外,它們還都識有“Bitbandalias”字。7-5圖7-5有了位帶操作支持后,我們望0x 這個地址寫入數(shù)據(jù)1,就可以實現(xiàn)對0x 地址上的第0位設置為1,同樣的望0x 數(shù)據(jù)1,就可以實現(xiàn)對0x 地址上的第1位設置為1,以此類推。bit_word_addr=bit_band_base+(byte_offsetx32)+(bit_number×bit_band_base:byte_offset:包含目標比特位的字節(jié)在位帶區(qū)的偏移值(字節(jié)數(shù)bit_number:目標比特位在字節(jié)中的位置在SRAM的 #pragmaroot_no_initu8 +(0x4000*32)+(0*4)= +(0x4001*32)+(3*4)= GPIOA的端口輸出數(shù)據(jù)寄存器(ODR)地址0x +(0x1080C*32)+(0*4)=外換器(ADC)、DMA控制器、串行通信(UART)、SDSDIO等等都屬于外CM37-2AHB系統(tǒng)總線的右下部分內(nèi)容都CPU或DMA控制器與外設,STM32F103支持的AHB總線最高頻率為72MHz。圖7-2SDIOAHB上之前,其他外設實際上是掛在APB1APB2總線上的,APB(AdvancedPeripheralBus,高級外設總線)是一種外圍總線,用于低帶寬的周邊外設之間的連接。其中STM32F103支持的APB1最高頻率36MHz,而APB2支持最高72MHzAHB的時鐘一般時鐘72MHz,那如何APB136MHz頻率呢?中間就是用來橋接器來實現(xiàn),功能類似電腦中的南橋、北橋,橋接器另外一個重要功能是位數(shù)的轉換,AHB32位的,但有些外設寄存器只有8位或者16位,這時就通過橋接器自動轉換。使用外STM32的重點內(nèi)容,本文檔大篇幅內(nèi)容就是講解每個外設的STM32F10x內(nèi)部外設類型和資源參數(shù)見圖7-6,希望下圖可能幫助你文件深刻連接STM32F10x。圖7-6STM32F10x器的每一位都對應不同的功能。CM332圖7-7STM32F103ZET6實物I/O是與外設緊密聯(lián)系的一個模塊,很多外設都有對應的功能通道引腳,比GPIO外設,STM32F103ZET6GPIOA,GPIOB…GPIOG7個GPIO模塊,每個都對應有16個IO,該有144個引腳,除了電源部分、時鐘部分引腳外,大部分引腳都是GPIO的啦,功能強大,擁有眾多外設,這樣PA9GPIO1的數(shù)據(jù)輸出引CM3內(nèi)核通過ICode從Flash程序,然后進行計算,計算過程根據(jù)程序出對應的動作。CM3CM3內(nèi)核會與SRAM之間有頻繁的數(shù)據(jù)傳送過程。時鐘和我們還是更加詳細的講解一次吧。STM32有一個外設:復位和時鐘控制(RCC)用復RCC_CSR寄存器中的復位標志位和備份區(qū)域中的寄存器NRST引腳上的低電平(外部復位窗口看門狗計數(shù)終止(WWDG復位獨立看門狗計數(shù)終止(IWDG復位軟件復位(SW復位以 在STM32F10xxx里,可以通過BOOT[1:0]引腳選擇三種不同啟動模表格7-1X0器01器11在系統(tǒng)復位后,SYSCLK4個上升沿,BOOT引腳的值將被鎖存。用戶可以通過設置BOOT1和BOOT0引腳的狀態(tài),來選擇在復位后的啟動模式。因為固定的器映像,代碼區(qū)始終從地址0x00000000開始(通過ICode和DCode總線),而數(shù)據(jù)區(qū)(SRAM)始終從地址0x20000000開始(通過系統(tǒng)總線訪問)。Cortex-M3CPU始終ICode總線獲取復位向量,即啟動僅適合于從代碼區(qū)開始(典型地Flash啟動)。STM32F10xxx微控制器實現(xiàn)了一個特殊的機制,系統(tǒng)可以不僅僅從Flash器或系統(tǒng)器啟動,還可以從內(nèi)置SRAM啟根據(jù)選定的啟動模式,主閃存器、系統(tǒng)器或SRAM可以按照以下方從主閃存器啟動:主閃存器被映射到啟動空間(0x0000000),但仍然能夠在它原有的地址(0x08000000)它,即閃存器的內(nèi)容可以在兩個地址區(qū)域,x 或x0000。從系統(tǒng)器啟動:系統(tǒng)器被映射到啟動空間(0x00000000),但仍然能夠在它原有的地址(0x1FFFF000)它。從內(nèi)置SRAM啟動:只能在0x20000000開始的地址區(qū)SRAM內(nèi)嵌的自舉程內(nèi)嵌的自舉程序(Bootloader)存放在系統(tǒng)區(qū),由ST在生產(chǎn)線上寫入,于通過可用的串行接口USART1對閃存器進行重新編程(ISP方式的可 圖7-8圖7-9時鐘使用STM32CubeMX7-10STM32F10x時鐘的生IWDG(獨立看門狗)、FLITFCLK(閃存器接口)時鐘、SYSCLK(系統(tǒng)時鐘)和USB時需要使用LSE(低速時鐘),該時鐘一般來源于外接的32.768KHz的晶振,正如YS-F1Pro開發(fā)板設計的。獨立看門狗只能使用內(nèi)的40KHz時鐘源LSIRC。FLITFCLK只能使用內(nèi)部的8MHz時鐘源HSIRC。是直接使用內(nèi)部的8MHz時鐘源HSIRC,顯然直接使用這個很浪費資源,本來可以跑72MHz的,現(xiàn)在拿來跑8MHz,所以這種一般都不會使用。第2種是直接我們需要外接72MHz的晶振,這個出于成本考慮,一般也不用。第3種是把外接時鐘源或者內(nèi)部8MHz時鐘源的2分頻接入到PLL(鎖相環(huán))倍頻得到8MHz72MHz8MHz的晶振時鐘源HSE而不會選擇內(nèi)部的HISRC,一個是出于穩(wěn)定性考慮,另外8MHz的晶振成USBPLLCLK11.5分頻得到,USB主時鐘輸STM32F10xMCO,可以選擇使能輸出時鐘脈率過50MHz。外設時鐘的配AHB總線頻率(HCLK)SYSCLK72MHz,所以一1分頻。I2S2I2S2HCLK的時鐘,F(xiàn)SMC、SDIO等等外設也是使用HCLK做為時鐘源。APB1APB2HCLKPCLK1(APB1總線頻率)36MHzPCLK2(APB2總線頻率)72MHz7-2中APB1DAC、I2C、USART2、USART3、SPI2/I2S、TIM2、TIM3等等,掛在APB2總線上的外設有ADC、USART1、TIM1、TIM8、GPIOX(A..G)、EXTI、AFIO等等。另外,ADCAPB2ADC支持的最高時鐘頻率為14MHz。 前面已經(jīng)介紹,Cortex-M3內(nèi)核是STM32F10x的CPU,那究竟CM3內(nèi)CM3內(nèi)核簡化模CM3CPU那么強大,但麻雀雖小五臟俱全,很多通信與CPUCPUCM38-18-1圖8-1CM3統(tǒng)用于系統(tǒng)當前運行狀態(tài);總線系統(tǒng)用于程序、數(shù)據(jù)傳輸,與上一章內(nèi)容都是相通的,其中MPU只有部分型號才擁有的。所以我們最需要分析的取指單CPU所能夠處理的全部指令的集合,也CPUCPU能夠運行什取值階段從器指令字節(jié),放到指令器(CPU中)中,地址為程序KeilIARC語言編寫可以實現(xiàn)項目要求的程載到STM32內(nèi)運行。這里的“可執(zhí)行文件”就是完成我們項目目的的指令及數(shù)據(jù)的集合。這里,Keil或者IAR軟件可以幫助C語言文件(*.c和*.h)以及部分必要的匯編文件(*.asm)STM32可以“識別”的語言文件,那我們把該文件到STM32內(nèi)就可以正確的運行,大致流程見圖8-2。圖8-2器CPU的指令集架構定義將數(shù)值解譯為指令。一部分的指(Opcode寄存器Cortex‐M3R0‐R158-3MSPPSP圖8-3Cortex‐M38-1表格8-1寄存 功記錄ALU標志(0標志,進位標志,負數(shù)標志,溢出標志除能所有的中斷——當然了,不可中斷(NMI)才不甩fault——NMI會“算術邏輯運算單算術邏輯單元ithmeicandloicunit)是能實現(xiàn)多組算術運算和邏輯運算的組合邏輯電路,簡稱ALU。它是處理器(U)的執(zhí)行單元,是所有處理器的組成部分,由"AndGate"(與門)和"rGate"(或門)構成的算術邏輯單元,主要功能是進行二位元的算術運算,如加減乘(不包括整數(shù)除法)。CM3內(nèi)核CM3ALU可以執(zhí)行定點或浮點(部分型號微控制器才可以)算術進行所需運算的CPU部件。數(shù)的,可見該ALU功能多強大。存器里可能會設置運算溢出(ArithmeticOverflow)標志。器接中斷控制在ARM編程領域中,凡是打斷程序順序執(zhí)行的事件,都被稱為異常Cortex‐M3在內(nèi)核水平上搭載了一顆中斷控制器——嵌套向量中斷控制器NVIC(NestedVectoredInterruptController)CPU對中斷的響應,特NVICCM3會自動定位一張向量表,并且根據(jù)中斷號從表中找出ISR的地址,然后跳轉過去執(zhí)行。中斷可:既可以優(yōu)先級低于某個閾值的中斷/異常[譯注8](設置BASEPRI寄存器),也可以全體(設置PRIMASK和FAULTMASK寄存器)。流水Cortex‐M333級分別是:取指,解碼和執(zhí)行,見圖8-4:
圖8-4其他指令將會被放棄,而處理器將從向量表的適當開始填充流水線。不論是執(zhí)行16位指令還是32位指令,PC時,會返回當前指令地址+4調試系一直以來,單片機的調試一直不是很突出的,很多簡單些的程序在開發(fā)使用仿真器,可以方便地實現(xiàn)這些基本的調試要求。在開發(fā)比較大的應用程序CM3內(nèi)核會有一點的了解的,CM3內(nèi)CPUCPU的寄存 晶體(tatr)控制輸出電流。與普通機械開關(如Relay、switch)不同,晶體管利用電訊號來控制自身的開,而且開速度可以常快,中的切速度可達Gz以的二極管、三極管、場效應管(MOS管)、可控硅(晶閘管)等。晶體管有時多指晶體三極管,結構示意見圖8-5。圖8-5非圖8-6Vi為高電平(即數(shù)字電路的“1”)時,Vo為低電平((即數(shù)字電路的“0”);Vi為低電平(即數(shù)字電路的“0”)時,Vo為高電平((即數(shù)字電路的圖8-7TTL8-8圖8-8TTL可以實現(xiàn)的電路效果與圖8-7是一樣的。與非現(xiàn)電路見圖8-9圖8-9與非門。圖8-98-108-11圖8-10圖8-11在上一章中有講到,CM3ALU是有與門、或門構成的,這樣我們具體見表格8-2:表格8-2鎖存鎖存器(ath)是一種對脈沖電平敏感的單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存。在數(shù)字電路中則可以記錄二進制數(shù)字信號“0”和“1所謂鎖存器,就是輸出端的狀態(tài)不會隨輸入端的狀態(tài)變化而變化,僅在有鎖存信號時輸入的狀態(tài)才被保存到輸出,直到下一個鎖存信號到來時才改變。S2和32S鎖存器,實際應用中一般會進行各種改造和擴展,至少會加一個輸入端作為控制信號,見圖8-14和圖8-15,該信號有效時,鎖存器能持續(xù)地輸入、輸出數(shù)據(jù)。其控制信號一般為高電平,因此鎖存器是一種對脈沖電平敏感的單元電路,可圖8-12R-S圖8-13R-S圖8-14圖8-15鎖存器的最主要作用是緩存,除了特殊用途如異步電路或很簡單的邏輯,其他場合已經(jīng)很少直接應用鎖存器,因為其結構簡單而且對電平敏感,不適合在主流的對時鐘敏感的集成電路中應用。一般都是使用以鎖存器為基礎的觸發(fā)器或寄觸發(fā)在實際的數(shù)字系統(tǒng)中往往包含大量的單元而且經(jīng)常要求他們在同一時刻同步動作為達到這個目的在每個單元電引入一個時鐘脈(CLK)作為控制信號,只有當CLK到來時電路才被“觸發(fā)”而動作,并根據(jù)輸入信號改變輸出狀態(tài)。把這種在時鐘信號觸發(fā)時才能動作的單元電路稱為觸發(fā)器,以在R-S鎖存器的前面加一個由兩個與門和一個非門構成的附加電路D觸發(fā)器,見圖8-16圖8-16D當時鐘脈沖CP為1時,讀入輸入端D的數(shù)據(jù)并傳至輸出CP為0時,根據(jù)與門“只要有一個輸入端為0則輸出為0”的特性,輸入端D的數(shù)據(jù)被與門了,無法到達輸出端,不管輸入D怎樣變化,Q端輸出值都保持不變,只有等到下一個CP高電平到來時,才會把當前的D值送出。這樣就實現(xiàn)了延遲輸出CP為1時,能觸發(fā)后面的鎖存器把D的值暫時鎖存起來,這也正是觸發(fā)器名詞中“觸發(fā)”的含義,這正是觸發(fā)器與鎖存器的聯(lián)系與區(qū)別:觸發(fā)器利用了鎖存器的保存原理,但是加上了觸發(fā)功能,可以控制保存的時間。寄存起來就能構成一個n位二進制碼的寄存器,圖8-17為一個4位寄存器設計圖8-174寄存器應用分序要求,比如ALU中的累加器ACC。而接口寄存器可以同時被內(nèi)部電路和外部電路編程用戶所熟知,比如控制端口A輸出高電平的GPIOA_BSRR。 這些地址空間具體有什么意義呢?這個由微控制器決定的,通過微控制器的技術手冊都是可以找到資料的,這些空間一般都是寄存器。我們來看STM32F103ZET6對0x ~0x40010BFF這段空間的使用,見表格8-3:表格8-3GPIO表格第1列是地址偏移,對于GPIOA來說址就是0x GPIOB來說址為0x40010C00,這與圖7-4不同外設的器映射地址是想對應的,使用地址偏移表示好處就是不用重復寫,我們知道STM32F103ZET6芯GPIO,而不用為每個GPIO建立一個表格。對GPIOA來說,地址偏移0x04,即 ,定義為GPIOA_CRH寄存器,該寄存器總共有32位(STM32的寄存器都是32位的),每一位都有特定的功能用途(可能有些其他寄存器位是保留1位,這兩位組合決定著PA8這個引腳的模式,具體看表格8-4:表格8-445PA923位這里再次強調一點,這些位的具體功能定義是有STM32F103ZET6決定的,出廠之前就已經(jīng)設計好的,具體在STM32F103ZET6技術手冊是可以查在用軟件編程時我們可以直接給0x 式,參考代碼8-1:代碼8-10101volatileuint32_t //定義一個中間變量,用于保存原先寄存器03//這里 04//通過指針運算符*(即下面語句第一個“*”)可以得到該地址實際存放的數(shù);)); //))=reg;//把新reg值保存到地把上面代碼編譯并到開發(fā)板運行后,就可以把GPIOA_CRH寄存器的010102))=1;//使用位帶操作實現(xiàn)與上面代碼相同功01reg=(*((01reg=(*((uint32_t 01#define03reg=(*((uint32_t*)我們根本不知體什么意思,因為我們不知道地址0x 01#define03reg=(*((uint32_t*)GPIOAHAL庫代碼形些累贅。所以ST為推行他們的就專門設計了一個軟件函數(shù)庫,方便使用者編寫程序——HAL庫。8-3GPIO總共有GPIOG都擁有獨立的這7個寄存器,每個寄存器的地址都是不同的。代碼8-2GPIO0101 03typedefstructIOuint32_tCRL;GPIO端口配置低寄存器0~7引IOuint32_tCRH;GPIO端口配置高寄存器8~15引IOuint32_tIDR;GPIO端口輸入數(shù)據(jù)寄存IOuint32_tODR;GPIO端口輸出數(shù)據(jù)寄存IOuint32_tBSRRGPIO端口位設置/清除寄存IOuint32_tBRR;GPIO端口位清除寄存IOuint32_tLCKRGPIO端口配置鎖定寄存11}代碼8-3GPIO#define#define#define#define#define#define#define#define#define10#define#define#define#define#define#define#define#define)//外 (PERIPH_BASE+(APB2PERIPH_BASE+(APB2PERIPH_BASE+0x0C00)(APB2PERIPH_BASE+0x1000)(APB2PERIPH_BASE+0x1400)(APB2PERIPH_BASE+0x1800)(APB2PERIPH_BASE+0x1C00)(APB2PERIPH_BASE+0x2000)//////////////0x0x((GPIO_TypeDef*GPIOB_BASE//GPIO_TypeDef類型((GPIO_TypeDef*GPIOC_BASE//GPIO_TypeDef類型((GPIO_TypeDef*)GPIOD_BASE//GPIO_TypeDef類型((GPIO_TypeDef*)GPIOE_BASE//GPIO_TypeDef類型((GPIO_TypeDef*)GPIOF_BASE//GPIO_TypeDef類型))強制轉換成這里把GPIOA定義為GPIOA_BASE,GPIOA_BASE就是端口A的址,這在圖7-4就可以清楚看到;然而單單把GPIOA定義為端口A的址看不到特殊的地方,真正高能的地方是(GPIO_TypeDef*)這個前綴的作用,它把GPIOA強制單的就把GPIO_TypeDef結構體成員與寄存器地址一一對應起來,比如語句GPIOA->CRH實際等效于(*((uint32_t*)0x GPIOA->BSRR代碼8-401#define/*Pin002#define/*Pin103#define/*Pin204#define/*Pin305#define/*Pin406#define/*Pin507#define/*Pin608#define/*Pin709#define/*Pin810#define/*Pin911#define/*Pin1012#define/*Pin1113#define/*Pin1214#define/*Pin1315#define/*Pin1416#define/*Pin1517#defineGPIOPIN((uint16/*Allpinsselected1919#define ((uint32_t)0x0000FFFF)/*PINmaskforasserttestGPIOA->BSRR=代碼8-5HAL////引腳狀態(tài)枚typedefenumGPIO_PIN_RESET0,//清//置05}07函數(shù)功能:::***:{if(PinState!=GPIO_PIN_RESET)GPIOx->BSRR=}else 23//函數(shù)使用方法示這里先重點看HAL_GPIO_WritePin函數(shù),它有三個形參,第一個是用于指定端口引腳,一般用GPIO_PIN_0、GPIO_PIN_1等等賦值;第三個是想要HAL_GPIO_WritePin函數(shù)只是HAL庫里邊一個最最簡單的函數(shù)了,HAL庫還HALHAL第9章GPIO細分析代碼實現(xiàn)方法。首先,我們需要解釋STM32的GPIO外設,同時解決上一章GPIOGPIO(GeneralPurposeInputOutput)STM32的一種外設,與大部分引腳直接掛鉤,STM32F103ZET6總共有7個GPIO外設,定義16個引腳PA0..PA15、PB0..PB15等等,總共112GPIO引腳,這些引腳在的實際發(fā)布情況參考表格1-2。GPIO最簡單的功能是輸出高低電平,GPIO還可以被設置為輸入功能,用于GPIO共用的,具體引腳功能可以通過軟件編程設置對應的寄存器內(nèi)容實現(xiàn)的,STM32F10xGPIO的基本結構見圖9-1。圖9-1GPIO圖中最右邊的“I/O引腳”就是實物的引腳,焊接時用到。保護二極管用注意保護,必要時設計引腳保護電路。做為普通的輸入引腳,I/O引腳的電平通過觸發(fā)器后保存在輸入數(shù)據(jù)寄存器內(nèi)。圖中下半部分是引腳輸出功能,通過一個PMOS管和一個NMOS管組合而GPIO78-3,每個寄存器每一位基文).pdf》(附件3)。為實現(xiàn)不同工作條件要求,GPIO8GPIOx_CRLGPIOx_CRH9-表格9-1GPIOGPIOx_CRLGPIOx_CRH1000輸入浮GPIOx_CRLGPIOx_CRH寄存器CNF[1:0]位設置01MODE[1:0]下拉。浮空輸入模式下GPIO結構中信號流向見圖9-2。圖9-2I/O引腳信號接入到施密特觸發(fā)器的輸入端,在每來一個APB2時鐘脈沖就外,CPU隨時都可以寄存器數(shù)據(jù),從而得知當前引腳狀態(tài)。輸入上拉模輸出數(shù)據(jù)寄存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國經(jīng)編干發(fā)巾行業(yè)投資前景及策略咨詢研究報告
- 2025年普通婦檢床項目可行性研究報告
- 2025年急診室設備項目可行性研究報告
- 2025至2031年中國壓力電波黑膠管行業(yè)投資前景及策略咨詢研究報告
- 2025年衛(wèi)生間用紡織品項目可行性研究報告
- 廣西2025年廣西醫(yī)科大學第二附屬醫(yī)院護理人員招聘50人筆試歷年參考題庫附帶答案詳解
- 2025至2030年中國銀行賬戶管理系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國金屬鮑爾環(huán)填料數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年移動式電腦絎縫機項目投資價值分析報告
- 2025至2030年中國胡蘿卜果蔬汁數(shù)據(jù)監(jiān)測研究報告
- app 購買合同范例
- 小班期末家長會-雙向奔赴 共育花開【課件】
- 礦山生態(tài)修復工程不穩(wěn)定斜坡治理工程設計
- 2024年江西省高考物理試卷(含答案解析)
- 頸部瘢痕攣縮畸形治療
- 貴州省貴陽市2023-2024學年五年級上學期語文期末試卷(含答案)
- 規(guī)劃課題申報范例:俄羅斯教育改革研究(附可修改技術路線圖)
- 運輸企業(yè)安全事故報告調查處理制度(簡單版5篇)
- 倉庫貨物安全管理
- 端午做香囊課件
- 2024年部編版九年級語文上冊電子課本(高清版)
評論
0/150
提交評論