我今天來講一下我用STM32F030這顆MCU標準庫開發的環境吧,首先要懂的建環境,需要複製那些標準庫裡的檔案才能正常使用,沒複製到的話也不用太擔心,編譯的時候會告訴你哪裡有問題再往那方向去找就好,其他顆MCU也可比較辦理差別並不大。
首先,先看看我的標準庫裡的檔案:
首先會先創建1個資料夾,名稱叫:STM32F030CC_FWlib_Template,(韌體模板)
底下有這4個子資料夾:
接下來我會一一介紹這些資料夾的作用跟需要複製甚麼檔案,當然不創建這幾個子資料夾也沒關係,這只是養成1個整理的好習慣,下面會介紹各個資料夾的作用,了解後就會知道這樣分的作用。
這個文件底下是放官方寫好的庫函式還有啟動文件,首先點開資料夾,我還有創建兩個文件檔
這些都是MCU上店後先執行的程式檔,有.c跟.h還有.s檔,這三個檔的作用我在邊簡單的描述一下,.h檔式函數的定義和宣告,.c會include.h去實現函數的功能,.s則是啟動的檔案 MCU記憶體的最初燒錄檔案。
這底下有inc跟src資料夾,這是官方寫好的外設功能函式庫.c和.h
新增這資料夾是為了放編譯完成的檔案,最常用的是拿編譯完成.HEX檔,這個檔也可以用來燒錄主要是寫進Flash裡
開啟專案後設定方法如下圖步驟:
如上圖
1.點1個像魔術棒的東西
2.點選Output
3.選擇路徑的選項,在選擇自己所創建的Output
4.按OK~
創建專案選擇的地方
自己寫的.c和.h存放的地方
我先來講解我led的範例吧,先來看我led底下的資料夾吧
再來看看我這兩個寫了什麼吧,首先是bsp_led.h
#ifndef __BSP_LED_H // 防止重複include編譯上的錯誤
#define __BSP_LED_H //
#include "stm32f0xx.h" //引入官方寫的標準庫
void LED_GPIO_Config(void); //GPIO口的初始化
#endif /*__BSP_LED_H*/
再來是bsp_led.c實現函式的部分
// bsp board support package
#include "./led/bsp_led.h"
void LED_GPIO_Config(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); //使用標準庫裡的RCC初始化函式
GPIO_InitTypeDef GPIO_InitStruct; //初始化結構體名稱宣告
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//要開啟的腳位
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //配置成輸出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度配置
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //IO口推挽模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //IO口上拉模式
GPIO_Init(GPIOB,&GPIO_InitStruct); //標準庫裡的GPIO初始化函式
}
再來是main.c裡如何使用這個自己打好的庫函式
打上我標記的這幾行
#include "bsp_led.h"
int main(void)
{
LED_GPIO_Config();
GPIO_SetBits(GPIOB,GPIO_Pin_12); //PB12,高電位
GPIO_SetBits(GPIOB,GPIO_Pin_13); //PB13,拉高電位
GPIO_SetBits(GPIOB,GPIO_Pin_14); //PB14,拉高電位
}
這樣就可以把這三個GPIO口拉high了~,103也可以照這方法編寫,GPIO_SetBits這個函式是官方寫好的,想要看寫甚麼很簡單,對著他按右鍵,選擇F12那個選項
按了之後就會跑進來這,如下圖
可以看他會多跑出紅框的部分,再來看紫框是這個函式的說明,在看框部分裡面有個BSRR!!,官方寫好了,跟我們自己用暫存器開發是一樣的,其實我昨天講的暫存器開發跟官方寫的是一樣,講到這邊,我兩種都大概說明一下了,假如有遇到什麼問題再下面提出來,我會盡力回答
這兩種方法都懂是最好,很多剛學嵌入式的同學都很排斥前面的暫存器開發,想說我只要有功能就好快速開發就好,這樣想是沒甚麼錯,但之後持續走這行一定會碰壁,官方沒寫好的就會不知道該怎麼修改,或著是要開發更進階的功能。