STM32_固件庫(kù)建立工程
使用STM32的小伙伴知道,操作STM32可以用官方固件庫(kù)直接操作芯片,也可以直接操作寄存器。
無(wú)論使用哪種方式,最終都是在操作寄存器。
今天,小編給大家介紹使用ST官方的固件庫(kù)建立的工程。有誤請(qǐng)指出,謝謝
STM32F1xx固件庫(kù)資源:(百度云盤(pán) )鏈接:http://pan.baidu.com/s/1kUVK3C7 密碼:3fzx
1,新建項(xiàng)目,在新建工程的目錄下新建幾個(gè)文件夾:
A,CORE (用來(lái)存放啟動(dòng)文件)
B,STM32F10x_FWLib (用來(lái)存放ST官方的庫(kù)函數(shù)文件)
C,USER (用來(lái)存放我們的mian.c,以及system_stm32f10x.c等)
2,打開(kāi)ST官方的固件庫(kù),在對(duì)應(yīng)的文件夾添加一下文件:
CORE:添加 STM32F1xx固件庫(kù)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport 下的core_cm3.c,core_cm3.h
添加 STM32F1xx固件庫(kù)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm 下的所有文件
STM32F10x_FWLib: 復(fù)制 STM32F1xx固件庫(kù)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver 下的inc,src文件夾
USER:添加 STM32F1xx固件庫(kù)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x 目錄下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h
添加 STM32F1xx固件庫(kù)STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template 目錄下的main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h
3,在工程目錄右鍵,選擇Manage Components
4,建立三個(gè)Groups:USER,CORE,FWLIB.點(diǎn)擊OK.
5, 在新建立的三個(gè)Groups中分別添加:
USER:main.c,stm32f10x_it.c,system_stm32f10x.c.
CORE:core_cm3.c,startup_stm32f10x_md.s,
FWLIB:STM32F10x_FWLib/src 下面的所有文件
6,此時(shí)點(diǎn)擊編譯,會(huì)出現(xiàn)很多錯(cuò)誤。我們點(diǎn)擊魔術(shù)棒,點(diǎn)擊c/c++選項(xiàng).然后點(diǎn)擊Include Paths右邊的按鈕
彈出一個(gè)添加path的對(duì)話框,然后我們將圖上面的3個(gè)目錄添加進(jìn)去。
PS:keil只會(huì)在一級(jí)目錄查找,所以如果你的目錄下面還有子目錄,記得path一定要定位到最后一
級(jí)子目錄。然后點(diǎn)擊OK.
7,此時(shí)點(diǎn)擊編譯,仍會(huì)出現(xiàn)很多錯(cuò)誤,我們點(diǎn)擊魔術(shù)棒,在c/c++下 define 處添加STM32F10X_MD,USE_STDPERIPH_DRIVER
PS:STM32F10X_MD
這個(gè)宏定義是根據(jù)使用的芯片的容量來(lái)填寫(xiě)的。
大容量:STM32F10X_HD
中容量:STM32F10X_MD
小容量:STM32F10X_LD
8,我們打開(kāi)main.c文件,用以下代碼覆蓋文件:
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
while (1)
{
GPIOD->BSRR = 0x00000005;
GPIOD->BRR = 0x00000005;
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
}
}
#endif
9,點(diǎn)擊編譯,大功告成