文章目錄
- 工具準備和介紹
- 硬件設備
- stm32簡介和arm簡介
- stm32簡介
- STM32命名規則
- STM32選型
- STM32F103C8T6最小系統板
- 引腳定義
- STM32啟動配置
- STM32最小系統電路
- ARM簡介
- 軟件安裝
- 注冊
- 器件支持包安裝
- ST-LINK驅動安裝
- USB轉串口驅動
- 新建工程
- 創建stm32工程
- STM32工程編譯和下載
- 型號分類及縮寫,工程架構
工具準備和介紹
硬件設備
? STM32最小系統+面包板
? Windows10操作系統
? 萬用表、示波器、鑷子、剪刀等
stm32簡介和arm簡介
stm32簡介
- STM32是ST公司基于ARM Cortex-M內核開發的32位微控制器
- STM32常應用在嵌入式領域,如智能車、無人機、機器人、無線通信、物聯網、工業控制、娛樂電子產品等
- STM32功能強大、性能優異、片上資源豐富、功耗低,是一款經典的嵌入式微控制器
STM32是一系列由ST Microelectronics(意法半導體公司)推出的微控制器(MCU)。這些微控制器基于ARM Cortex-M架構,并且提供各種不同的封裝和引腳配置。STM32系列中一些受歡迎的微控制器包括STM32F103,STM32F407和STM32F429。 STM32微控制器以其低功耗,高性能和廣泛的功能而聞名。它們通常用于物聯網設備,可穿戴技術和其他需要低功耗和高性能的應用。 總體而言,STM32微控制器是許多開發人員的首選,因為它們的多功能性,可靠性和廣泛的功能。
ST:指意法半導體
M:指定微處理器MCU
32:表示計算機處理器位數
MCU:微控制器單元(MicroController Unit):是把中央處理器、存儲器、定時/計數器(timer/counter)、各種輸入輸出接口等都集成在一塊集成電路芯片上的微型計算機。
STM32的應用領域包括但不限于:
- 嵌入式領域:如智能車、無人機、機器人、無線通信、物聯網、工業控制、娛樂電子產品、醫療設備、智能家居等。
- 高速數據采集系統:使用STM32連接高速ADC和FPGA芯片,實現對高速信號的采集和處理,例如高速攝像頭、高速激光測距儀等。
- 自動駕駛控制系統:使用STM32連接多個傳感器和執行器,例如攝像頭、雷達、電機、電子羅盤等,并通過算法設計和優化,實現自動駕駛控制功能。
- 機器人視覺系統:使用STM32連接多個攝像頭和處理模塊,例如OpenCV、CUDA等,并通過算法設計和優化,實現機器人的視覺導航、物體識別等功能。
- 網絡安全嵌入式設備:使用STM32連接加密模塊和網絡模塊,實現網絡安全通信和數據加密等功能,例如VPN、防火墻、數據加密存儲等。
- 人工智能嵌入式設備:使用STM32連接AI模塊,例如人臉識別、語音識別、自然語言處理等,并通過編程和訓練,實現智能化的應用,例如智能門禁、智能家居等。
總的來說,STM32在各個領域都有廣泛的應用。
STM32命名規則
STM32選型
CoreMark:跑分
STM32F103C8T6最小系統板
STM32硬件:STM32F103C8T6最小系統板
STM32系統架構
在小容量、中容量和 大容量產品中,主系統由以下部分構成:
● 四個驅動單元:
─ Cortex?-M3內核DCode總線(D-bus),和系統總線(S-bus)
─ 通用DMA1和通用DMA2
● 四個被動單元
─ 內部SRAM
─ 內部閃存存儲器
─ FSMC
─ AHB到APB的橋(AHB2APBx),它連接所有的APB設備
這些都是通過一個多級的AHB總線構架相互連接的,如下圖所示:
AHB:先進高性能總線
APB2一般和AHB同頻率,都是72MHz,APB1一般36MHz
DMA相當于CPU(Cortex-M3)的秘書,可以搬運數據,而不需要cpu,節省cpu時間
引腳定義
紅色:電源相關引腳
藍色:最小系統相關引腳
綠色:IO口,功能口引腳
- I = 輸入,O = 輸出,S = 電源, HiZ = 高阻
- FT:容忍5V
- 可以使用的功能依選定的型號而定。對于具有較少外設模塊的型號,始終是包含較小編號的功能模塊。例如,某個型號只有1個SPI和2個USART時,它們即是SPI1和USART1及USART2。
- PC13,PC14和PC15引腳通過電源開關進行供電,而這個電源開關只能夠吸收有限的電流(3mA)。因此這三個引腳作為輸出引腳時有以下限制:在同一時間只有一個引腳能作為輸出,作為輸出腳時只能工作在2MHz模式下,最大驅動負載為30pF,并且不能作為電流源(如驅動LED)。
- 這些引腳在備份區域第一次上電時處于主功能狀態下,之后即使復位,這些引腳的狀態由備份區域寄存器控制(這些寄存器不會被主復位系統所復位)。 關于如何控制這些IO口的具體信息,請參考STM32F10xxx參考手冊的電池備份區域和BKP寄存器的相關章節。
- 與LQFP64的封裝不同,在TFBGA64封裝上沒有PC3,但提供了V REF+ 引腳。
- 此類復用功能能夠由軟件配置到其他引腳上(如果相應的封裝型號有此引腳),詳細信息請參考STM32F10xxx參考手冊的復用功能I/O章節和調試設置章節。
- VFQFPN36封裝的引腳2和引腳3、LQFP48和LQFP64封裝的引腳5和引腳6、和TFBGA64封裝的C1和C2,在芯片復位后默認配置為OSC_IN和OSC_OUT功能腳。軟件可以重新設置這兩個引腳為PD0和PD1功能。但對于LQFP100/BGA100封裝,由于PD0和PD1為固有的功能引腳,因此沒有必要再由軟件進行重映像設置。更多詳細信息請參考STM32F10xxx參考手冊的復用功能I/O章節和調試設置章節。在輸出模式下,PD0和PD1只能配置為50MHz輸出模式。
STM32啟動配置
STM32最小系統電路
ARM簡介
- ARM既指ARM公司,也指ARM處理器內核
- ARM公司是全球領先的半導體知識產權(IP)提供商,全世界超過95%的智能手機和平板電腦都采用ARM架構
- ARM公司設計ARM內核,半導體廠商完善內核周邊電路并生產芯片
ARM是什么
ARM既可以認為是一個公司的名字 ,也可以認為是對一類處理器的統稱 ,還可以認為是一種技術的名字 。
ARM公司是專門從事基于RISC技術芯片設計開發 的公司,作為知識產權供應商,本身不直接從事芯片生產,而是轉讓設計許可 ,由合作公司生產各具特色的芯片。
ARM處理器的內核是統一的 ,由ARM公司提供,而片內部件則是多樣的 ,由各大半導體公司設計,這使得ARM設計嵌入式系統的時候,可以基于同樣的核心,使用不同的片內外設 ,從而具有很大的優勢。
** ARM系列 **
A系列非常多,性能最高
R系列主要面向實時性高
M系列主要用于單片機
軟件安裝
MDK 源自德國的 KEIL 公司,是 RealView MDK 的簡稱。在全球 MDK 被超過 10 萬的嵌入式開發工程師使用。目前最新版本為:
MDK6,該版本使用 uVision5 IDE 集成開發環境,是目前針對 ARM 處理器,尤其是 Cortex M 內核處理器的最佳開發工具。
MDK5 向后兼容 MDK4 和 MDK3 等,以前的項目同樣可以在 MDK5 上進行開發(但是頭文件方面得全部自己添加), MDK5 同時加強了針
對 Cortex-M 微控制器開發的支持,并且對傳統的開發模式和界面進行升級,MDK5 由兩個部分組成:MDK Core 和 Software Packs。其中,Software Packs 可以獨立于工具鏈進行新芯片支持和中間庫的升級。
安裝MDK差不多就是一路Next(如果之前用過Keil5開發51單片機,可以直接選安裝目錄到原來的Keil5安裝目錄,例如Keil_v5文件夾,并且直接在keil5軟件可以自由切換),要求填寫信息就隨便填一下,如下圖所示,如果MDK和C51同安裝目錄,可以選Legacy Device切換為C51開發
下面直接看注冊
注冊
- 以管理員的方式運行keil軟件
- 選擇否即可
- 打開注冊管理窗口(File -> License Management),并復制CID
- 打開注冊機,執行如下幾步。
- 將注冊碼添加到注冊窗口中
器件支持包安裝
雙擊Keil.STM32F1xx_DFP.2.2.0.pack,選擇合適的安裝位置,一路Next
在線安裝器件支持包方式
網絡較慢,漫長等待
然后點是
ST-LINK驅動安裝
首先要把ST-LINK插到電腦上
默認STM32 STLink是沒有驅動的(有個黃色感嘆號),需要安裝驅動
找到Keil安裝目錄下,安裝64位驅動
一路安裝即可
驅動安裝好之后,上述黃色感嘆號消失,表示安裝成功
USB轉串口驅動
首先要把 USB轉串口插到電腦上
雙擊CH341SER.EXE(自己下載),點擊安裝
新建工程
目前STM32主要有基于寄存器,基于標準庫(本課程),基于Hal庫(圖像化,快速上手)的三種開發方式
創建stm32工程
創建工程步驟
在建立工程之前,我們在電腦的某個目錄下面建立一個文件夾,名字為
00_Template。
筆者目錄為E:\Program Data\Keil\00_Template
在上述00_Template目錄下創建一下四個目錄
CORE 用來存放核心文件和啟動文件,OBJ 是用來存放編譯過程文件以及hex 文件,STM32F10x_FWLib 文件夾顧名思義用來存放 ST 官方提供的庫函數源碼文件。
點擊 MDK 的菜單:Project –>New Uvision Project
將目錄定位到剛才建立的文件夾00_Template 之下,然后定位到 USER 目錄下面,我們的工程文件就都保存到 USER 文件夾下面。工程命名為Template,點擊保存。
選擇 CPU 的界面,就是選擇我們的芯片型號。
STMicroelectronics→STM32F1 Series→STM32F103→STM32F103C8T6(如果使用的是其他系列的芯片,選擇相應的型號就可以了)
一定要安裝對應的器件 pack 才會顯示這些內容哦!
MDK 會彈出 Manage Run-Time Environment 對話框, 點擊取消即可。
將固件庫目錄下面的 src,inc 文件夾拷貝到我們剛才建立的 STM32F10x_FWLib 文件夾下面。
將固件庫包里面相關的啟動文件復制到我們的工程目錄 CORE 之下。
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,將文件 core_cm3.c和文 件core_cm3.h 復 制到CORE 目錄里面。
將里面 startup_stm32f10x_md.s 文件復制到 CORE 下面
定位到目錄STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
rm 下面,將里面 startup_stm32f10x_md.s 文件復制到 CORE 下面。
將三個文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,復制到我們的USER目錄之下。
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面將里面的三個文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,復制到我們的 USER目錄之下。
將4個文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 復制到 USER 目錄下面。
然后將STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 個文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 復制到 USER 目錄下面。
將上述文件添加到我們的工程中去。右鍵點擊 Target1,選擇 Manage Project Items。
Project Targets一欄,我們將Target名字修改為Template,然后在Groups一欄刪掉一個SourceGroup1,建立三個 Groups:USER,CORE,FWLIB。然后點擊 OK。
右鍵點擊點擊Tempate,選擇選擇 Manage Project Itmes,然后選擇需要添加文件的 Group,添加對應的文件。
我們選擇 FWLIB, 然 后 點 擊 右 邊 的 Add Files, 定 位 到 我 們 剛 才 建 立 的 目 錄,STM32F10x_FWLib/src 下面,將里面所有的文件選中(Ctrl+A),然后點擊 Add,然后 Close。
CORE 下面需要添加的文件為 core_cm3.c,startup_stm32f10x_md.s ( 注意,默認添加的時候文件類型為.c, 也就是添加 startup_stm32f10x_md.s 啟動文件的時候,你需要選擇文件類型為 All files 才能看得到這個文件),USER 目錄下面需要添加的文件為 main.c,stm32f10x_it.c,system_stm32f10x.c.這樣我們需要添加的文件已經添加到我們的工程中了,最后點擊 OK
選擇編譯中間文件編譯后存放目錄
在編譯之前我們首先要選擇編譯中間文件編譯后存放目錄。方法是點擊魔術棒,然后選擇“Output”選項下面的“Select folder for objects…”,然后選擇目錄為我們上面新建的 OBJ 目錄。這里大家注意,如果我們不設置 Output 路徑,那么默認的編譯中間文件存放目錄就是 MDK 自動生成的 Objects 目錄和 Listings 目錄。
設置頭文件目錄
對于任何一個工程,我們都需要把工程中引用到的所有頭文件的路徑都包含到進來 。回到工程主菜單,點擊魔術棒 ,出來一個菜單,然后點擊 c/c++選項.然后點擊Include Paths 右邊的按鈕。彈出一個添加 path 的對話框,然后我們將圖上面的 3 個目錄添加進去。記住,keil 只會在一級目錄查找,所以如果你的目錄下面還有子目錄,記得 path一定要定位到最后一級子目錄。然后點擊 OK.
添加好目錄之后的情形
添加宏定義
STM32F10X_MD,USE_STDPERIPH_DRIVER
將main.c復制改為以下代碼
#include "stm32f10x.h"void Delay(u32 count){u32 i=0;for(;i<count;i++);}int main(void){ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 輸出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5推挽輸出GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOGPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 輸出高 while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOE,GPIO_Pin_5);Delay(3000000);GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_ResetBits(GPIOE,GPIO_Pin_5);Delay(3000000);}}
配置讓編譯之后能夠生成 hex 文件。
同樣點擊魔術棒,進入配置菜單,選擇 Output。然后勾上下三個選項。 其中 Create HEX file 是編譯生成 hex 文件,Browser Information 是可以查看變量和函數定義。
編譯整個工程,如果沒有任何報錯,則整個工程已經創建好了。
STM32工程編譯和下載
選擇下載器位ST-Link Debugger
LED測試
main.c
#include "stm32f10x.h"
void led_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//1. 使能時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//2. 初始化GPIOGPIO_Init(GPIOC, &GPIO_InitStruct);//3. 設置燈滅GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
//低電平
void led_on(void)
{GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
//高電平
void led_off(void)
{GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void mydelay(int msec)
{int i = 0;int j = 0;for (i = 0; i < msec; i++){for (j = 0; j < 1000; j++){/*do nothing*/;}}
}int main(void){ //初始化led_init();while(1){led_off();mydelay(1500);led_on();mydelay(1500);}return 0;}
下載之后,LED一閃一閃表示OK。
型號分類及縮寫,工程架構