硬石ys-f1pro開發(fā)板手冊(cè)hal庫(kù)_第1頁(yè)
硬石ys-f1pro開發(fā)板手冊(cè)hal庫(kù)_第2頁(yè)
硬石ys-f1pro開發(fā)板手冊(cè)hal庫(kù)_第3頁(yè)
硬石ys-f1pro開發(fā)板手冊(cè)hal庫(kù)_第4頁(yè)
硬石ys-f1pro開發(fā)板手冊(cè)hal庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩416頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

YS-F1Pro開發(fā)板開發(fā)手冊(cè)(HAL庫(kù)STM32入門系列技術(shù): 話(硬石電 1117192426STM32Cube是一個(gè)全面的軟件平臺(tái),包括ST產(chǎn)品的每個(gè)系列,(STM32Cube_F1是針對(duì)STM32F1系列STM32Cube硬件抽象層(HAL)和一套中間組件(RTOS,USB,FS,TCP等等。STM32Cube是由ST公司倡議,旨在減少開發(fā)負(fù)擔(dān)、時(shí)間和費(fèi)用,為開(HAL外設(shè)的接口函數(shù)(USB以太網(wǎng)等復(fù)雜外設(shè)),代碼結(jié)構(gòu)強(qiáng)壯,已通過(guò)CodeSonar認(rèn)證。同時(shí),HAL還集成了廣泛的例程,可以運(yùn)行在不同意法半導(dǎo)體YS-F1Pro開發(fā)板是硬石團(tuán)隊(duì)研發(fā)的針對(duì)STM32F103的綜合性實(shí)驗(yàn)測(cè)試平臺(tái),開發(fā)板幾乎囊括了所有的外設(shè),這對(duì)新手入門是非常好的學(xué)臺(tái),開發(fā)板幾乎所有采購(gòu)來(lái)著嘉立創(chuàng)平臺(tái),質(zhì)量有保證,這與還是有很最終掌握STM32的基本編程方法,學(xué)會(huì)將STM32CubeMX應(yīng)用到自己DIY應(yīng)用YS-F1ProSTM32的知識(shí)也就那如果有原作者認(rèn)為我們不能您的著作內(nèi)容,請(qǐng)務(wù)必們,我們會(huì)把本文檔參考大量文檔而編寫完成,部分內(nèi)容可能直接網(wǎng)絡(luò)文檔,所以在們會(huì)虛心求教,我們會(huì)根據(jù)情況本店模塊以表示我們的誠(chéng)意。(一 硬件設(shè) 第1 YS-F1Pro開發(fā)板硬件設(shè) YS-F1Pro開發(fā)板硬件資 YS-F1Pro開發(fā)板跳帽配置說(shuō) YS-F1Pro開發(fā)板IO分 第2 YS-F1Pro開發(fā)板原理圖詳 微控制 FSMC—擴(kuò)展SRAM和TFT液 擴(kuò)展 LCD液 電源管 STM32F103供 開發(fā)板供 SWD和ISP接 SWD接 ISP方 數(shù)據(jù)設(shè) 串行 串行 SD USB從設(shè)備(USB CAN通 紅外接收2.4G無(wú)線模 W5500以太網(wǎng)模 電機(jī)模 步進(jìn)電 舵 直流電 AD轉(zhuǎn) 其他功能電 LED燈電 獨(dú)立按 電容式按 蜂鳴 溫濕度傳感器接 頭接 所有 第3 3.5寸液晶模組電路設(shè) 液晶顯 電阻觸摸實(shí) (二 軟件設(shè) 第4 HAL庫(kù)介 STM32軟件編 HAL庫(kù)是什 HAL庫(kù)發(fā)展趨 HAL庫(kù)特 第5 STM32CubeMX安裝及使 STM32CubeMX使用CubeMX新建工 第6 KEILv5和IAR軟件使 KEILv5軟件使 IAR軟件使 第7 寄存 寄存器定 微控制 內(nèi)部總 器映 位帶操 外 時(shí)鐘和復(fù) 復(fù) 時(shí)鐘 第8 Cortex-M3內(nèi) CM3內(nèi)核簡(jiǎn)化模 寄存 寄存器應(yīng)用分 第9 GPIO介 GPIO相 LED燈硬件設(shè) GPIO外設(shè)結(jié)構(gòu) GPIO編程流程分 流水燈代碼實(shí) 蜂鳴器控 蜂鳴器驅(qū)動(dòng)電路設(shè) 蜂鳴器控制代碼實(shí) 第10章工程文件結(jié)構(gòu)和復(fù)位啟 例程文件結(jié) 啟動(dòng)代 復(fù)位啟動(dòng)流 第11章GPIO—按鍵輸入掃 按鍵輸入硬件設(shè) 按鍵掃描編程流程分 按鍵輸入掃描代碼實(shí) 第12章EXTI—按鍵中斷輸 NVIC寄存 中斷優(yōu)先級(jí)分 優(yōu)先級(jí)分 NVIC相關(guān)函 中斷配置實(shí) EXTI功能框圖分 按鍵中斷編程流程分 按鍵中碼實(shí) 第13章USART—RS-232串口通 串口通信協(xié) 物理 協(xié)議層 STM32的USART簡(jiǎn) 使用CubeMX軟件生成USART工 USART結(jié)構(gòu) 編程要 USART代碼實(shí) 第14章USART-指令控 USART的調(diào)試應(yīng) 使用CubeMX生成工 編程要 USART串口指令代碼實(shí) 第15章DMA—直接內(nèi)存 DMA功能框 DMA外設(shè)結(jié)構(gòu) DMA編程流程分 內(nèi)存數(shù)據(jù)拷貝代碼實(shí) 第16章DMA-USART1接 DMA器到外設(shè)模 使用CubeMX軟件生成工 編程流程分 DMA器到外設(shè)代碼實(shí) 第17章SysTick—系統(tǒng)滴答定時(shí) SysTick介 相關(guān)寄存器介 SysTick編程流程分 SysTick實(shí)現(xiàn)定時(shí)代碼實(shí) 第18章TIM-基本定時(shí) 基本定時(shí)器簡(jiǎn) 基本定時(shí)器功能框 TIM6&TIM7編程流程分 TIM6&TIM7基本定時(shí)代碼實(shí) 第19章TIM-高級(jí)控制定時(shí) 高級(jí)控制定時(shí) 輸入捕獲模 輸入模 強(qiáng)置輸出模 輸出比較模 模 互補(bǔ)輸出和死區(qū)插 在外部事件時(shí)清除OCxREF信 產(chǎn)生六 輸 單脈沖模 編接口模 與霍爾傳感器的接 TIMx定時(shí)器和外部觸發(fā)的同 高級(jí)控制定時(shí)器外設(shè)結(jié)構(gòu) 高級(jí)控制定時(shí)器生 編程流程分 高級(jí)控制定時(shí)器生 代碼實(shí) 第20章TIM-通用定時(shí)器(電容按鍵 電容按鍵原 電容按鍵硬件設(shè) STM32Cube生成工 觸摸按鍵外設(shè)結(jié)構(gòu) 觸摸按鍵編程流程分 觸摸按鍵代碼實(shí) 第21章TIM-通用定時(shí)器(呼吸燈 呼吸燈功能實(shí) 使用CubeMX軟件生成代 呼吸燈編程流程分 呼吸燈代碼實(shí) 第22章ADC-電壓STM32ADC介 DMA傳輸在ADC中的應(yīng) ADC外設(shè)機(jī)構(gòu)體分 ADC編程流程分 基于DMA傳輸?shù)亩嗤ǖ繟D轉(zhuǎn)換代碼實(shí) 雙ADC慢速交叉模式代碼實(shí) 第23章DAC-電壓輸 DAC簡(jiǎn) 使用CubeMX生成DAC正弦波工 DAC外設(shè)結(jié)構(gòu)體分 正弦波輸出代碼實(shí) 可調(diào)電壓輸出代碼實(shí) 第24章LCD-液晶顯 LCD簡(jiǎn) LCD控制器簡(jiǎn) FSMC簡(jiǎn) 使用CubeMX生成工 FSMC外設(shè)結(jié)構(gòu) LCD編程流程分 LCD顯示代碼實(shí) 第25章LCD顯示中英文(字模在內(nèi)部 ASCII編 字 制作字 使用CubeMX生成工 LCD顯示字符及漢字編程流程分 LCD顯示字符代碼實(shí) LCD顯示漢字代碼實(shí) 第26章FSMC-外部SRAM實(shí) SRAM簡(jiǎn) 使用CubeMX生成工 FSMC-外部SRAM外設(shè)結(jié)構(gòu) FSMC-外部SRAM編程流程分 FSMC-外部SRAM代碼實(shí) FSMC-擴(kuò)展SRAM內(nèi)存管理代碼實(shí) (一) YS-F1Pro開發(fā)板硬件設(shè)YS-F1Pro開發(fā)板YS-F1Pro1-11-2圖1-1YS-F1ProYS-F1ProSTM32F103ZET6這個(gè)控制器的內(nèi)STM32F103的內(nèi)部資源,都可以在此開發(fā)板上圖1-2YS-F1ProYS- 開發(fā)板跳帽為盡可能發(fā)揮STM32F103ZET6這顆微控制器的性能、提供的接口,開發(fā)板設(shè)計(jì)使用了跳帽選擇實(shí)現(xiàn)不同的功能,具體情況參考圖1-3和表格1-1:圖1-3表格1-1 1CH340GUSART1CH340G2PB0PG6ULN2003PG6ULN2003PD3與頭接口有共345左邊:RS-485右邊:RS-2326W5500VS1053、2.4G無(wú)線需要W55007YS-F1ProIOYS-F1ProSTM32F103ZET61-表格1-2YS-F1Pro開發(fā)板IO選連接藍(lán)牙HC-05、GPS、GSM模塊選連接藍(lán)牙HC-05、GPS、GSM模塊PB2-78PC14-9PC15-OutputEnable)Write12345圖1-4YS-F1Pro第2章YS-F1Pro微控制STM32F103ZETT6擁有的資源包括:64KBSRAM、512KBFLASH、2時(shí)器、4個(gè)通用定時(shí)器、2個(gè)高級(jí)定時(shí)器、2DMA控制器(12個(gè)通道、3SPI2IIC5個(gè)串1USB1CAN312ADC112DAC、1SDIO接口、1FSMC接口以及112IO口。(GPIO2-1,還有一部分是電源引腳(屬于電源模塊部分2-圖2-1STM32F103ZET6別對(duì)于把SWD接口功能引腳做為模塊功能引腳時(shí)特別注意需要關(guān)閉的JTAG和SWD功能。STM32F103有多種啟動(dòng)模式可以選擇。啟動(dòng)模式理解是:微控制器允許從理解,比如,大廳對(duì)應(yīng)區(qū)0,存放了一個(gè)房號(hào),這個(gè)房號(hào)就是由BOOT0和BOOT1引腳決定的;房間1對(duì)應(yīng)內(nèi)Flash2RAM,房間3對(duì)應(yīng)系統(tǒng)開發(fā)板默認(rèn)通過(guò)兩個(gè)10K歐的電阻把BOOT0和BOOT1引腳都拉低Flash2-2圖2-2這里需要需要注意的一點(diǎn),BOOT0BOOT1引腳是有可能被拉高為高電平的,因?yàn)檫@里有10K歐電阻的存在,后面在模塊電路會(huì)用到BOOT0引腳。我們需要為STM32F103提供一個(gè)時(shí)鐘源,一般使用8MHz的無(wú)源石英晶振,見(jiàn)。實(shí)際上,STM32F103內(nèi)部有一個(gè)主時(shí)鐘源,也為8MHz,但一般我們不年歷)還需要提供32.768KHz的時(shí)鐘源。電路設(shè)計(jì)見(jiàn)圖2-3。圖2-32-圖2-4STM32F103ZET6NRESET為低電平時(shí),CPU處R6C5RC復(fù)位電路。當(dāng)系統(tǒng)上電時(shí),C50,CPU處于復(fù)位狀態(tài)VDD(3.3V)電源通R6C5充電C5的電壓升CPU的高電平門檻電壓時(shí),CPU退出復(fù)位狀態(tài)轉(zhuǎn)入運(yùn)行狀態(tài)。在設(shè)計(jì)電路時(shí),需要選擇適當(dāng)?shù)腞值和C值,以保證NRESET低電平持續(xù)時(shí)間滿足CPU復(fù)位最小脈寬的要求。(FSMCFlashcontroller所有的外部器共享控制器輸出的地址、數(shù)據(jù)和控制信號(hào),每個(gè)外部設(shè)備SRAMStaticRAM的縮寫,它是一種具有靜止存取功能的內(nèi)存,不需這是和Flash最大的區(qū)別。YS-F1Pro開發(fā)板板載1片1MX16的靜態(tài)器(1M問(wèn)模式。電路設(shè)計(jì)見(jiàn)圖2-5。圖2-5擴(kuò)展2-表格2-1SRAM高字節(jié)控制(I/O8~低字節(jié)控制(I/O0~A0~I/O0~LCD液STM32F103ZET6沒(méi)有內(nèi)置LCD控制器,因此需要選用帶控制器的XPT2046TSC2046STM32F103ZET6SPISPI接口資源緊張我們使用普通的IO接口模擬SPI通信時(shí)序時(shí)序與TSC2046正常通信,實(shí)際測(cè)試觸摸效果并沒(méi)有因?yàn)槭褂媚MSPI時(shí)序而影響。TSC2046具有中斷輸出口線,當(dāng)觸摸屏被按壓時(shí)PENIRQ口線輸出低電平。2-6圖2-6TFT2-表格2-2STM3212觸摸從機(jī)輸34觸摸從機(jī)輸56觸摸時(shí)鐘7~LCD_DB0~電源管STM32F103供則是通過(guò)一個(gè)電感后與3.3V連接,參考圖2-7。圖2-7STM32F103ZET6開發(fā)板供開發(fā)板不同模塊可能需要的電源電壓有+5V和+3.3V兩種。5V電源可以有兩MINIUSBUSB線5V電壓,這種方法非常方便,通常都是使用這種方法的,該最大可輸出3A電流,驅(qū)動(dòng)力十足,一般只有在開發(fā)板接上很多模塊才要這種供電方法。3.3V電源則是利用AMS1117-3.3從5V電源轉(zhuǎn)換得到。電路設(shè)計(jì)見(jiàn)圖2-8。其中,D6SMAJ5.0A5V外圖2-85V3.3VSWD和ISP接SWD接JTAGARM20SWD接口只6個(gè)引腳。YS-F1Pro開發(fā)板僅支持SWD調(diào)試接口JTAG接口,這樣JTAG其余的功能引腳可以用作普通的GPIO使用。SWD接口調(diào)試接口和原理圖見(jiàn)圖2-9圖2-9SWDRESET#是STM32的硬件復(fù)位引腳。仿真器(比如J-Link和ST-Link仿真于大多數(shù),我們還是建議在調(diào)試口中增加RESET引腳。電的。對(duì)于J-Link仿真器,是必須的,因?yàn)镴-Link仿真器內(nèi)部的電平轉(zhuǎn)換芯ST-Link仿真器,這個(gè)電源引腳可以不接,因缺省就是3.3V的。JTMS/SWDIO(PA13)、JTCK/SWCLK(PA14SWD調(diào)試接口的數(shù)圖設(shè)計(jì)了一個(gè)ST-LinkV2仿真器,實(shí)物圖和開發(fā)板連接圖見(jiàn)圖2-10。圖2-10ST-Linkv2JTAG轉(zhuǎn)成與我們開發(fā)板匹配的準(zhǔn),即功能引腳排序可以自行設(shè)計(jì)。實(shí)物連接見(jiàn)圖2-11。圖2-11ST-Linkv2JTAGSWD轉(zhuǎn)換板就可以了,僅支持SWD模式。另外我們還提供了把我們的ST-Linkv2仿真器轉(zhuǎn)換成標(biāo)準(zhǔn)的JTAG接口的轉(zhuǎn)換方案,不過(guò)僅支持SWD模式,實(shí)物連接參考圖2-12,注意這里使用的紅圖2-12硬石STLinkv2轉(zhuǎn)JTAG接ISP方STM32F103支持ISP(InSystemProgram)程序,電路設(shè)計(jì)見(jiàn)圖2-13,ISP電路使用到CH340G,它是一個(gè)USB轉(zhuǎn)串口IC,這里使用STM32的當(dāng)STM32F103被設(shè)置為從系統(tǒng)代碼啟動(dòng)后,通過(guò)通信設(shè)定后,可以接收USART1數(shù)據(jù)更新內(nèi)部Flash內(nèi)容,這樣達(dá)到程序目的,當(dāng)再次從內(nèi)部Flash啟動(dòng)時(shí)就0)STM32F1032-13中下方把BOOT0拉高,這樣STM32F103就可以進(jìn)入ISP模式,注意這里是可以進(jìn)定啟動(dòng)模式,所以現(xiàn)在需要讓STM32F103進(jìn)行一次復(fù)位,這時(shí)就要看DTR#引腳的功能了。當(dāng)DRT#為高電平時(shí)Q1三極管導(dǎo)通,原本RTS#引腳就為低電平,Q1導(dǎo)通后U4的第2引腳(標(biāo)識(shí)為“Z”)也是低電平,而U4是74HC1G66GW,實(shí)際上低電平,此時(shí)STM32F103進(jìn)入復(fù)位狀態(tài)。74HC1G66GW在這里起到系統(tǒng)上電后延時(shí)RTS#引腳信號(hào)對(duì)RESET#引腳的好了,在成功復(fù)位之后就可以需要把DTR#引腳拉高,此時(shí)RESET#引腳也被拉高,現(xiàn)在ISP軟件就可以對(duì)STM32F103程序。等程序完之后,RTS#BOOT0引腳為低電平,這樣等一切就緒之后,在復(fù)位一下STM32F103就可以從Flash啟動(dòng),并運(yùn)行新程序。圖2-13ISP接數(shù)據(jù)設(shè)開發(fā)板提供多種數(shù)據(jù)方式,有串行Flash、EEPROM、SD卡USB串行128Mbit(16M字節(jié))Flash,型號(hào)為W25Q128FVSIG,它掛載在STM32F103SPI1接口上,電路設(shè)計(jì)見(jiàn)圖2-14。圖2-14串行2-表格2-3FlashSTM32片選(ChipSelect)CS由高變低時(shí),被能。在命令傳輸器件,CE串行數(shù)據(jù)輸出(SerialData寫保護(hù)使能(Write3.3V電源,缺省是串行數(shù)據(jù)輸入(SerialData數(shù)據(jù)輸出到Flash時(shí)停止SPI通信通過(guò)上拉電阻接電源,SPI串行EEPROMSTM32I2CI2C2線I2CI2C主設(shè)備(STM32F103控制器,可以允許并接很多I2C從設(shè)備,這些設(shè)備必須具備唯一的地址以便于區(qū)分。1-10KI2C256個(gè)字節(jié),對(duì)于我們普通應(yīng)用來(lái)說(shuō)是足夠了的。當(dāng)然,你也可以選擇換大容量的,因?yàn)槲覀兊碾娐吩谠砩鲜羌嫒軦T24C02~24C512全系列EEPROM芯片的。電路參考圖2-15。圖2-15AT24C02程序的時(shí)候要注意這點(diǎn)。I2C_SCLSTM32F103PB6上,I2C_SDAPB7I2CI2C通信方SDSTM32F103ZET6SDIOSD卡操作,YS-F1Pro開發(fā)板設(shè)電路設(shè)計(jì)參考圖2-16。圖2-16SDSD4SDIO12MB/S,非常適USB從設(shè)備(USBSTM32F1031USBUSBDevice設(shè)備。USBDevice接USBUSBUSBHost。使用這個(gè)接口,我們可以做U盤實(shí)驗(yàn)(將開發(fā)板SD卡和串Flash虛擬2U盤可以通過(guò)電腦讀寫文件。另外,也可以利用該USB接口實(shí)現(xiàn)模擬串口效果。2-17USBD_ENBLE(PG13)Q3三極管導(dǎo)通是,USBDevice接口才有效。圖2-17USB數(shù)據(jù)傳輸—通信實(shí)STM32F103集成多個(gè)通口,包括5個(gè)UART、CAN通信等等,YS-F1Pro開發(fā)板充STM32F103性能,集成了多種形式的通信方法RS-232串口通信等等,并擴(kuò)展了GSM()模塊和GPS模塊。USART2—WiFi、GSM、GPS、藍(lán)GSM模塊,NEO-7MGPSHC-05藍(lán)牙模塊,使用我們配套的杜體可閱讀1.2小節(jié)。圖2-18USART2YS-F1ProESP-12FWiFi模塊。ESP-12FWiFi模塊TensilicaL10632位微型MCU16位精簡(jiǎn)模式,主頻支該模塊支持標(biāo)準(zhǔn)的IEEE802.11b/g/n協(xié)議,完整的TCP/IP協(xié)議棧。用戶可以USART3—RS-232、RS-RS-232RS-485在設(shè)備應(yīng)用中非常普遍,開發(fā)板提供1RS-232(DB9連接器)1RS-485接口,見(jiàn)圖2-19。圖2-19USART3這里選擇SP3232E,實(shí)現(xiàn)標(biāo)準(zhǔn)RS-232電平轉(zhuǎn)換為STM32支持的TTL電平。RS-485接口情況類似,采用差分信號(hào)負(fù)邏輯,邏輯"0”PB2PB2RS-485發(fā)則是兩個(gè)偏置電阻,以保證靜默狀態(tài)時(shí),RS-485總線維持邏輯1。RS-485是在RS-2321200MCAN通YS-F1ProSN65HVD230作為CAN驅(qū)動(dòng)器。CAN5.08mm間距的接線端子引出,參考圖2-20。圖2-20CANCAN120CAN總線的一個(gè)中間節(jié)點(diǎn)使用,那么可能需要去掉這個(gè)120歐阻抗匹配電阻。CAN總線的數(shù)8腳的電1.2V時(shí),收發(fā)器處于允許發(fā)送(也可以接收。R36電阻的阻值可以控制波形的斜率。阻值越小,波形的上升沿和下大波特率也是1Mbps。SN65HVD230的第4腳是接收到的信號(hào)輸出,為推挽輸出模式,因此和STM32相連時(shí),無(wú)需外加上拉電阻。紅外接外接收管,電路設(shè)計(jì)見(jiàn)圖2-21。圖2-21該信號(hào)連接在PB1上。2.4G無(wú)線模無(wú)線通信在很多場(chǎng)合非常有用,YS-F1ProRFID2-22圖2-222.4GNRF24L012Mbps,傳輸距離最大可以到15米左右(空曠地,無(wú)干擾SPI3PB3是SWDSDO功能引腳,所以使用SPI3時(shí)必須禁用SWD接口功能。W5500W5500以太網(wǎng)模塊包含了一個(gè)硬件TCP/IP協(xié)議棧W5500以及一個(gè)含RJ-4(HR911105A。其中,W5500TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡(jiǎn)易的互聯(lián)網(wǎng)連接方案.使用硬件邏TCP/IP協(xié)議棧的傳輸層及網(wǎng)絡(luò)層(如:TCP,UDP,ICMP,IPv4,ARP,IGMPPPPoE等協(xié)議32KRAM作為數(shù)據(jù)收發(fā)緩存。使得上位機(jī)主控,只需承擔(dān)TCP/IP應(yīng)用層控制信息的YS-F1Pro開發(fā)板集成了一個(gè)整個(gè)W5500圖2-23W5500圖2-23中上半部分是W5500及其電路,W5500需要外接一個(gè)25MHz的晶振。W5500SPISTM32F103SPI3接口,W5500PF11,W5500中斷輸出引腳同樣通過(guò)一個(gè)跳線帽連接至PF9W5500的復(fù)位硬件與STM32F103的復(fù)位引腳直接在一起。VS10532-24,VS1053可以使用SPI通信進(jìn)行通信,這里預(yù)留設(shè)計(jì)SPI3接口做為VS1053的通口,同時(shí)IO供使用,實(shí)際上預(yù)留的這個(gè)接口也是可以給其他模塊使用圖2-24VS1053這里要特PB3SWD接口SDO功能引腳以使SPI3時(shí)必須禁用SWD接口功能。電機(jī)模步進(jìn)電系統(tǒng)。ULN2003A7組達(dá)林頓晶體管陣列和相應(yīng)的電阻網(wǎng)絡(luò)以及鉗位二極絡(luò)構(gòu)成,具有同時(shí)驅(qū)動(dòng)7組負(fù)載的能力,為單片雙極型大功率高速集成電路。ULN2003一般用于小型步進(jìn)電機(jī)驅(qū)動(dòng)。YS-F1Pro開發(fā)板集成了一個(gè)ULN2003A和對(duì)應(yīng)的接口,電路設(shè)計(jì)參考圖2-2528BYJ-4842、57類型步進(jìn)電機(jī)是使用控制,類似直流電機(jī)的控制方法。圖2-25圖2-26舵作原理是由發(fā)出訊號(hào)給舵機(jī),經(jīng)由電路板上的IC判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)子,并將磁鐵置於圓柱體內(nèi),這就是無(wú)馬達(dá)。舵機(jī)解剖圖參考圖2-27。圖2-27圖2-28里還需要注意,PA15JTAG接口引腳,在編程時(shí)注意禁JTAG接口功能,PA15直流電STM32STM32IO接口驅(qū)動(dòng)能力動(dòng)器從而來(lái)實(shí)現(xiàn)電機(jī)的旋轉(zhuǎn)控制。STM32一般是通過(guò)產(chǎn)生信號(hào)控制電機(jī)驅(qū)動(dòng)器,所以需要用到STM32定時(shí)器功能。STM32F103ZET6有兩個(gè)高級(jí)控制定時(shí)器TIM1和TIM8,非常適合復(fù)雜的電機(jī)控制場(chǎng)合,YS-F1Pro開發(fā)板設(shè)計(jì)時(shí)將圖2-29。圖2-29ADAD轉(zhuǎn)換顧名思義就是模擬量轉(zhuǎn)換成數(shù)字量,實(shí)際應(yīng)用中很多信號(hào)都是模擬STM32F103內(nèi)部集成了一個(gè)12位ADC是一種逐次近型模擬數(shù)字?jǐn)?shù)字3.3V2^12=4096等分,在特定的輸入引腳上的某一電YS-F1Pro6AD轉(zhuǎn)換引腳,其中兩個(gè)引腳可以直接通過(guò)跳線帽短接至光敏電阻和精密電位器,電路設(shè)計(jì)參考圖2-30。圖2-30AD6ADADC1、ADC2ADC3其他功能電LED燈電YS-F1Pro3LED2-31圖2-31LEDLED1GND(0V)PB0引腳上(中間還JP3默認(rèn)使用跳線帽短路PB0引腳為高電平(3.3V)的話,此時(shí)電路存在電壓差,電流從LED1燈正極流向負(fù)極再經(jīng)電阻流入GND,此時(shí)LED1PB0引腳的高或者低電平就可以自由控制LED1燈的亮滅。LED2LED3控制原理與LED1是相同的。獨(dú)立按以做為系統(tǒng)喚醒和TAMPER(侵入事件)功能,電路設(shè)計(jì)見(jiàn)圖2-32。圖2-32KEY1按鍵通過(guò)R43電阻接在PA0R44電平。KEY1按鍵可以做為系統(tǒng)喚醒功能。KEY2PC13R45作用后PC13慢慢上升自3.3V。KEY2按鍵可用于系統(tǒng)侵入事件功能。電容式按電容式觸摸感應(yīng)按鍵的基本原理如圖2-33所示,當(dāng)(手指)接觸金屬形成一個(gè)電容,感應(yīng)電容量通常有幾pF到幾十pF。利用這個(gè)最基本的原理,在外圖2-33圖2-34蜂鳴YS-F1Pro2-35STM32I/O口是無(wú)法直接驅(qū)圖2-35別是GPIO連接此基極的時(shí)候,一般在GPIO所在IC剛剛上電初始化的時(shí)GPIO的內(nèi)部也處于一種上電狀態(tài),很不穩(wěn)定,容易產(chǎn)生噪聲,引起誤動(dòng)(的電流由電阻流入地)當(dāng)三極管開關(guān)作用時(shí),ONOFF時(shí)間越短越好,OFF時(shí),因晶體管中的殘留電荷引起的時(shí)間滯后,B,ER起到放電溫濕度傳感器接YS-F1ProDS18B20、DHT11、AM2302等型號(hào)溫度傳感器和溫濕度傳感器,電路設(shè)計(jì)參考圖2-36。圖2-36頭接塊,電路設(shè)計(jì)見(jiàn)圖2-37。圖2-37頭接 I2C1_SCLSCCB接口的控制時(shí)鐘(I2C接口類似I2C1_SDASCCB接口的串行數(shù)據(jù)輸入(出)端(I2C接口類似 FIFO_WENFIFO寫使能(1為允許CMOS寫入到FIFO,0為);FIFO_RCLKFIFO內(nèi)存時(shí)鐘控制端;FIFO_WRST—FIFO寫指針?lè)?wù)端;FIFO_OEFIFO關(guān)斷控制;FIFO_RRST—FIFO讀指針復(fù)位端。所有板把所有的GPIO通過(guò)排針引出,參考圖2-38。圖2-38GPIO 3.5寸液晶模組電路設(shè)為配合YS-F1Pro開發(fā)板做人機(jī)交互界面,我們專門設(shè)計(jì)了一個(gè)3.5寸液晶顯示模組,該液晶模組是320*480的真彩屏,驅(qū)動(dòng)為ILI9488。該屏使用16bit總線模式,采用6個(gè)白色LED作為背光源。液晶顯3-18bit16bit數(shù)據(jù)并口,我們默認(rèn)16bit接口,這樣才可以充分發(fā)stm32的優(yōu)勢(shì)。背光采用圖3-1電阻觸參考圖3-2。圖3-2(二) HAL庫(kù)介相信會(huì)來(lái)閱讀本文的同學(xué)都大概知道STM32微控制器是什么東西,本文討論的是STM32F103ZET6,實(shí)際上合適STM32F1系列。微控制器最簡(jiǎn)單如PA0,輸出高電平,要怎么辦呢?編寫程序,然后編譯程序并到開發(fā)板運(yùn)使用Keil或者IAR。ST為廣大使用者方便編程已經(jīng)提供了與硬件底層相關(guān)的C語(yǔ)言文件,節(jié)省了我們很多時(shí)間,我們重點(diǎn)是學(xué)習(xí)如何使用。STM32C語(yǔ)言編程可以是直接寄存器編程、標(biāo)準(zhǔn)固件庫(kù)編程以及新推出的HAL庫(kù)編程。直接寄存器編程是直接操作寄存器方法,比如語(yǔ)句:PB1引腳,0x0003對(duì)應(yīng)PB0PB1GPIOBBSRR是什么東西,如果要展開講有太多了,簡(jiǎn)單講就是ST已經(jīng)為我們定義好的東GPIOBBSRRSTM32編程的一個(gè)軟件函數(shù)庫(kù),就是目前還流行的標(biāo)準(zhǔn)固件庫(kù)。使用如下語(yǔ)句,就可以控制PB0引腳輸出高電平:10年以來(lái)受廣大使用者推崇,就是現(xiàn)在還有大部分工程師、公司都在使用。不過(guò),現(xiàn)實(shí)情況有點(diǎn),ST已經(jīng)不再更新STM32標(biāo)準(zhǔn)固件庫(kù),STM32F12013年后沒(méi)有正式發(fā)布更新版本,所以現(xiàn)在都停留在V3.5.0版本?,F(xiàn)在ST全力推新的軟件編程庫(kù):HAL庫(kù),現(xiàn)在使用HAL庫(kù)實(shí)現(xiàn)PB0輸出高電平編程如下:用誰(shuí)知道,總體來(lái)說(shuō)HAL庫(kù)還是比較人性化的,并且配合STM32CubeMX軟件使用可以簡(jiǎn)化編程。關(guān)于HAL庫(kù)詳細(xì)介紹請(qǐng)繼續(xù)看。HAL在解釋HAL庫(kù)之前,我們先認(rèn)識(shí)STM32CubeMX(簡(jiǎn)稱CubeMX,下同。它是ST推出的一種STM32設(shè)置和初始化C代碼的,界面見(jiàn)圖4-1。圖4-1STM32CubeMX就是CubeMX軟件是一個(gè)工具軟件,我們只要在上面簡(jiǎn)單的點(diǎn)點(diǎn)點(diǎn)就可以生成我們的工作量,我們的工作重點(diǎn)放在項(xiàng)目任務(wù)的實(shí)現(xiàn)。CubeMX的使用介紹將會(huì)HAL的全稱是:Hardware 的函數(shù)庫(kù),因?yàn)楹虷AL關(guān),在這里,我們便稱為HAL庫(kù)。HAL庫(kù)是一個(gè)由ST基于硬件抽象層而設(shè)計(jì)的軟件函數(shù)包,它由程序、HAL庫(kù),無(wú)需深入掌握底層硬件細(xì)節(jié),開發(fā)者就可以輕松應(yīng)用每一個(gè)外API(applicationprogramminginterface應(yīng)用編程界面)驅(qū)動(dòng),API對(duì)該驅(qū)動(dòng)程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱都進(jìn)行了標(biāo)準(zhǔn)化。在ST的中,HAL庫(kù)是大勢(shì)所趨,在ST公司開發(fā)的部分中,只有HAL庫(kù)而沒(méi)有標(biāo)準(zhǔn)庫(kù),從這點(diǎn)便可以說(shuō)明,以后的目標(biāo)是逐漸的轉(zhuǎn)向HALCubeMX生成代碼后,工程項(xiàng)目和初始化代碼已經(jīng)完成。簡(jiǎn)便了很多,而且最重要的是ST的大力推廣,未來(lái)功能會(huì)更加的完善,CubeMX功能示意參考圖4-2。圖4-2CubeMXSTM32CubeMX現(xiàn)在已經(jīng)支持STM32的全系列,列出F1的系列,見(jiàn)圖4-3CubeMX支持的F1HALAPI類型(通用和擴(kuò)展,API(應(yīng)用程序編程接口)是一些預(yù)先定義的可以了。或者說(shuō)更簡(jiǎn)單的:比如別人已經(jīng)做好了一塊幾何處理程序,你想拿來(lái)APISTM32各系列產(chǎn)品的特有功能和擴(kuò)展性能,提高HAL驅(qū)動(dòng)的擴(kuò)展性。圖4-4HAL庫(kù)的一個(gè)特點(diǎn)。回調(diào)函數(shù)由外設(shè)初始化、中斷事件、處理完成/出錯(cuò)觸發(fā)回調(diào)。如圖4-5,此時(shí),我們只需關(guān)心如何處理中斷和異常。圖4-5 STM32CubeMXSTCubeMX軟件可以直接ST,具體如下 /catalog/tools/PF259242圖5-1STCebeMX軟件 STM32CubeF1版本為V1.3.0,截圖見(jiàn)圖5-2:圖5-2STM32CubeF1界對(duì)于STM32F1系列版本應(yīng)該是V1.3.1,ST以補(bǔ)丁形式給出,更新,該補(bǔ)丁地址:5-

圖5-3Patch_CubeFW_F1中,需要直接到我們?cè)萍纯伞? 重點(diǎn)放在新建STCubeMX工程上。CubeMX5-4安裝支持

圖5-4CubeMXYS-F1Pro開發(fā)板型號(hào)為STM32F103ZET6,這里需要安裝STM32F1系列的支持包,見(jiàn)圖5-5。圖5-5STM32F103系列支持包安圖5-6圖5-7入見(jiàn)圖5-8。圖5-8STM32F103系 支持包導(dǎo)入完新建工首先選擇“NewProject”5-9圖5-9圖5-10,然后點(diǎn)擊OK按鈕,自動(dòng)彈出工程設(shè)置界面。圖5-10選擇型發(fā)板,這里設(shè)置使用外部晶振,并把PB0、PG6和PG7三個(gè)引腳設(shè)置為輸出模式,見(jiàn)圖5-11。圖5-11圖5-12界面內(nèi)容與中的設(shè)置關(guān)。我們選擇“GPIO”選項(xiàng),在彈出的界面中設(shè)置圖5-13GPIO同時(shí),我們還可以查看與RCC圖5-14見(jiàn)圖5-15。圖5-15圖5-16堆棧大alloc或者malloc函設(shè)置使用KEILv5編譯器的,我們還提供了基于IAR編譯器的例程,設(shè)置見(jiàn)圖圖5-17設(shè)置工程名稱和路徑、KEILv5圖5-18設(shè)置工程名稱和路徑、IAR5-19圖5-195-20圖5-205-21圖5-21圖5-22KEILv5IAR5-23圖5-23IAR KEILv5和IAR軟件使KEILv5HAL庫(kù)例程中《YSF1_HAL-002GPIO-軟件的目標(biāo)工具選項(xiàng)(OptionsforTarget“魔術(shù)棒”。圖6-1KEIL(DeviceCPU,編號(hào)2的區(qū)域是該CPU的一些描述。生設(shè)置CubeMX時(shí),我們已選擇圖6-2(arget圖6-3RO(Flash地址,Size一欄輸入大小。HEXCubeMX6-4圖6-4(Listing圖6-5(User圖6-6讓編譯器能找到自己程序中包含的庫(kù)文件,其實(shí)這和我們?cè)诔绦蛑刑砑?include<>的原理是一樣的。只不過(guò)是KEIL給我們一個(gè)更好的處理。在圖6-7C/C++編程,所以不必理會(huì)。Linker是連接選項(xiàng)卡,對(duì)于不是特別大或者特殊的程(DebugCubeMXSetting,進(jìn)入硬件調(diào)試仿真設(shè)置界面6-9FlashDownload界面,主要是對(duì)燒寫程序的功能選項(xiàng),CubeMX軟件生成的配置是沒(méi)有勾選ResetandRun的,在這里,勾選它是為了更方圖6-8圖6-9DebugCubeMXKEIL的在硬石HAL庫(kù)例程中,為了使整體的程序界面更加清晰,提高易讀性,以及方例程LEDBSP。具體工程組件、配置工具環(huán)境及管理書(管理工程項(xiàng)目bsp_led.c文圖6-10圖6-11編譯圖6-12成功實(shí)物IARIAREmbeddedWorkbenchforARMIARSystemsARM微處理器開發(fā)的一個(gè)集成開發(fā)環(huán)境(IARARM開發(fā)環(huán)境,IAR具有入在介紹IAR軟件的使用方法,是針對(duì)CubeMX生成的工程來(lái)進(jìn)行,首先是打開.夾下,打開工程“YS-F1Pro”,文件類型是:IARIDEWorkspace。圖6-13IAR個(gè)工程。鼠標(biāo)工程,選擇Options,如圖6-14。圖6-14進(jìn)入Options第一步是進(jìn)行的選擇,如圖6-15圖6-15圖6-16運(yùn)行庫(kù)配置,如圖6-17所示,選擇None表示應(yīng)用程序不運(yùn)行庫(kù);選擇Normal表示普通運(yùn)行庫(kù),其中沒(méi)有Locale接口和CLocale,不支持文件描述符,printfandscanf不支持多字節(jié)操作;選擇Full表示完整運(yùn)置文件。這里一般選擇Full。圖6-17Full。GeneralOptions的后面還有兩個(gè)選項(xiàng),因圖6-18圖6-19C/C++language2Charchar作為無(wú)符按無(wú)符號(hào)類型編譯的,因此運(yùn)行庫(kù)時(shí)選擇Signed可能導(dǎo)致類型不匹配錯(cuò)誤。選項(xiàng)情況如圖6-20。圖6-20Char(OPtimization圖6-211和編2所示。定義預(yù)處理符號(hào)在上一章節(jié)中已經(jīng)講解過(guò)。圖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作為硬件調(diào)試設(shè)備。圖6-29設(shè)置,這里選擇“FLASHLoader”6-30圖6-30設(shè)ST-Link6-31ST-LinkOK,完成工程的配置。其量很大,可見(jiàn)CubeMX的優(yōu)勢(shì)之處。圖6-31ST-Link圖6-32點(diǎn)擊編譯按鈕,編譯完成后,點(diǎn)擊調(diào)試按鈕,出現(xiàn)如圖6-33所示調(diào)試界面,點(diǎn)擊全速運(yùn)行,即可觀察到硬石開發(fā)板上LED呈流水燈亮暗。圖6-33 寄存寄存器(Register部件中,包含的寄存器有指令寄存器(IR)和程序計(jì)數(shù)器。在處理器的算術(shù)微控制微控制器是將微型計(jì)算機(jī)的主要部分集成在一個(gè)上的單微型計(jì)算不作區(qū)別,單片機(jī)就是微控制器,微控制器就是單片機(jī)。STM32F103ST公ARMCortex-M3內(nèi)核的微控制器。幾個(gè)章節(jié)內(nèi)容,見(jiàn)附件1)說(shuō)明Cortex-M3內(nèi)核:Cortex‐M3處理器內(nèi)核是單片機(jī)的處理單元(CPU。完整的基于的MCU還需要很多其它組件。在制造商(比如ST、NXP、TI、Atmel等等)得到CM3處理器內(nèi)核的使用后,它們就可以把CM3內(nèi)核用在自己的硅片設(shè)計(jì)中,添加器,外設(shè),I/O以及其它功能塊,框圖見(jiàn)圖7-1。不同廠家設(shè)計(jì)出的單片機(jī)會(huì)有不同的配置,包括器容量、類型、外設(shè)等都各具特色。圖7-1Cortex-M3ortex‐M3是一個(gè)32位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是32位的,寄存器是32位的,器接口也是2位的。M3采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線,可以讓取指與數(shù)據(jù)并行不悖。這樣一來(lái)數(shù)據(jù)不再占用指令總線,從而提升了性能。為實(shí)現(xiàn)這個(gè)特性,CM3內(nèi)部含有好幾條總線接口,每條都為自己的應(yīng)用場(chǎng)合優(yōu)化過(guò),并且它們可以并行工作。但是另一方面,指令總線和數(shù)據(jù)總線共享同一個(gè)器空間(一個(gè)統(tǒng)一的器系統(tǒng)。換句話說(shuō),不是因?yàn)橛袃蓷l總線,可尋址空間就變成GB了。 比,圖7-1中的CM3內(nèi)核就相當(dāng)于電腦的CPU,器相當(dāng)于電腦的硬盤和內(nèi)存,內(nèi)部總線相當(dāng)于電腦的CPU與主板連接的導(dǎo)線…儲(chǔ)器結(jié)構(gòu)。處理器首先到程序指令器中程序指令內(nèi)容,后常是執(zhí)行。想了解什么是哈佛結(jié)構(gòu)與依曼結(jié)構(gòu)可以閱讀附件2M3是一個(gè)32位處理器內(nèi)核”,這樣的一個(gè)結(jié)果就是CM3可以非常方便的找到地址在4G大小之內(nèi)的地址,就是從0x 到0xFFFFFFFF。這個(gè)4G內(nèi)部總圖7-2。圖7-2STM32F1x7-2CM3STM32CPU;ICode、DCode、SystemCode分別叫指令總線、數(shù)據(jù)總線、以及系統(tǒng)總線,這三個(gè)對(duì)應(yīng)圖7-1中根線,可以傳輸32位數(shù)據(jù)。ICodeFlashCM3FlashFlash7-1中存儲(chǔ)器的一種,叫做程序器,我們編寫程序后程序一般就是在FlashDCodeSystemCode連接在一個(gè)叫總線矩陣的東西上面,實(shí)際上,掛在總DMA、Flash接口、SRAM、FSMCAHB系統(tǒng)總線這幾個(gè)部件。這里的SRAM相當(dāng)于電腦的內(nèi)存,屬于圖7-1中器的一種,叫做數(shù)據(jù)器,另外通過(guò)FSMC可以連接擴(kuò)展SRAM,達(dá)到增加SRAM效果,就是添加一條DMA究竟是什么東西,在這里也沒(méi)打算細(xì)講,它的全稱是:Directmemoryaccesscontroller(直接器存取控制器知道它是個(gè)操DMAFlash空間上數(shù)據(jù)傳輸SRAM上,這個(gè)過(guò)程可以無(wú)CM3內(nèi)核的控制CPU是可以做其他運(yùn)算工作的。關(guān)于DMA的其他內(nèi)容我們?cè)诤竺鏁?huì)詳細(xì)講解。 器映性地址空間內(nèi),可的器空間被分成8個(gè)主要塊,每個(gè)塊為512MB,其他的”器映射見(jiàn)圖7-3,很多細(xì)節(jié)部分由半導(dǎo)體廠家自行定義。圖7-3Cortex-M3器映射預(yù)定STM32F10x系列器映射情況見(jiàn)圖7-4圖7-4STM32F1的器映射實(shí)通過(guò)把片上外設(shè)的寄存器映射到外設(shè)區(qū)就可以簡(jiǎn)單地以內(nèi)存的方式來(lái)這些外設(shè)的寄存器,從而控制外設(shè)的工作。結(jié)果,片上外設(shè)可以使用C語(yǔ)言來(lái)操作。這種預(yù)定義的映射關(guān)系,也使得對(duì)速度可以做高度的優(yōu)化,而且對(duì)0到4GB,這些地址的存在使得我們編程變得統(tǒng)一化、簡(jiǎn)單化。比如把 ~0x40010BFF總共0x3FF長(zhǎng)度的地址空間分配給PortA即端口A,端口A可以實(shí)現(xiàn)STM32的最基本功能:控制引腳輸出高低電平,實(shí)際上端口A總共有16個(gè)引腳的,定義為PA0~PA15,每個(gè)引腳都可以單獨(dú)控制的。當(dāng)然端口A現(xiàn)這么多復(fù)雜的功能,顯然就需要分配0x3FF長(zhǎng)度空間給它用才行(實(shí)際上一般都是用不完的)。這樣,比如,我們直接編寫程序往0x 0x0001就可以使得PA0這個(gè)引腳輸出高電平了,如果寫入是0x0003就可以使得PA0和PA1都輸出高電平。為什么會(huì)這樣子呢?因?yàn)樵赟TM32F103內(nèi)部硬 于GPIOA的BSRR(GPIOA_BSRR)”,它實(shí)際上就是0x 編寫程序時(shí)非常有用的,想象一下如果寫程序總得使用 這個(gè)數(shù)據(jù)寫的,在后面我們懂得時(shí)候自然會(huì)懂得真正的原理。位帶操CM3SRAM區(qū)的最低1MB范圍,第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低1MB范圍,圖7-3見(jiàn)中有“Bitbandregion”RAM一樣使用外,它們還都識(shí)有“Bitbandalias”字。7-5圖7-5有了位帶操作支持后,我們望0x 這個(gè)地址寫入數(shù)據(jù)1,就可以實(shí)現(xiàn)對(duì)0x 地址上的第0位設(shè)置為1,同樣的望0x 數(shù)據(jù)1,就可以實(shí)現(xiàn)對(duì)0x 地址上的第1位設(shè)置為1,以此類推。bit_word_addr=bit_band_base+(byte_offsetx32)+(bit_number×bit_band_base:byte_offset:包含目標(biāo)比特位的字節(jié)在位帶區(qū)的偏移值(字節(jié)數(shù)bit_number:目標(biāo)比特位在字節(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控制器與外設(shè),STM32F103支持的AHB總線最高頻率為72MHz。圖7-2SDIOAHB上之前,其他外設(shè)實(shí)際上是掛在APB1APB2總線上的,APB(AdvancedPeripheralBus,高級(jí)外設(shè)總線)是一種外圍總線,用于低帶寬的周邊外設(shè)之間的連接。其中STM32F103支持的APB1最高頻率36MHz,而APB2支持最高72MHzAHB的時(shí)鐘一般時(shí)鐘72MHz,那如何APB136MHz頻率呢?中間就是用來(lái)橋接器來(lái)實(shí)現(xiàn),功能類似電腦中的南橋、北橋,橋接器另外一個(gè)重要功能是位數(shù)的轉(zhuǎn)換,AHB32位的,但有些外設(shè)寄存器只有8位或者16位,這時(shí)就通過(guò)橋接器自動(dòng)轉(zhuǎn)換。使用外STM32的重點(diǎn)內(nèi)容,本文檔大篇幅內(nèi)容就是講解每個(gè)外設(shè)的STM32F10x內(nèi)部外設(shè)類型和資源參數(shù)見(jiàn)圖7-6,希望下圖可能幫助你文件深刻連接STM32F10x。圖7-6STM32F10x器的每一位都對(duì)應(yīng)不同的功能。CM332圖7-7STM32F103ZET6實(shí)物I/O是與外設(shè)緊密聯(lián)系的一個(gè)模塊,很多外設(shè)都有對(duì)應(yīng)的功能通道引腳,比GPIO外設(shè),STM32F103ZET6GPIOA,GPIOB…GPIOG7個(gè)GPIO模塊,每個(gè)都對(duì)應(yīng)有16個(gè)IO,該有144個(gè)引腳,除了電源部分、時(shí)鐘部分引腳外,大部分引腳都是GPIO的啦,功能強(qiáng)大,擁有眾多外設(shè),這樣PA9GPIO1的數(shù)據(jù)輸出引CM3內(nèi)核通過(guò)ICode從Flash程序,然后進(jìn)行計(jì)算,計(jì)算過(guò)程根據(jù)程序出對(duì)應(yīng)的動(dòng)作。CM3CM3內(nèi)核會(huì)與SRAM之間有頻繁的數(shù)據(jù)傳送過(guò)程。時(shí)鐘和我們還是更加詳細(xì)的講解一次吧。STM32有一個(gè)外設(shè):復(fù)位和時(shí)鐘控制(RCC)用復(fù)RCC_CSR寄存器中的復(fù)位標(biāo)志位和備份區(qū)域中的寄存器NRST引腳上的低電平(外部復(fù)位窗口看門狗計(jì)數(shù)終止(WWDG復(fù)位獨(dú)立看門狗計(jì)數(shù)終止(IWDG復(fù)位軟件復(fù)位(SW復(fù)位以 在STM32F10xxx里,可以通過(guò)BOOT[1:0]引腳選擇三種不同啟動(dòng)模表格7-1X0器01器11在系統(tǒng)復(fù)位后,SYSCLK4個(gè)上升沿,BOOT引腳的值將被鎖存。用戶可以通過(guò)設(shè)置BOOT1和BOOT0引腳的狀態(tài),來(lái)選擇在復(fù)位后的啟動(dòng)模式。因?yàn)楣潭ǖ钠饔诚?,代碼區(qū)始終從地址0x00000000開始(通過(guò)ICode和DCode總線),而數(shù)據(jù)區(qū)(SRAM)始終從地址0x20000000開始(通過(guò)系統(tǒng)總線訪問(wèn))。Cortex-M3CPU始終ICode總線獲取復(fù)位向量,即啟動(dòng)僅適合于從代碼區(qū)開始(典型地Flash啟動(dòng))。STM32F10xxx微控制器實(shí)現(xiàn)了一個(gè)特殊的機(jī)制,系統(tǒng)可以不僅僅從Flash器或系統(tǒng)器啟動(dòng),還可以從內(nèi)置SRAM啟根據(jù)選定的啟動(dòng)模式,主閃存器、系統(tǒng)器或SRAM可以按照以下方從主閃存器啟動(dòng):主閃存器被映射到啟動(dòng)空間(0x0000000),但仍然能夠在它原有的地址(0x08000000)它,即閃存器的內(nèi)容可以在兩個(gè)地址區(qū)域,x 或x0000。從系統(tǒng)器啟動(dòng):系統(tǒng)器被映射到啟動(dòng)空間(0x00000000),但仍然能夠在它原有的地址(0x1FFFF000)它。從內(nèi)置SRAM啟動(dòng):只能在0x20000000開始的地址區(qū)SRAM內(nèi)嵌的自舉程內(nèi)嵌的自舉程序(Bootloader)存放在系統(tǒng)區(qū),由ST在生產(chǎn)線上寫入,于通過(guò)可用的串行接口USART1對(duì)閃存器進(jìn)行重新編程(ISP方式的可 圖7-8圖7-9時(shí)鐘使用STM32CubeMX7-10STM32F10x時(shí)鐘的生IWDG(獨(dú)立看門狗)、FLITFCLK(閃存器接口)時(shí)鐘、SYSCLK(系統(tǒng)時(shí)鐘)和USB時(shí)需要使用LSE(低速時(shí)鐘),該時(shí)鐘一般來(lái)源于外接的32.768KHz的晶振,正如YS-F1Pro開發(fā)板設(shè)計(jì)的。獨(dú)立看門狗只能使用內(nèi)的40KHz時(shí)鐘源LSIRC。FLITFCLK只能使用內(nèi)部的8MHz時(shí)鐘源HSIRC。是直接使用內(nèi)部的8MHz時(shí)鐘源HSIRC,顯然直接使用這個(gè)很浪費(fèi)資源,本來(lái)可以跑72MHz的,現(xiàn)在拿來(lái)跑8MHz,所以這種一般都不會(huì)使用。第2種是直接我們需要外接72MHz的晶振,這個(gè)出于成本考慮,一般也不用。第3種是把外接時(shí)鐘源或者內(nèi)部8MHz時(shí)鐘源的2分頻接入到PLL(鎖相環(huán))倍頻得到8MHz72MHz8MHz的晶振時(shí)鐘源HSE而不會(huì)選擇內(nèi)部的HISRC,一個(gè)是出于穩(wěn)定性考慮,另外8MHz的晶振成USBPLLCLK11.5分頻得到,USB主時(shí)鐘輸STM32F10xMCO,可以選擇使能輸出時(shí)鐘脈率過(guò)50MHz。外設(shè)時(shí)鐘的配AHB總線頻率(HCLK)SYSCLK72MHz,所以一1分頻。I2S2I2S2HCLK的時(shí)鐘,F(xiàn)SMC、SDIO等等外設(shè)也是使用HCLK做為時(shí)鐘源。APB1APB2HCLKPCLK1(APB1總線頻率)36MHzPCLK2(APB2總線頻率)72MHz7-2中APB1DAC、I2C、USART2、USART3、SPI2/I2S、TIM2、TIM3等等,掛在APB2總線上的外設(shè)有ADC、USART1、TIM1、TIM8、GPIOX(A..G)、EXTI、AFIO等等。另外,ADCAPB2ADC支持的最高時(shí)鐘頻率為14MHz。 前面已經(jīng)介紹,Cortex-M3內(nèi)核是STM32F10x的CPU,那究竟CM3內(nèi)CM3內(nèi)核簡(jiǎn)化模CM3CPU那么強(qiáng)大,但麻雀雖小五臟俱全,很多通信與CPUCPUCM38-18-1圖8-1CM3統(tǒng)用于系統(tǒng)當(dāng)前運(yùn)行狀態(tài);總線系統(tǒng)用于程序、數(shù)據(jù)傳輸,與上一章內(nèi)容都是相通的,其中MPU只有部分型號(hào)才擁有的。所以我們最需要分析的取指單CPU所能夠處理的全部指令的集合,也CPUCPU能夠運(yùn)行什取值階段從器指令字節(jié),放到指令器(CPU中)中,地址為程序KeilIARC語(yǔ)言編寫可以實(shí)現(xiàn)項(xiàng)目要求的程載到STM32內(nèi)運(yùn)行。這里的“可執(zhí)行文件”就是完成我們項(xiàng)目目的的指令及數(shù)據(jù)的集合。這里,Keil或者IAR軟件可以幫助C語(yǔ)言文件(*.c和*.h)以及部分必要的匯編文件(*.asm)STM32可以“識(shí)別”的語(yǔ)言文件,那我們把該文件到STM32內(nèi)就可以正確的運(yùn)行,大致流程見(jiàn)圖8-2。圖8-2器CPU的指令集架構(gòu)定義將數(shù)值解譯為指令。一部分的指(Opcode寄存器Cortex‐M3R0‐R158-3MSPPSP圖8-3Cortex‐M38-1表格8-1寄存 功記錄ALU標(biāo)志(0標(biāo)志,進(jìn)位標(biāo)志,負(fù)數(shù)標(biāo)志,溢出標(biāo)志除能所有的中斷——當(dāng)然了,不可中斷(NMI)才不甩fault——NMI會(huì)“算術(shù)邏輯運(yùn)算單算術(shù)邏輯單元ithmeicandloicunit)是能實(shí)現(xiàn)多組算術(shù)運(yùn)算和邏輯運(yùn)算的組合邏輯電路,簡(jiǎn)稱ALU。它是處理器(U)的執(zhí)行單元,是所有處理器的組成部分,由"AndGate"(與門)和"rGate"(或門)構(gòu)成的算術(shù)邏輯單元,主要功能是進(jìn)行二位元的算術(shù)運(yùn)算,如加減乘(不包括整數(shù)除法)。CM3內(nèi)核CM3ALU可以執(zhí)行定點(diǎn)或浮點(diǎn)(部分型號(hào)微控制器才可以)算術(shù)進(jìn)行所需運(yùn)算的CPU部件。數(shù)的,可見(jiàn)該ALU功能多強(qiáng)大。存器里可能會(huì)設(shè)置運(yùn)算溢出(ArithmeticOverflow)標(biāo)志。器接中斷控制在ARM編程領(lǐng)域中,凡是打斷程序順序執(zhí)行的事件,都被稱為異常Cortex‐M3在內(nèi)核水平上搭載了一顆中斷控制器——嵌套向量中斷控制器NVIC(NestedVectoredInterruptController)CPU對(duì)中斷的響應(yīng),特NVICCM3會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出ISR的地址,然后跳轉(zhuǎn)過(guò)去執(zhí)行。中斷可:既可以優(yōu)先級(jí)低于某個(gè)閾值的中斷/異常[譯注8](設(shè)置BASEPRI寄存器),也可以全體(設(shè)置PRIMASK和FAULTMASK寄存器)。流水Cortex‐M333級(jí)分別是:取指,解碼和執(zhí)行,見(jiàn)圖8-4:

圖8-4其他指令將會(huì)被放棄,而處理器將從向量表的適當(dāng)開始填充流水線。不論是執(zhí)行16位指令還是32位指令,PC時(shí),會(huì)返回當(dāng)前指令地址+4調(diào)試系一直以來(lái),單片機(jī)的調(diào)試一直不是很突出的,很多簡(jiǎn)單些的程序在開發(fā)使用仿真器,可以方便地實(shí)現(xiàn)這些基本的調(diào)試要求。在開發(fā)比較大的應(yīng)用程序CM3內(nèi)核會(huì)有一點(diǎn)的了解的,CM3內(nèi)CPUCPU的寄存 晶體(tatr)控制輸出電流。與普通機(jī)械開關(guān)(如Relay、switch)不同,晶體管利用電訊號(hào)來(lái)控制自身的開,而且開速度可以??欤械那兴俣瓤蛇_(dá)Gz以的二極管、三極管、場(chǎng)效應(yīng)管(MOS管)、可控硅(晶閘管)等。晶體管有時(shí)多指晶體三極管,結(jié)構(gòu)示意見(jiàn)圖8-5。圖8-5非圖8-6Vi為高電平(即數(shù)字電路的“1”)時(shí),Vo為低電平((即數(shù)字電路的“0”);Vi為低電平(即數(shù)字電路的“0”)時(shí),Vo為高電平((即數(shù)字電路的圖8-7TTL8-8圖8-8TTL可以實(shí)現(xiàn)的電路效果與圖8-7是一樣的。與非現(xiàn)電路見(jiàn)圖8-9圖8-9與非門。圖8-98-108-11圖8-10圖8-11在上一章中有講到,CM3ALU是有與門、或門構(gòu)成的,這樣我們具體見(jiàn)表格8-2:表格8-2鎖存鎖存器(ath)是一種對(duì)脈沖電平敏感的單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號(hào)暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存。在數(shù)字電路中則可以記錄二進(jìn)制數(shù)字信號(hào)“0”和“1所謂鎖存器,就是輸出端的狀態(tài)不會(huì)隨輸入端的狀態(tài)變化而變化,僅在有鎖存信號(hào)時(shí)輸入的狀態(tài)才被保存到輸出,直到下一個(gè)鎖存信號(hào)到來(lái)時(shí)才改變。S2和32S鎖存器,實(shí)際應(yīng)用中一般會(huì)進(jìn)行各種改造和擴(kuò)展,至少會(huì)加一個(gè)輸入端作為控制信號(hào),見(jiàn)圖8-14和圖8-15,該信號(hào)有效時(shí),鎖存器能持續(xù)地輸入、輸出數(shù)據(jù)。其控制信號(hào)一般為高電平,因此鎖存器是一種對(duì)脈沖電平敏感的單元電路,可圖8-12R-S圖8-13R-S圖8-14圖8-15鎖存器的最主要作用是緩存,除了特殊用途如異步電路或很簡(jiǎn)單的邏輯,其他場(chǎng)合已經(jīng)很少直接應(yīng)用鎖存器,因?yàn)槠浣Y(jié)構(gòu)簡(jiǎn)單而且對(duì)電平敏感,不適合在主流的對(duì)時(shí)鐘敏感的集成電路中應(yīng)用。一般都是使用以鎖存器為基礎(chǔ)的觸發(fā)器或寄觸發(fā)在實(shí)際的數(shù)字系統(tǒng)中往往包含大量的單元而且經(jīng)常要求他們?cè)谕粫r(shí)刻同步動(dòng)作為達(dá)到這個(gè)目的在每個(gè)單元電引入一個(gè)時(shí)鐘脈(CLK)作為控制信號(hào),只有當(dāng)CLK到來(lái)時(shí)電路才被“觸發(fā)”而動(dòng)作,并根據(jù)輸入信號(hào)改變輸出狀態(tài)。把這種在時(shí)鐘信號(hào)觸發(fā)時(shí)才能動(dòng)作的單元電路稱為觸發(fā)器,以在R-S鎖存器的前面加一個(gè)由兩個(gè)與門和一個(gè)非門構(gòu)成的附加電路D觸發(fā)器,見(jiàn)圖8-16圖8-16D當(dāng)時(shí)鐘脈沖CP為1時(shí),讀入輸入端D的數(shù)據(jù)并傳至輸出CP為0時(shí),根據(jù)與門“只要有一個(gè)輸入端為0則輸出為0”的特性,輸入端D的數(shù)據(jù)被與門了,無(wú)法到達(dá)輸出端,不管輸入D怎樣變化,Q端輸出值都保持不變,只有等到下一個(gè)CP高電平到來(lái)時(shí),才會(huì)把當(dāng)前的D值送出。這樣就實(shí)現(xiàn)了延遲輸出CP為1時(shí),能觸發(fā)后面的鎖存器把D的值暫時(shí)鎖存起來(lái),這也正是觸發(fā)器名詞中“觸發(fā)”的含義,這正是觸發(fā)器與鎖存器的聯(lián)系與區(qū)別:觸發(fā)器利用了鎖存器的保存原理,但是加上了觸發(fā)功能,可以控制保存的時(shí)間。寄存起來(lái)就能構(gòu)成一個(gè)n位二進(jìn)制碼的寄存器,圖8-17為一個(gè)4位寄存器設(shè)計(jì)圖8-174寄存器應(yīng)用分序要求,比如ALU中的累加器ACC。而接口寄存器可以同時(shí)被內(nèi)部電路和外部電路編程用戶所熟知,比如控制端口A輸出高電平的GPIOA_BSRR。 這些地址空間具體有什么意義呢?這個(gè)由微控制器決定的,通過(guò)微控制器的技術(shù)手冊(cè)都是可以找到資料的,這些空間一般都是寄存器。我們來(lái)看STM32F103ZET6對(duì)0x ~0x40010BFF這段空間的使用,見(jiàn)表格8-3:表格8-3GPIO表格第1列是地址偏移,對(duì)于GPIOA來(lái)說(shuō)址就是0x GPIOB來(lái)說(shuō)址為0x40010C00,這與圖7-4不同外設(shè)的器映射地址是想對(duì)應(yīng)的,使用地址偏移表示好處就是不用重復(fù)寫,我們知道STM32F103ZET6芯GPIO,而不用為每個(gè)GPIO建立一個(gè)表格。對(duì)GPIOA來(lái)說(shuō),地址偏移0x04,即 ,定義為GPIOA_CRH寄存器,該寄存器總共有32位(STM32的寄存器都是32位的),每一位都有特定的功能用途(可能有些其他寄存器位是保留1位,這兩位組合決定著PA8這個(gè)引腳的模式,具體看表格8-4:表格8-445PA923位這里再次強(qiáng)調(diào)一點(diǎn),這些位的具體功能定義是有STM32F103ZET6決定的,出廠之前就已經(jīng)設(shè)計(jì)好的,具體在STM32F103ZET6技術(shù)手冊(cè)是可以查在用軟件編程時(shí)我們可以直接給0x 式,參考代碼8-1:代碼8-10101volatileuint32_t //定義一個(gè)中間變量,用于保存原先寄存器03//這里 04//通過(guò)指針運(yùn)算符*(即下面語(yǔ)句第一個(gè)“*”)可以得到該地址實(shí)際存放的數(shù);)); //))=reg;//把新reg值保存到地把上面代碼編譯并到開發(fā)板運(yùn)行后,就可以把GPIOA_CRH寄存器的010102))=1;//使用位帶操作實(shí)現(xiàn)與上面代碼相同功01reg=(*((01reg=(*((uint32_t 01#define03reg=(*((uint32_t*)我們根本不知體什么意思,因?yàn)槲覀儾恢赖刂?x 01#define03reg=(*((uint32_t*)GPIOAHAL庫(kù)代碼形些累贅。所以ST為推行他們的就專門設(shè)計(jì)了一個(gè)軟件函數(shù)庫(kù),方便使用者編寫程序——HAL庫(kù)。8-3GPIO總共有GPIOG都擁有獨(dú)立的這7個(gè)寄存器,每個(gè)寄存器的地址都是不同的。代碼8-2GPIO0101 03typedefstructIOuint32_tCRL;GPIO端口配置低寄存器0~7引IOuint32_tCRH;GPIO端口配置高寄存器8~15引IOuint32_tIDR;GPIO端口輸入數(shù)據(jù)寄存IOuint32_tODR;GPIO端口輸出數(shù)據(jù)寄存IOuint32_tBSRRGPIO端口位設(shè)置/清除寄存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類型))強(qiáng)制轉(zhuǎn)換成這里把GPIOA定義為GPIOA_BASE,GPIOA_BASE就是端口A的址,這在圖7-4就可以清楚看到;然而單單把GPIOA定義為端口A的址看不到特殊的地方,真正高能的地方是(GPIO_TypeDef*)這個(gè)前綴的作用,它把GPIOA強(qiáng)制單的就把GPIO_TypeDef結(jié)構(gòu)體成員與寄存器地址一一對(duì)應(yīng)起來(lái),比如語(yǔ)句GPIOA->CRH實(shí)際等效于(*((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ù)使用方法示這里先重點(diǎn)看HAL_GPIO_WritePin函數(shù),它有三個(gè)形參,第一個(gè)是用于指定端口引腳,一般用GPIO_PIN_0、GPIO_PIN_1等等賦值;第三個(gè)是想要HAL_GPIO_WritePin函數(shù)只是HAL庫(kù)里邊一個(gè)最最簡(jiǎn)單的函數(shù)了,HAL庫(kù)還HALHAL第9章GPIO細(xì)分析代碼實(shí)現(xiàn)方法。首先,我們需要解釋STM32的GPIO外設(shè),同時(shí)解決上一章GPIOGPIO(GeneralPurposeInputOutput)STM32的一種外設(shè),與大部分引腳直接掛鉤,STM32F103ZET6總共有7個(gè)GPIO外設(shè),定義16個(gè)引腳PA0..PA15、PB0..PB15等等,總共112GPIO引腳,這些引腳在的實(shí)際發(fā)布情況參考表格1-2。GPIO最簡(jiǎn)單的功能是輸出高低電平,GPIO還可以被設(shè)置為輸入功能,用于GPIO共用的,具體引腳功能可以通過(guò)軟件編程設(shè)置對(duì)應(yīng)的寄存器內(nèi)容實(shí)現(xiàn)的,STM32F10xGPIO的基本結(jié)構(gòu)見(jiàn)圖9-1。圖9-1GPIO圖中最右邊的“I/O引腳”就是實(shí)物的引腳,焊接時(shí)用到。保護(hù)二極管用注意保護(hù),必要時(shí)設(shè)計(jì)引腳保護(hù)電路。做為普通的輸入引腳,I/O引腳的電平通過(guò)觸發(fā)器后保存在輸入數(shù)據(jù)寄存器內(nèi)。圖中下半部分是引腳輸出功能,通過(guò)一個(gè)PMOS管和一個(gè)NMOS管組合而GPIO78-3,每個(gè)寄存器每一位基文).pdf》(附件3)。為實(shí)現(xiàn)不同工作條件要求,GPIO8GPIOx_CRLGPIOx_CRH9-表格9-1GPIOGPIOx_CRLGPIOx_CRH1000輸入浮GPIOx_CRLGPIOx_CRH寄存器CNF[1:0]位設(shè)置01MODE[1:0]下拉。浮空輸入模式下GPIO結(jié)構(gòu)中信號(hào)流向見(jiàn)圖9-2。圖9-2I/O引腳信號(hào)接入到施密特觸發(fā)器的輸入端,在每來(lái)一個(gè)APB2時(shí)鐘脈沖就外,CPU隨時(shí)都可以寄存器數(shù)據(jù),從而得知當(dāng)前引腳狀態(tài)。輸入上拉模輸出數(shù)據(jù)寄存

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論