STM32F429IGT6入门(一)
終于比完了賽也收拾完了學(xué)校一切的事務(wù),終于有時(shí)間來(lái)學(xué)習(xí)自己喜歡的東西了!!(搓手手)最開(kāi)始我準(zhǔn)備用開(kāi)發(fā)板學(xué)習(xí),我使用的開(kāi)發(fā)板是STM32F429挑戰(zhàn)者V2和V1,所以我迫不及待地下載了keil 5 和裝上了pack包,然后就遇到了小問(wèn)題:
由于這個(gè)問(wèn)題會(huì)導(dǎo)致我下不進(jìn)程序,會(huì)使我出現(xiàn)以下的錯(cuò)誤:
Error: Flash Download failed - Target DLL has been cancelled
SWD/JTAG Communication Failure
....
終于花了半個(gè)晚上,找到了原因以及解決方法:
File : D:\keil4\ARM\PACK\Keil\STM32F4xx_DFP\2.12.0\Keil.STM32F4xx_DFP.pdsc
Context : Item #1: <control if="jep106id != 0x20"> Item #0: <block>::Line 2 Expression : " Message(2, "Not a genuine ST Device! Abort connection.");" ----------------------------^ E203 : Undefined identifier - function 'Message'
這是出現(xiàn)問(wèn)題報(bào)錯(cuò)的語(yǔ)句,出現(xiàn)這個(gè)問(wèn)題有可能是因?yàn)閗eil版本的問(wèn)題也有可能是pack包版本過(guò)低所導(dǎo)致的,它的原意是STM32FXX_DEF文件中的Message函數(shù)不能正常識(shí)別,它也可以通過(guò)重裝軟件解決,可這有點(diǎn)繁瑣,所以我上網(wǎng)找到了如下的方法:
-
復(fù)制報(bào)錯(cuò)的文件路徑,找到pdsc文件。
-
更改pdsc的屬性,右鍵點(diǎn)擊此文件,將只讀屬性取消。
-
取消后,打開(kāi)pdsc文件,找到對(duì)應(yīng)message函數(shù),將Message(2, "Not a genuine ST Device! Abort connection.");刪除即可。
-
最后,將屬性改回只讀,就可以編譯并且下載程序了!
在解決這個(gè)問(wèn)題的時(shí)候也有一些發(fā)現(xiàn),剛開(kāi)始以外是芯片的問(wèn)題,于是就研究了BOOT IO的啟動(dòng)方式,它的啟動(dòng)方式如下:
STM32芯片上有兩個(gè)管腳BOOT0和BOOT1,這兩個(gè)管腳在芯片復(fù)位時(shí)的電平狀態(tài)決定了芯片復(fù)位后從哪個(gè)區(qū)域開(kāi)始執(zhí)行程序。
BOOT1 = XBOOT0 = 0從用戶閃存(flash)啟動(dòng),這是正常模式 BOOT1 = 0 BOOT0 = 1 從內(nèi)置SRAM(內(nèi)存)啟動(dòng),這是調(diào)試模式 BOOT1 = 1 BOOT0 = 1 從系統(tǒng)存儲(chǔ)器啟動(dòng),這種模式也可以用于調(diào)試
那么解決了基本的問(wèn)題,那就開(kāi)始學(xué)習(xí)吧🤦?♀?首先是初識(shí)STM32。
STM32作為一個(gè)微控制器,內(nèi)核為Cortex-M4,主頻為180M,自帶了各種常用通信接口,功能有如下:
-
串口(USART)-- Usb轉(zhuǎn)串口模塊、ESP8266、WIFI、GPS、GSM、串口屏、指紋識(shí)別...
-
內(nèi)部集成電路(IIC) -- EEPROM 、 電容屏 、 陀螺儀MPU6050、OLED...
-
串行通信借口(SPI) -- 串行FLASH 、 以太網(wǎng) W5500 、 音頻模塊VS1053 ...
-
SDIO \ FMC \ I2S \ SAI \ ADC \GPIO ...
存儲(chǔ)器映射:存儲(chǔ)器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲(chǔ)器分配地址的過(guò)程就稱為存儲(chǔ)器映射。
| Block 0 | SRAM(FLASH) | 0x0000 0000 ~ 0x1FFF FFFF(512MB) |
| Block 1 | SRAM | 0x2000 0000 ~ 0x3FFF FFFF(512MB) |
| Block 2 | 片上外設(shè) | 0x4000 0000 ~ 0x5FFF FFFF(512MB) |
| Block 3 | FMC的bank1 ~ bank2 | 0x6000 0000 ~ 0x7FFF FFFF(512MB) |
| Block 4 | FMC的bank3 ~ bank4 | 0x8000 0000 ~ 0x9FFF FFFF(512MB) |
| Block 5 | FMC | 0xA000 0000 ~ 0xCFFF FFFF(512MB) |
| Block 6 | FMC | 0xD000 0000 ~ 0xDFFF FFFF(512MB) |
| Block 7 | Cortex-M4內(nèi)部外設(shè) | 0xE000 0000 ~ 0xFFFF FFFF(512MB) |
寄存器映射(是我們最為熟悉的):在存儲(chǔ)器Block2這塊區(qū)域,設(shè)計(jì)的是片上外設(shè),它們以四個(gè)字節(jié)為一個(gè)單位,共32bit,每一個(gè)單元對(duì)應(yīng)不同的功能,當(dāng)我們控制這些單元時(shí)就可以驅(qū)動(dòng)外設(shè)工作。我們可以找到每個(gè)單元的起始地址,然后通過(guò)C語(yǔ)言指針的操作方式來(lái)訪問(wèn)這些單元,如果每次都是通過(guò)這種地址來(lái)訪問(wèn),不僅不好記憶而且還容易出錯(cuò),這時(shí)我們可以根據(jù)每個(gè)單元功能的不同,以功能為名給這個(gè)內(nèi)存單元取一個(gè)別名,這個(gè)別名就是我們常說(shuō)的寄存器。這個(gè)給已經(jīng)分配好地址的有特定功能的內(nèi)存單元取別名的過(guò)程就叫寄存器映射。
// GPIOH 端口全部輸出 高電平
#define GPIOH_ODR (unsignedint*)(0x40021C14)
*GPIOH_ODR = 0xFF;
GPIO八種模式 typedef enum { GPIO_Mode_AIN = 0x0, /* 模擬輸入 */ GPIO_Mode_IN_FLOATING = 0x04, /* 浮空輸入,復(fù)位后的狀態(tài) */ GPIO_Mode_IPD = 0x28, /* 下拉輸入 */ GPIO_Mode_IPU = 0x48, /* 上拉輸入 */ GPIO_Mode_Out_OD = 0x14, /* 開(kāi)漏輸出 */ GPIO_Mode_Out_PP = 0x10, /* 推挽輸出 */ GPIO_Mode_AF_OD = 0x1C, /* 復(fù)用開(kāi)漏輸出 */ GPIO_Mode_AF_PP = 0x18 /* 復(fù)用推挽輸出 */ }GPIOMode_TypeDef;
端口配置低寄存器 (GPIOx_CRL)(x = A...E)
端口配置高寄存器(GPIOx_CRH)(x = A...E)
端口端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x = A...E):這些位為只讀并只能以字(16位)的形式讀出。讀出的值為對(duì)應(yīng)I/O口的狀態(tài)。
端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x = A...E):只能以字(16bit)的形式操作,復(fù)位值全是0。寫(xiě)0即輸出0,寫(xiě)1即輸出1。
端口位設(shè)置/清除寄存器(GPIOx_BSRR)(x = A...E):高16bit寫(xiě)1用于清0,低16bit寫(xiě)1用于置位,同時(shí)寫(xiě)1的話低16bi有效。
端口位清除寄存器(GPIOx_BRR)(x = A...E):低16位寫(xiě)1用于置位。
端口配置鎖定寄存器(GPIOx_LCKR)(x = A...E)
總結(jié)
以上是生活随笔為你收集整理的STM32F429IGT6入门(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 卷积神经网络实战之LeNet5股票预测代
- 下一篇: 帆软单选按钮实例_HTML单选按钮示例教