@TOC


一、關於窗口

1.建立項目文件夾

2.打開Keil->Create New Project,選擇剛剛建立的文件夾

【STM32】新建工程_引腳

3.在此文件夾裏建立工程模板,起個名字為Project

【STM32】新建工程_庫函數_02

4.選擇器件型號,在此使用的是STM32C8T6

【STM32】新建工程_庫函數_03

【STM32】新建工程_寄存器_04

5.添加必要文件打開固件庫文件夾,可以看到啓動文件,全部複製下來,返回剛剛建立的工程模板文件夾

【STM32】新建工程_引腳_05

【STM32】新建工程_庫函數_06

【STM32】新建工程_庫函數_07

【STM32】新建工程_庫函數_08

回到下圖文件夾 這個文件用來描述STM32和它對應的地址,下面2個system用來配置時鐘。複製此3個文件到Start裏面。如下圖

【STM32】新建工程_引腳_09

添加內核寄存器描述文件

【STM32】新建工程_引腳_10

複製2個文件到Start裏面。

【STM32】新建工程_引腳_11

工程必要文件添加完畢。 回到Keil工程中把剛剛複製的文件添加到工程中去。點擊選擇Source Group改成Start。右鍵,添加已存在的文件到組裏。

【STM32】新建工程_引腳_12

打開Start文件夾,將文件過濾器設置為"所有文件"

【STM32】新建工程_寄存器_13

【STM32】新建工程_庫函數_14

帶小鑰匙是隻讀文件,只用添加,不用修改 最後添加這個文件夾的頭文件路徑在工程選項裏點擊魔術棒,打開工程選項,在C/C++裏

【STM32】新建工程_庫函數_15

點擊3個點按鈕,把Start的路徑添加進來

【STM32】新建工程_庫函數_16

2.1 菜單介紹

接下來新建main函數,測試工程是否可行

打開工程文件夾,新建文件夾User,main函數就放在裏面

【STM32】新建工程_寄存器_17

回到KEIL,在Target這裏右鍵,點擊添加組

【STM32】新建工程_庫函數_18

改成User 添加新文件到User裏面

【STM32】新建工程_寄存器_19

選中名為main.c的C文件,將其保存在User文件夾中。

首先在main.c文件中包含頭文件:

#include "stm32f10x.h"

接着編寫main函數:

int main(void)
{
    // 主程序代碼
}

注意:文件末尾必須保留一個空行,否則會觸發編譯警告。

【STM32】新建工程_庫函數_20

這時STM32寄存器配置完成了

【STM32】新建工程_寄存器_21

下一步點擊“編譯並建立工程”建立寄存器點燈工程先調大字體

【STM32】新建工程_引腳_22

【STM32】新建工程_引腳_23

把編碼格式改為UTF-8,可以防止中文亂碼問題。點擊扳手->Editor->Encoding Tab鍵的大小選擇4

【STM32】新建工程_庫函數_24

【STM32】新建工程_引腳_25

KEIL裏配置調試器,其默認為ULINK,用什麼調試器就選擇什麼調試器

【STM32】新建工程_寄存器_26

然後重新編譯,點擊LOAD按鈕下載程序到32裏面。

配置寄存器點燈

1.打開STM32參考手冊,RCC寄存器,用來是能GPIOC的時鐘。GPIO都是APB2的外設

IOPCEN時鐘使能位配置説明:將該位置1(其他位保持0)。32位寄存器值為0000 0000 0000 0000 0000 0000 0001 0000,按4位一組轉換為十六進制表示為0x00000010。在KEIL開發環境中,需在while(1)死循環前添加寄存器配置語句:RCC->APB2ENR = 0x00000010。

【STM32】新建工程_引腳_27

回到KEIL,寫上GPIOC->CHR=0x00300000;

【STM32】新建工程_庫函數_28

寫1的話,ODR的值是 0000 0000 0000 0000 0010 0000 0000 0000 轉化為16進制是 0x00002000。回到KEIL,寫上GPIO->ODR=0x00002000;

【STM32】新建工程_庫函數_29

#include "stm32f10x.h"                  // Device header
 
 int main(void)
 {
	 RCC->APB2ENR = 0x00000010;
	 GPIOC->CRH = 0x00300000;
	 GPIOC->ODR = 0x00000000; //亮
//	 GPIOC->ODR = 0x00002000; //熄滅
	while(1)
	{
		
	}
 }

二、菜單欄

因為這個燈是低電平點亮,所以給ODR全為0就是亮。給ODR0x00002000就是滅。

此方法會影響到其他位,操作不方便。添加庫函數是一個好的選擇。添加庫函數

打開工程文件夾,新建Library存放庫函數

【STM32】新建工程_庫函數_30

【STM32】新建工程_庫函數_31

打開固件庫的文件夾,打開Librarues,STM32標準外設驅動,SRC

【STM32】新建工程_寄存器_32

misc.c是內核的庫函數,其他都是內核外的外設庫函數。全選複製到Library文件夾裏

【STM32】新建工程_庫函數_33

然後打開INC文件夾,裏面是庫函數的頭文件。全選複製

【STM32】新建工程_引腳_34

粘貼到Library

【STM32】新建工程_庫函數_35

回到KEIL,右鍵Target,添加新組,改名字叫做Library然後右鍵,添加已存在的文件,打開Library,全選添加

【STM32】新建工程_寄存器_36

所有庫函數文件添加完畢。

但是此庫函數還不能直接使用,還需添加文件

打開如下圖文件夾

【STM32】新建工程_引腳_37

conf是用來配置庫函數頭文件的包含關係,兩個IT文件用來存放中斷的,複製這3個文件到工程的User目錄下

【STM32】新建工程_引腳_38

再回到KEIL軟件,在User組裏,把那3個文件添加進來

最後需要一個宏定義。在頭文件右鍵,打開文件拉到最下面。可以看到一個宏定義,複製它

【STM32】新建工程_庫函數_39

打開工程選項,在C/C++欄目下的Define粘貼它。這樣才能包含標準外設庫,也就是庫函數 下面還有頭文件路徑,把User和Library路徑都添加上

【STM32】新建工程_庫函數_40

基於庫函數的工程建立完成。

我們需要更改的就是User組裏的文件,其他文件不用改。

庫函數點燈

1.使能時鐘函數RCC_APB2PeriphClockCmd()

有兩個參數,第一個選擇外設,第二個選擇新的狀態。可以右鍵跳打函數定義,在上面有函數的簡介和參數説明

2.1 菜單介紹

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
//	 RCC->APB2ENR = 0x00000010;
//	 GPIOC->CRH = 0x00300000;
//	 GPIOC->ODR = 0x00000000; //亮
////	 GPIOC->ODR = 0x00002000; //熄滅

	/*開啓時鐘*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啓GPIOA的時鐘
															//使用各個外設前必須開啓時鐘,否則對外設的操作無效
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推輓輸出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引腳,賦值為第0號引腳
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHz
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值後的構體變量傳遞給GPIO_Init函數
															//函數內部會自動根據結構體的參數配置相應寄存器
															//實現GPIOA的初始化
	
	/*主循環,循環體內的代碼會一直循環執行*/
	while (1)
	{
		/*設置PA0引腳的高低電平,實現LED閃爍,下面展示3種方法*/
		
		/*方法1:GPIO_ResetBits設置低電平,GPIO_SetBits設置高電平*/
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為低電平
		Delay_ms(500);										//延時500ms
		GPIO_SetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為高電平
		Delay_ms(500);										//延時500ms
		
		/*方法2:GPIO_WriteBit設置低/高電平,由Bit_RESET/Bit_SET指定*/
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);		//將PA0引腳設置為低電平
		Delay_ms(500);										//延時500ms
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);			//將PA0引腳設置為高電平
		Delay_ms(500);										//延時500ms
		
		/*方法3:GPIO_WriteBit設置低/高電平,由數據0/1指定,數據需要強轉為BitAction類型*/
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);		//將PA0引腳設置為低電平
		Delay_ms(500);										//延時500ms
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);		//將PA0引腳設置為高電平
		Delay_ms(500);										//延時500ms
	}

2.2 啓動文件的選擇

根據芯片型號

【STM32】新建工程_寄存器_41

單片機的程序用於不會結束,所以最後一定有一個死循環。