1、STM32是基于ARM-Cortex-M内核开发的32位微控制器。STM32分为高性能系列,主流系列,低功耗系列、无线系列:视频采用STM32F1系列
高性能系列:STM32F2, F4, F7,H7(3224内核跑分,双核微控制器=550MHz的Cortex-M7+240MHz的Cortex-M4)
2、ARM内核型号:
经典ARM处理器:ARM7、ARM9、ARM11
Cortex-A系列:Application,高端应用型,应用于手机
Cortex-R系列:Real-time,实时性
Cortex-M系列:Microcontroller 微控制器
STM32F103C8T6,另外常用的型号:STM32103RCT6
STM32F1主流系列,内核ARM-Cortex-M3内核,主频72MHz,运行内存RAM是20K,程序存储器ROM是64K。
供电:2.0-3.6V,封装:LQFP48
片上资源(Peripherial)
NVIC:内核中管理终端的设备,配置中断优先级
Systick:给FreeRTOS系统提供定时进行任务切换
RCC:对系统的时钟进行配置,操作外设之前需要使能时钟
GPIO: 通用IO口
AFIO:复用IO口,复用功能端口重定义,中断端口的配置
EXTI: 外部中断,引脚电平变化触发中断,让CPU处理任务
TIM:定时器,分为高级定时器、通用定时器和基本定时器
ADC:模数转换器,STM32内置12位的AD转换器
DAC:数模转换器
DMA:直接内存访问
USART:同步/异步串口
I2C:I2C通信
SPI:SPI通信
CAN: CAN通信,汽车领域
USB: USB通信
RTC: 实时时钟
PWR:电源控制
BKP:备份寄存器
IWDG:独立看门狗
WWDG:窗口看门狗
SDIO: SD卡接口
FSMC:可变静态存储控制器
USB OTG:USB主机接口
系统结构
芯片引脚定义:
1、VBAT 备用电池供电引脚
2、I/O口、侵入检测、RTC
3/4、I/O口、32.768KHz的RTC晶振
5/6、系统主晶振,8MHz 经过锁相环倍频得到72MHz
7、复位引脚,低电平复位
8/9、内部模拟电路的电源,比如ADC,RC振荡器,VSS是负极(GND),VDD是正极(3.3V)
10-19:I/O口,PA0兼具wakeup功能,唤醒处于待机模式的STM32
20:I/O口、BOOT引脚
21/22:I/O口
23/24:系统主电源
25-33:I/O口
34 37-40 I/O口,调试端口,用于调试程序和下载程序,STM32支持SWD和JTAG两种调试方式,SWD需要SWDIO和SWCLK两根线,JTAG需要JTMS,JTCK,JTDI,JTDO和NJTRST
ST-LINK是SWD调试模式
41-43 45-46: I/O口
44:BOOT0
启动配置:
最小系统电路
晶振电路:
8MHz的主时钟晶振-----内部锁相环倍频-------72MHz的主频,连接到5,6号引脚
32.768KHz的晶振 ----经过RTC电路的2^15分频------ 1Hz 连接到3,4号引脚
复位电路
NRST 接到 7号引脚,低电平复位
上电瞬间,电源通过电阻向电容充电,此时电容成短路状态,NRST产生低电平,最后电容充电完成形成断路状态,产生高电平
启动配置
选择BOOT引脚
下载端口
SWDIO和SWCLK接线,3.3V和GND接线
安装Keil5 MDK 软件,安装 MDK524a.EXE,ULINK
Keil MDK(Microcontroller Development Kit)是由Keil公司开发的集成开发环境(IDE),专门用于嵌入式系统开发
安装器件支持包
Keil MDK的器件支持包(Device Support Pack)是用于扩展Keil MDK对特定微控制器的支持的软件包。每个支持包包含了特定微控制器的设备定义、驱动程序和库文件等,使得Keil MDK能够识别和配置这些微控制器。
离线安装:
Pack Installer
![Pasted image 20250107121845](assets/Pasted image 20250107121845.png)
软件注册
安装STLINK驱动、USB转串口驱动
开发STM32的方式
寄存器方式,标准库函数方式、HAL库开发方式(适合快速上手)
建立基于标准库的工程
1、创建STM32的工程模板,选择器件型号
2、添加工程必要文件:启动文件 + STM32外设寄存器描述文件(stm32f10x.h)+ 配置时钟文件(system_stm32f10x.c + system_stm32f10x.h)+ 内核寄存器描述文件(core_cm3.c+core_cm3.h)
3、添加头文件路径:魔术棒--->C/C++--->Include Paths 选择Start文件夹
4、创建User文件夹,Keil添加User组,添加main.c函数,编写简单函数编译测试一下
5、连接STM32和STLINK
6、魔术棒--->Debug--->Settings--->ST-Link Debugger FlashDown--->Reset and Run
1、基于寄存器点灯
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010; //APB2ENR寄存器的IOPCEN位被置1,使能GPIOC的时钟
GPIOC->CRH = 0x00300000; // 端口配置高寄存器GPIOC->CRH,CNF和MODE配置为00和11
GPIOC->ODR = 0x00002000; // 端口输出数据寄存器GPIOC->ODR,ODR13写1高电平,写1低电平
while(1)
{
}
}
2、标准库函数点灯
(1) 新建Library文件夹存放内核和外设的标准库函数
(2) 添加stm32f10x_conf.h文件,用于配置库函数头文件的包含关系
(3) 添加stm32f10x_it.c、stm32f10x_it.h文件,用于存放中断函数
(4) 魔术棒--->C/C++--->Define中粘贴 USE_STDPERIPH_DRIVER
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
(5) 魔术棒--->C/C++--->Include Paths 添加User和Library头文件路径
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); // 配置GPIOC的外设时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 引脚:模式通用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 要初始化的引脚:13号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
while(1)
{
}
}
工程架构:
![Pasted image 20250107170410](assets/Pasted image 20250107170410.png)
main.c中包含stm32f10x.h, stm32f10x.h文件包含stm32f10x_conf.h, stm32f10x_conf.h文件包含外设库函数头文件
标签:---,引脚,简介,stm32f10x,STM32,GPIOC,GPIO From: https://www.cnblogs.com/czy363/p/18674791