初识STM32单片机-概述&工程建立
一、STM32概述
- STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
- 高性能系列:STM32F2、F4、F7和H7系列;
- 主流系列:STM32G0、F0、F1、G4和F3系列;
- 超低功耗系列:STM32L0、L1、L4、L4+、L5和U5系列;
- 无线系列:STM32WL和WB系列;
二、STM32F103C8T6概述
- 系列:主流系列STM32F1
- 位数(寄存器):32位
- 内核:ARM Cortex-M3
- 主频:72MHZ
- RAM:20K(SRAM)
- ROM:64K(Flash)
- 供电:2.0~3.6V(标准3.3V)
下面给出此芯片的片上资源/外设
NVIC和SysTick是内核内的外设,其余外设是内核外的
下面给出STM32系统结构图
举例说明:开启RCC时钟,从而控制AHB到APB的桥(AHB2APBx),它通过APB1(36MHZ)和APB2(72MHZ)外设总线连接所有的APB设备,例如GPIOx、TIM1、ADC等等
下面给出STM32F103C8T6的引脚定义
类型中S代表电源、I代表输入、O代表输出、I/O代表输入输出;电平中FT表示可以容忍5V电压、其余只能容忍3.3V,如果3.3V电压想要接5V电压,需要电压转换电路;主功能是指上电默认的功能,默认复用功能就是IO口上同时连接的外设功能引脚,配置IO口时,可以选择通用功能,还是复用功能;重定义功能,如果有两个功能同时复用在一个IO口上,那就可以重映射到此口上
- VBAT:备用电池供电,接3V电池,系统电源断电时,备用电池可以给内部RTC时钟和备份寄存器提供电源
- PC13-TAMPER-RTC:IO口/侵入检测/RTC
- PC14-OSC32_IN/PC15-OSC32_OUT:IO口/32.768KHz的RTC晶振
- OSC_IN/OSC_OUT:主晶振,一般是8MHz,最终产生72MHz的频率作为系统的主时钟
- NRST:系统复位引脚,N表示低电平复位
- VSSA/VDDA:内部模拟部分的电源,VSS接GND,VDD接3.3V
- PA0-PA12/PB0-PB1/PB5-PB15:IO口,其中PA0兼具唤醒处于待机的STM32
- PA13-PA15/PB3-PB4:IO口和调试端口
- BOOT0:启动配置
- PB2:IO口或者BOOT1引脚,BOOT引脚用来配置启动模式
- VSS_123/VDD_123:主电源口,VSS接地,VDD3.3V
启动配置:
系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值就会被锁存
一般情况下,程序运行都是都是在Flash存储器里开始执行(X0),我们也可以利用启动模式使得在别的地方开始执行,用以完成特殊的功能,01用以串口下载,11程序调式
下面给出STM32F103C8T6的最小系统电路图
三、工程建立
STM32系列单片机开发,不再像C51系列单片机一样配置寄存器,而是基于库函数的开发,主流的库主要是HAL和标准库函数,所以在建立STM32工程时,需要导入库函数,具体流程如下
新建好项目,选择好型号以后,必须要在项目文件夹内事先新建文件,然后再在Keil里面添加文件夹;
文件夹添加到Keil工程里时,还需要在工程选项里添加上这个文件夹的头文件路径(Start、User…)(魔术棒 —> C/C++ —> include Paths)
调试下载,还需要配置ST-link或者J-Link(魔术棒 —> Debug —> ST-Link),勾选Reset and Run(Setting —> Flash Download),运行编译完成后,点击Load按钮下载程序
- 首先是STM32的启动文件如下,将以下三部分文件复制到启动文件夹Start
以下是STM32的启动文件
以下是STM32的外设寄存器描述文件,用来描述寄存器地址和配置时钟的,存放到Start文件夹里
以下是内核寄存器的描述文件,STM32是由内核和内核外围的设备组成的,内核寄存器的描述文件也存放到Start文件夹里
移动好文件以后,需要将文件添加到工程里,本文学习的系列单片机是F103系列,所以只需要添加md.s的启动文件和其他两部分文件
- 新建Library文件夹,添加库函数;新建User文件夹,添加main.c函数,添加库函数头文件包含文件,中断函数
以下是STM32的库函数,misc.c是内核库函数,其余是外设库函数
以下是库函数的头文件
添加好库函数时,还不能直接使用,还需要配置库函数头文件的包含关系的,it文件用来存放中断函数的,放到User文件夹内
最后还需要将如下字符串复制到Define(魔术棒 —> C/C++ —> Define),这样才能包含标准外设库
最后给出工程架构
四、总结
本次学习STM32的一些基本概述,初次建立工程,理解了使用库函数去开发STM32的流程