目錄
第一點:為什么叫STM32F103C8T6
從資源手冊拿到我們的對STM32F103C8T6的資源描述
第二件事情,關心我們的GPIO引腳輸出
第三件事情:去找對應外設的說明部分
前言
本文章隸屬于項目:
Charliechen114514/BetterATK: This is a repo that helps rewrite STM32 Common Repositorieshttps://github.com/Charliechen114514/BetterATK
第一點:為什么叫STM32F103C8T6
先不著急,我們先把命名規矩說一下:
部分 | 說明 |
---|---|
1. 產品系列 | 固定為“STM32”,表示基于ARM Cortex-M內核的32位微控制器。 |
2. 產品類型 | 用一個字母表示產品類型: F:通用型 L:低功耗型 W:無線型 |
3. 產品子系列 | 用三位數字表示產品子系列,指示特定的功能和性能: 101:基本型 102:USB基本型(USB 2.0全速設備) 103:增強型 105/107:互聯型 |
4. 引腳數 | 用一個字母表示封裝的引腳數量: T:36引腳 C:48引腳 R:64引腳 V:100引腳 Z:144引腳 I:176引腳 |
5. 閃存容量 | 用一個字母或數字表示內置的Flash容量: 6:32KB 8:64KB B:128KB C:256KB D:384KB E:512KB G:1MB |
6. 封裝類型 | 用一個字母表示封裝類型: H:BGA封裝 T:LQFP封裝 U:VFQFPN封裝 |
7. 溫度范圍 | 用一個數字表示工作溫度范圍: 6:-40°C 至 85°C 7:-40°C 至 105°C |
以STM32F103C8T6作為例子:
-
STM32:代表基于ARM Cortex-M內核的32位微控制器。
-
產品類型:以字母表示,例如“F”代表通用型(General-purpose)。
-
子系列:以數字表示,例如“103”代表增強型系列(Performance Line)。
-
引腳數:以字母表示,常見選項如C(48腳)、R(64腳)、V(100腳)等。
-
閃存容量:以字母或數字表示,這里的數字“8”代表64KB
-
封裝類型:以字母表示,例如“T”代表LQFP封裝。
-
溫度范圍:以數字表示,“6”代表工業級溫度(-40℃至85℃)。
從資源手冊拿到我們的對STM32F103C8T6的資源描述
筆者在之前的博客中說到了我們的手冊可以從哪里來,所以這里我們就不去再重復說下面的資源是從哪里考證的——就是從資源手冊的第一頁中摘取的。
分類 | 資源描述 |
---|---|
核心 | ARM 32位 Cortex-M3,主頻72 MHz,性能90 DMIPS(1.25 DMIPS/MHz),單周期乘法與硬件除法,嵌套中斷控制器,43個可屏蔽中斷通道,6周期中斷響應,支持尾鏈優化 |
存儲器 | 32~128 KB Flash,6~20 KB SRAM |
時鐘/復位/電源管理 | 工作電壓2.0~3.6 V,帶POR/PDR和可編程電壓檢測器(PVD),4~16 MHz晶振,內部8 MHz RC振蕩器,內部32 kHz RC,支持PLL,獨立32 kHz RTC晶振(可校準) |
低功耗模式 | 睡眠、停止、待機模式,支持VBAT電源供電的RTC和備份寄存器 |
ADC | 2個12位ADC,16通道,轉換時間1 μs,支持雙采樣保持,可與高級定時器同步,內置溫度傳感器,輸入范圍0~3.6 V |
DMA | 7通道DMA控制器,支持的外設包括定時器、ADC、SPI、I2C、USART |
調試接口 | 支持Serial Wire Debug(SWD)與JTAG |
通用I/O口 | 最多80個高速I/O,32/49/80個支持5V容限,全部可映射至16個外部中斷線,支持原子讀/改/寫操作 |
定時器 | 最多7個定時器,包括3個16位通用定時器(最多4個IC/OC/PWM/計數通道),1個16位6通道高級定時器(帶PWM/死區/緊急停機),2個看門狗定時器(獨立和窗口),1個SysTick 24位遞減計數器 |
通信接口 | 最多9個:2個I2C(支持SMBus/PMBus),3個USART(支持ISO7816、LIN、IrDA、調制解調器控制),2個SPI(最高18 Mbit/s),1個CAN(2.0B),1個USB 2.0全速接口 |
可以看到,我們的STM32F103C8T6的資源還是非常的豐富的。
第二件事情,關心我們的GPIO引腳輸出
我們的單片機最后是依靠GPIO引腳跟外界進行溝通,我們查詢了上面的資源之,確定了這個板子是我們的一個可以選擇的方案后,下一步,就是看看結合我們的需求,簡單的調研一下我們的GPIO引腳的復用情況。
關于GPIO是什么,這個不是我們這篇博客的重點,筆者記得我前前后后說過兩次。所以可以翻翻筆者之前的博客,看我的碎碎念。
簡單的說,就是我們的GPIO引腳不可能單獨的表達含義,我們可以采取復用策略(也就是說把XXXGPIO現在作為一個)
關于GPIO的復用,我們還是要去看資源手冊。這一部分的內容一般是Pinouts and pin description那一部分的內容,注意,我們在學習其他的單片機的時候,可能板塊不會叫這個名字。
筆者截取了一下我手頭的手冊的一個截圖:
我們一般關心的是Pin name和右側的一些說明。第一件事情是。
以PB8為例子,我們的PB8可以做普通的IO口,可以用來承受5V的電壓(FT標識的部分就是可承受5V的意思),同時,我們的PB8可以做TIM4定時器的第三個通道和硬件IIC的SCL,或者是CAN通信下的接受端(CANRX)
筆者整理了一份STM32F103C8T6的引腳復用圖,這個就是我們實際上編程關心的一個圖。
引腳號 | 引腳名稱 | 類型 | 默認功能 | 復用功能 | 說明 |
---|---|---|---|---|---|
1 | VBAT | 電源 | 備用電源 | - | 供電給RTC和備用寄存器 |
2 | PC13 | I/O | GPIO | TAMPER-RTC | 低功耗I/O,或作為RTC的篡改引腳 |
3 | PC14 | I/O | GPIO | OSC32_IN | 32.768 kHz外部晶振輸入 |
4 | PC15 | I/O | GPIO | OSC32_OUT | 32.768 kHz外部晶振輸出 |
5 | PD0 | I/O | GPIO | OSC_IN | 外部高速晶振輸入 |
6 | PD1 | I/O | GPIO | OSC_OUT | 外部高速晶振輸出 |
7 | NRST | 復位 | 復位 | - | 外部復位引腳 |
8 | VSSA | 電源 | 模擬地 | - | 模擬電源地 |
9 | VDDA | 電源 | 模擬電源 | - | 模擬電源正極 |
10 | PA0 | I/O | GPIO | WKUP1, ADC_IN0, TIM2_CH1_ETR | |
11 | PA1 | I/O | GPIO | ADC_IN1, TIM2_CH2 | |
12 | PA2 | I/O | GPIO | ADC_IN2, TIM2_CH3, USART2_TX | |
13 | PA3 | I/O | GPIO | ADC_IN3, TIM2_CH4, USART2_RX | |
14 | PA4 | I/O | GPIO | ADC_IN4, SPI1_NSS | |
15 | PA5 | I/O | GPIO | ADC_IN5, SPI1_SCK | |
16 | PA6 | I/O | GPIO | ADC_IN6, SPI1_MISO, TIM3_CH1 | |
17 | PA7 | I/O | GPIO | ADC_IN7, SPI1_MOSI, TIM3_CH2 | |
18 | PB0 | I/O | GPIO | ADC_IN8, TIM3_CH3 | |
19 | PB1 | I/O | GPIO | ADC_IN9, TIM3_CH4 | |
20 | PB2 | I/O | GPIO | BOOT1 | |
21 | PB10 | I/O | GPIO | I2C2_SCL, USART3_TX | |
22 | PB11 | I/O | GPIO | I2C2_SDA, USART3_RX | |
23 | PB12 | I/O | GPIO | SPI2_NSS, I2C2_SMBA | |
24 | PB13 | I/O | GPIO | SPI2_SCK | |
25 | PB14 | I/O | GPIO | SPI2_MISO | |
26 | PB15 | I/O | GPIO | SPI2_MOSI | |
27 | PC10 | I/O | GPIO | USART3_TX | |
28 | PC11 | I/O | GPIO | USART3_RX | |
29 | PC12 | I/O | GPIO | USART3_CK | |
30 | PD2 | I/O | GPIO | - | |
31 | PC0 | I/O | GPIO | ADC_IN10 | |
32 | PC1 | I/O | GPIO | ADC_IN11 | |
33 | PC2 | I/O | GPIO | ADC_IN12 | |
34 | PC3 | I/O | GPIO | ADC_IN13 | |
35 | PC4 | I/O | GPIO | ADC_IN14 | |
36 | PC5 | I/O | GPIO | ADC_IN15 | |
37 | PB8 | I/O | GPIO | I2C1_SCL, TIM4_CH3 | |
38 | PB9 | I/O | GPIO | I2C1_SDA, TIM4_CH4 | |
39 | AVSS | 電源 | 模擬地 | - | 模擬電源地 |
40 | AVDD | 電源 | 模擬電源 | - | 模擬電源正極 |
41 | PA8 | I/O | GPIO | MCO, TIM1_CH1 | |
42 | PA9 | I/O | GPIO | USART1_TX, TIM1_CH2 | |
43 | PA10 | I/O | GPIO | USART1_RX, TIM1_CH3 | |
44 | PA11 | I/O | GPIO | USART1_CTS, CAN_RX | |
45 | PA12 | I/O | GPIO | USART1_RTS, CAN_TX | |
46 | PA13 | I/O | GPIO | JTMS-SWDIO | |
47 | PA14 | I/O | GPIO | JTCK-SWCLK | |
48 | PA15 | I/O | GPIO | JTDI |
第三件事情:去找對應外設的說明部分
這個事情在我們的編程手冊中才會涉及到,比如說,我們想要驅動IIC。
就要準備去對應的手冊上慢慢翻。ST官方的手冊比較全面,會仔細的介紹細節。這里給出的是英文手冊的截圖。
筆者接觸到的流程大致就是如此。