日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F429IGT6入门(一)

發布時間:2024/1/1 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F429IGT6入门(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

終于比完了賽也收拾完了學校一切的事務,終于有時間來學習自己喜歡的東西了!!(搓手手)最開始我準備用開發板學習,我使用的開發板是STM32F429挑戰者V2和V1,所以我迫不及待地下載了keil 5 和裝上了pack包,然后就遇到了小問題:

由于這個問題會導致我下不進程序,會使我出現以下的錯誤:

Error: Flash Download failed - Target DLL has been cancelled

SWD/JTAG Communication Failure

....

終于花了半個晚上,找到了原因以及解決方法:

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'

這是出現問題報錯的語句,出現這個問題有可能是因為keil版本的問題也有可能是pack包版本過低所導致的,它的原意是STM32FXX_DEF文件中的Message函數不能正常識別,它也可以通過重裝軟件解決,可這有點繁瑣,所以我上網找到了如下的方法:

  • 復制報錯的文件路徑,找到pdsc文件。

  • 更改pdsc的屬性,右鍵點擊此文件,將只讀屬性取消。

  • 取消后,打開pdsc文件,找到對應message函數,將Message(2, "Not a genuine ST Device! Abort connection.");刪除即可。

  • 最后,將屬性改回只讀,就可以編譯并且下載程序了!

    在解決這個問題的時候也有一些發現,剛開始以外是芯片的問題,于是就研究了BOOT IO的啟動方式,它的啟動方式如下:

    STM32芯片上有兩個管腳BOOT0和BOOT1,這兩個管腳在芯片復位時的電平狀態決定了芯片復位后從哪個區域開始執行程序。

    BOOT1 = XBOOT0 = 0從用戶閃存(flash)啟動,這是正常模式
    BOOT1 = 0BOOT0 = 1從內置SRAM(內存)啟動,這是調試模式
    BOOT1 = 1BOOT0 = 1從系統存儲器啟動,這種模式也可以用于調試


那么解決了基本的問題,那就開始學習吧🤦?♀?首先是初識STM32。

STM32作為一個微控制器,內核為Cortex-M4,主頻為180M,自帶了各種常用通信接口,功能有如下:

  • 串口(USART)-- Usb轉串口模塊、ESP8266、WIFI、GPS、GSM、串口屏、指紋識別...

  • 內部集成電路(IIC) -- EEPROM 、 電容屏 、 陀螺儀MPU6050、OLED...

  • 串行通信借口(SPI) -- 串行FLASH 、 以太網 W5500 、 音頻模塊VS1053 ...

  • SDIO \ FMC \ I2S \ SAI \ ADC \GPIO ...

存儲器映射:存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲器分配地址的過程就稱為存儲器映射。

序號用途地址范圍
Block 0SRAM(FLASH)0x0000 0000 ~ 0x1FFF FFFF(512MB)
Block 1SRAM0x2000 0000 ~ 0x3FFF FFFF(512MB)
Block 2片上外設0x4000 0000 ~ 0x5FFF FFFF(512MB)
Block 3FMC的bank1 ~ bank20x6000 0000 ~ 0x7FFF FFFF(512MB)
Block 4FMC的bank3 ~ bank40x8000 0000 ~ 0x9FFF FFFF(512MB)
Block 5FMC0xA000 0000 ~ 0xCFFF FFFF(512MB)
Block 6FMC0xD000 0000 ~ 0xDFFF FFFF(512MB)
Block 7Cortex-M4內部外設0xE000 0000 ~ 0xFFFF FFFF(512MB)

寄存器映射(是我們最為熟悉的):在存儲器Block2這塊區域,設計的是片上外設,它們以四個字節為一個單位,共32bit,每一個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。我們可以找到每個單元的起始地址,然后通過C語言指針的操作方式來訪問這些單元,如果每次都是通過這種地址來訪問,不僅不好記憶而且還容易出錯,這時我們可以根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們常說的寄存器。這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。

// GPIOH 端口全部輸出 高電平

#define GPIOH_ODR (unsignedint*)(0x40021C14)

*GPIOH_ODR = 0xFF;


GPIO八種模式 typedef enum { GPIO_Mode_AIN = 0x0, /* 模擬輸入 */ GPIO_Mode_IN_FLOATING = 0x04, /* 浮空輸入,復位后的狀態 */ GPIO_Mode_IPD = 0x28, /* 下拉輸入 */ GPIO_Mode_IPU = 0x48, /* 上拉輸入 */ GPIO_Mode_Out_OD = 0x14, /* 開漏輸出 */ GPIO_Mode_Out_PP = 0x10, /* 推挽輸出 */ GPIO_Mode_AF_OD = 0x1C, /* 復用開漏輸出 */ GPIO_Mode_AF_PP = 0x18 /* 復用推挽輸出 */ }GPIOMode_TypeDef;

端口配置低寄存器 (GPIOx_CRL)(x = A...E)

端口配置高寄存器(GPIOx_CRH)(x = A...E)

端口端口輸入數據寄存器(GPIOx_IDR)(x = A...E):這些位為只讀并只能以字(16位)的形式讀出。讀出的值為對應I/O口的狀態。

端口輸出數據寄存器(GPIOx_ODR)(x = A...E):只能以字(16bit)的形式操作,復位值全是0。寫0即輸出0,寫1即輸出1。

端口位設置/清除寄存器(GPIOx_BSRR)(x = A...E):高16bit寫1用于清0,低16bit寫1用于置位,同時寫1的話低16bi有效。

端口位清除寄存器(GPIOx_BRR)(x = A...E):低16位寫1用于置位。

端口配置鎖定寄存器(GPIOx_LCKR)(x = A...E)

總結

以上是生活随笔為你收集整理的STM32F429IGT6入门(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。