學習相關的基礎知識請閱讀本專欄其他文章,一定有你想要的。
https://blog.csdn.net/weixin_43764974/category_11021363.html
本文軟硬件:
- STM32F103C8T6
- ARM MDK 5.38
- ARM complier 6
- ST-Link v2
- StdPeriph Drivers(標準庫)
文章開始前,我想再次說一下:keil
、μvision
、ARM MDK
這幾個名詞(盡管前面的額文章已經(jīng)說過好幾次了)
Keil是一家德國公司,提供了一系列用于嵌入式系統(tǒng)開發(fā)的軟件工具。其中,Keil MDK(Microcontroller Development Kit)是Keil推出的一套集成開發(fā)環(huán)境(IDE),用于開發(fā)基于ARM處理器的嵌入式應用程序。
μVision(MicroVision)是Keil MDK的核心組件,是一個強大的集成開發(fā)環(huán)境,提供了代碼編輯、編譯、調試、仿真和燒錄等功能。μVision作為Keil MDK的前端工具,為用戶提供了友好的圖形界面和便捷的開發(fā)體驗。
ARM MDK(ARM Microcontroller Development Kit)是由ARM公司授權Keil開發(fā)的一套完整的軟件開發(fā)工具套件。它結合了Keil的軟件開發(fā)工具和ARM提供的CMSIS(Cortex Microcontroller Software Interface Standard)等軟件庫,用于開發(fā)基于ARM Cortex-M系列處理器的嵌入式系統(tǒng)。
通常,用 keil 代指上面3個。
一、工程結構
在Keil環(huán)境中創(chuàng)建STM32工程時,通常遵循以下結構:
-
工程文件(Project Files):
-
工程文件(
.uvprojx
):Keil工程的主文件,保存了工程的設置和配置信息。 -
工程選項文件(
.uvoptx
):保存了編譯器、鏈接器和調試器的配置選項。 -
工程配置文件(
.uvproj.user
):保存了工程的用戶配置選項,如源文件列表、編譯選項等(這里的user是你創(chuàng)建工程時的Windows用戶名)。
-
工程文件(
-
源文件(Source Files):
- C/C++源文件(.c、.cpp):包含應用程序的主要源代碼。
- 匯編源文件(.s):可選的匯編語言文件,用于特定的處理器指令或啟動代碼。
- 頭文件(.h):包含各種配置和宏定義。
-
庫文件(Library Files):
- STM32標準外設庫(.a):包含STM32芯片的標準外設庫文件,提供了訪問STM32外設的函數(shù)和常量。
- 第三方庫文件:如果你使用了第三方庫(如FreeRTOS、CMSIS等),這些庫的文件也可以放在此處。
-
中間文件(Intermediate Files):
- 目標文件(.o):編譯源文件生成的目標文件,用于后續(xù)的鏈接操作。
- 列表文件(.lst):包含了編譯后的匯編代碼,可以用于調試和分析。
-
輸出文件(Output Files):
- 可執(zhí)行文件(.axf、.elf):鏈接器將目標文件鏈接成可執(zhí)行文件,用于燒錄到STM32芯片上運行。
- HEX文件(.hex):可執(zhí)行文件的十六進制格式,常用于燒錄器燒錄。
- BIN文件(.bin):可執(zhí)行文件的二進制格式,也常用于燒錄器燒錄。
-
調試文件(Debug Files):
- 調試信息文件(.axf、.elf):包含了調試器需要的符號信息和調試信息。
- 調試輸出文件(.txt):包含了調試過程中的輸出信息和日志。
除了上述文件之外,Keil工程中還可能包含其他輔助文件,如:
- 啟動文件(startup_xxx.s):包含處理器的啟動代碼,初始化處理器和外設。
- 配置文件(xxx.h):包含各種配置選項和宏定義。
- 驅動文件(xxx.c、xxx.h):用于特定外設的驅動程序代碼和頭文件。
- 中斷處理函數(shù)(xxx.c):處理中斷請求的函數(shù)。
這個是為了方便你讀別人的代碼做的說明,你想怎樣就怎樣(但別隨意),不過都大同小異。最核心的就是 用戶程序+系統(tǒng)文件 (啟動文件、驅動文件等等)。
二、實操
關于keil的詳細介紹,可以看本專欄之前的文章。
(1)點擊project—>new μVision project,選擇一個工程的保存位置
(2)選擇設備:STM32F103C8(這里的pack要先安裝,前面文章已經(jīng)詳細介紹過)
(3)點擊 OK會彈出一個運行時的配置界面
Manage Run-Time Environment
是keil軟件中用來管理軟件組件的一個功能??梢栽谶@個窗口中選擇或取消需要的組件,例如CMSIS、Device、Middleware等。這些組件可以提供一些預編譯的庫文件、頭文件、源代碼等,方便開發(fā)STM32工程。
-
在彈出的Manage Run-Time Environment窗口中,你可以在左側的樹狀列表中看到不同類別的組件,例如CMSIS、Device、Middleware等。右側顯示了對應的描述、版本、文檔等信息。
-
在右側的復選框中選擇或取消需要的組件。一般來說,至少需要選擇
CMSIS->CORE
和Device->Startup
這兩個組件,它們提供了一些基本的定義和啟動代碼。其他的組件根據(jù)工程需求而定,例如我來點個燈,就再選一個GPIO
(這里使用標準庫,選擇stdPeriph Drivers下的GPIO)。 -
在選擇完組件后,點擊
Resolve
按鈕來解決一些依賴關系或者沖突問題,幫你勾選其他的依賴選項。 (如果你只知道要使用GPIO,不知道還要勾選其他的什么,就只選一個GPIO然后讓系統(tǒng)自動勾選)
在之后的開發(fā)中,你依舊可以點擊工具欄的綠色菱形來選擇需要的組件。
(4)在解決完所有的問題后,點擊OK按鈕來關閉Manage Run-Time Environment窗口,并生成相應的工程文件。
前面的操作,keil已經(jīng)為我們生成了工程所需的必要文件:
- 系統(tǒng)初始化文件:
system_stm32f10x.c
,包含了一些系統(tǒng)初始化函數(shù)的定義。 - 啟動文件:
startup_stm32f10x_md.s
,包含了復位向量表和復位處理函數(shù)的定義。 - GPIO驅動:
stm32f10x_gpio.c
,可以在這個文件中查看GPIO驅動的功能和參數(shù)。 - 等等。
其中,帶有黃色鑰匙的文件,是無法修改的,并且不會顯示在工程的文件夾中。當然,這些生成的文件通常都不需要修改。此外,有的文件還帶有+號,可以展開,這體現(xiàn)了文件的包含關系,方便查看文件依賴。
這可能與你用的“工程模板”有點不同,因為有的項目是舊版本的keil創(chuàng)建的,可能沒有使用軟件包或者RTE(即Run-Time Environment)功能,或者是基于CubeMX創(chuàng)建的,比如這樣:
現(xiàn)在的工程目錄的內容:
后面3個是工程文件,之前介紹過了,幾個文件夾分別是:
- RTE:這個文件夾包含了你選擇的軟件組件的配置文件、頭文件和源文件。您可以在這里查看或修改您的組件設置和代碼。
- DebugConfig:這個文件夾包含了你的調試配置文件,例如目標設置、調試器設置、跟蹤設置等。可以在這里查看或修改調試參數(shù)。
- Listings:這個文件夾包含了工程編譯后生成的匯編代碼、符號表、映射文件等。可以在這里查看或分析您的編譯結果。
- Objects:這個文件夾包含了工程編譯后生成的目標文件、庫文件、可執(zhí)行文件等。
(5)編寫用戶程序
-
可以在工程文件夾中新建一個用戶程序文件夾,比如
User
; -
然后新建文件,另存為.c文件,保存到剛才的文件;
-
編寫代碼;
-
把他們添加到keil中:
- 點擊
Manage project items
,新建Group,添加剛剛的源文件,如圖: - 在
option for target
中,勾選生成hex
文件
- 點擊
(6)下載
我使用ST-Link下載的,如果不會可以看我之前的文章:
【STM32】自舉模式 和 程序下載(ST-Link和串口示例)
三、注意事項
3.1 我好像少了一些設置?
本文中,我使用的是STM32F103C8T6,在項目中,只是簡單實現(xiàn)了LED燈的亮滅控制。上面只有一個mian.c文件。
我的完整工作流概述是:
- 新建工程,選擇型號;
- 配置RTE;
- 編寫程序;
- 將程序添加到keil;
- 選擇生成hex文件;
- 編譯;
- 設置ST-Link下載;
- Download。
由于我是使用RTE創(chuàng)建的工程,RTE會自動處理必要的包含路徑和庫文件,以確保正確的編譯和鏈接過程。它會基于你在RTE配置向導中選擇的設備和外設驅動程序,自動生成相應的配置文件,包括正確的包含路徑。RTE也會根據(jù)你選擇的設備和外設驅動程序自動生成相應的處理器符號和宏定義。
也就是說,這些設置通常都不用管(當然,如果你自己編寫了頭文件,可能需要指定包含路徑):
3.2 RTE中驅動庫API的選擇
【必看】如何選擇SPL庫、HAL庫、LL庫?詳細的介紹看新文章:https://blog.csdn.net/weixin_43764974/article/details/132416118
CMSIS Driver
是 ARM
公司定義的通用驅動接口標準,用于各種 Cortex-M 微控制器的外設控制。它提供了一致的編程接口和移植性,使得驅動代碼可以在不同廠商的微控制器之間共享和重用。STMicroelectronics 提供了符合 CMSIS Driver 標準的驅動實現(xiàn),以便與其 STM32 系列微控制器兼容。
HAL (Hardware Abstraction Layer)
是 STMicroelectronics
提供的一種高層次的庫,用于 STM32 微控制器的外設編程。HAL 提供了對 STM32 系列特定外設的功能函數(shù)和配置選項,使得開發(fā)人員可以相對簡單地編寫和控制外設。HAL 位于 CMSIS Driver 之上,使用 CMSIS Driver 提供的底層接口進行外設的控制。
stdPeriph Drivers
是由 STMicroelectronics
提供的舊版外設驅動庫。stdPeriph Drivers 提供了較高層次的 API,使編程相對簡單,但對于不同系列的 STM32 微控制器,其外設功能和寄存器定義可能有所差異。
附錄、代碼
簡單的LED閃爍,標準庫:
復制后如果中文亂碼,修改編碼為UTF-8即可。
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
void LED_Init(void); //LED初始化函數(shù)聲明
void Delay(uint32_t nCount); //延時函數(shù)聲明
int main(void)
{
LED_Init(); //調用LED初始化函數(shù)
while (1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //將PC13置低,點亮LED
Delay(0x0FFFFF); //延時一段時間
GPIO_SetBits(GPIOC, GPIO_Pin_13); //將PC13置高,熄滅LED
Delay(0x0FFFFF); //延時一段時間
}
}
void LED_Init(void) //LED初始化函數(shù)定義
{
GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO初始化結構體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //選擇PC13引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設置為推挽輸出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設置IO口速度為50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根據(jù)參數(shù)初始化GPIOC
GPIO_SetBits(GPIOC, GPIO_Pin_13); //將PC13置高,熄滅LED
}
void Delay(uint32_t nCount) //延時函數(shù)定義
{
for(; nCount != 0; nCount--); //循環(huán)減計數(shù)
}
效果:
文章來源:http://www.zghlxwxcb.cn/news/detail-596728.html
把 永 遠 愛 你 寫 進 詩 的 結 尾 ~ 文章來源地址http://www.zghlxwxcb.cn/news/detail-596728.html
到了這里,關于【STM32】使用RTE ,從 0 開始創(chuàng)建一個 (keil) ARM MDK工程(純keil,標準庫,以STM32F103C8T6為例)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!