STM32F4標準外設庫模板工程建立與使用

SW4STM32安裝

其實固件庫安裝過程很簡單,在第一次新建工程時會提示選擇使用Stdperiph 驅動還是Cube HAL,由於Stm32官方大力推行Cube HAL固件庫,所以Cube HAL的固件庫直接可以從網上直接一鍵下載安裝。然而對於老的StdPeriph固件庫不能一鍵式下載安裝,會提示出錯。所以,我們需要自己下載一個.zip固件包,放在C:\Users\LY\AppData\Roaming\Ac6\SW4STM32\firmwares文件夾下,其中的LY就是計算機的用戶名。然後新建工程時在選擇Stdperiph固件時會自動解壓縮,這樣就能使用該庫進行編譯了。界面如下所示:
在這裏插入圖片描述

工程配置

器件與時鐘

在這裏插入圖片描述
或者,
在這裏插入圖片描述
在這裏插入圖片描述
修改晶振與時鐘,根據註釋可以算得sysclk爲168MHz
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

FSMC和FMC

STM32F4的某些系列是FSMC,有些是FMC
在這裏插入圖片描述
在這裏插入圖片描述

浮點處理器FPU

http://www.stmcu.org/module/forum/thread-581903-1-1.html
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
打開 option for target 選擇 C/C++ 標籤, 在define中添加:USE_HAL_DRIVER,STM32F407xx,__TARGET_FPU_VFP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,ARM_MATH_CM4,__CC_ARM,由於我的是HAL的庫,所以前面有USE_HAL_DRIVER的全局宏定義,如果你用的不是HAL庫,而是使用固件庫的話,一般會有固件庫的一個全局宏定義USE_STDPERIPH_DRIVER和STM32F4XXxx在裏面,這在固件庫中的例子工程中都會有這個的。所以,我這裏只需要添加
__TARGET_FPU_VFP,
ARM_MATH_MATRIX_CHECK,
ARM_MATH_ROUNDING,
ARM_MATH_CM4,
__CC_ARM
注意中間用英文逗號分開。其中ARM_MATH_MATRIX_CHECK是庫函數的參數檢查開關,這裏添加後,就打開。ARM_MATH_ROUNDING這個是庫函數在運算是是否開啓四捨五入的功能,我這裏添加,可以根據自己的需要進行配置。ARM_MATH_CM4這個就非常重要,必須要配置進去,否則在編譯之後,會默認使用math.h的庫函數,而不會用到硬件的FPU的。__CC_ARM是不同編譯器的編譯配置宏定義,__CC_ARM就是代表MDK開發環境。
打開工程中的 stm32f407xx.h 文件,注意不是 stm32f4xx.h 文件,是和你的芯片型號對應的頭文件,比如我用的是STM32F407,所以我這裏就選擇打開stm32f407xx.h文件,找到
#define __FPU_PRESENT 0 /!< FPU present 這一句,將設置爲 1
找到
#include “core_cm4.h” /
Cortex-M4 processor and core peripherals */
#include “system_stm32f4xx.h”
#include <stdint.h>
這個地方,然後在下面添加
#include “arm_math.h”
然後保存。

ARM_MATH_CM4
ARM_MATH_MATRIX_CHECK
ARM_MATH_ROUNDING
__FPU_PRESENT
__FPU_USED

代碼優化

http://www.stmcu.org/module/forum/thread-603791-1-1.html

網線熱插拔

http://blog.csdn.net/xukao5671927/article/details/77765464

JTAG引腳複用

STM32f1 中JTAG 引腳作爲普通IO口設置方法以及STM32f4中的方法的不同

在stm32f1中,我們對於不用的jtag引腳做io使用時,會使用以下步驟:(下面內容來自網絡)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

/**********************
1.執行端口重映射時,複用功能時鐘得使能:RCC_APB2Periph_AFIO

GPIO_Remap_SWJ_Disable
!< Full SWJ Disabled (JTAG-DP + SW-DP)
此時PA13|PA14|PA15|PB3|PB4都可作爲普通IO用了

爲了保存某些調試端口,GPIO_Remap_SWJ_Disable也可選擇爲下面兩種模式:

GPIO_Remap_SWJ_JTAGDisable
!< JTAG-DP Disabled and SW-DP Enabled
此時PA15|PB3|PB4可作爲普通IO用了
GPIO_Remap_SWJ_NoJTRST
!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
此時只有PB4可作爲普通IO用了
**********************/

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //使能禁止JTAG
//初始化GPIOB 推輓輸出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);
//初始化GPIOA 推輓輸出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

但是在stm32f4中不是這樣的,STM32F4庫函數中,已經取消了GPIO_PinRemapConfig()函數,對於複用功能,使用GPIO_PinAFConfig()函數了!
但是在GPIO_PinAFConfig()函數已經沒有禁止JTAG/SW等選項了,而是複用到AF0~AF15線上,其中AF0是系統功能,STM32F4復位後JTAG對應的管腳的對應的功能就是AF0,(GPIO_AF_MCO=0) 所以這句可以不用:GPIO_PinAFConfig( , ,GPIO_AF_MCO);
直接配置GPIOx_MODER爲輸出,或輸入模式即可,但是注意:STM32F4復位後JTAG對應的管腳的GPIOx_MODER值是0x02,即 複用功能!
所以直接配置GPIOx_MODER爲所需的模式就可以了!

所以f4中,我們使用不用的jtag腳只需像平常使用其他io一樣配置就好了。

使用

首先複製模板工程一份,重命名文件夾爲新工程,打開工程,更新工程屬性配置,
在這裏插入圖片描述
編譯工程,刪除工程目錄MDK目錄下,原工程名開頭的文件即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章