文章目录
- 一、stm32简介
- stm32MCU:
- ARM:
- 命名规则:
- 片上资源/外设:
- 系统结构:
- 引脚的定义
- 功能引脚介绍:
- 最小系统引脚介绍:
- 电源引脚介绍:
- 启动配置
- 最小系统电路
- 二、软件安装
- 三、新建工程
- 固件库文件夹
- 型号分类及缩写
- 新建工程步骤
- 工程架构
- 其他
一、stm32简介
stm32MCU:
特点:
- STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
- STM32特色:硬件自动化,各个外设相互链接
stm32分类:
ARM:
ARM
- ARM既指ARM公司,也指ARM处理器内核
- ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
- ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片
ST设计与ARM设计的关系:
ARM分类:
命名规则:
关于STM32F103C8T6的命名规则:
关于STM32 & STM8 等其他芯片的命名规则:
STM32F103C8T6的一些参数:
- 系列:主流系列STM32F1
- 内核:ARM Cortex-M3
- 主频:72MHz(单片机的主频越高,其运算速度一般是越快;如果准确的时钟,需要使用外部晶振)
- RAM:20K(SRAM:存储介质)
- ROM:64K(Flash:闪存介质)程序存储器( 在断电情况下仍能保持所存储的数据信息 )
- 供电:2.0~3.6V(标准3.3V)(51单片机是5V,USB供电是5V,如果需要给32供电要稳压芯片)
- 封装:LQFP48
片上资源/外设:
STM32F103C8T6片上资源/外设:(深色是内核内的外设,其他是内核外的外设)
- 外设:硬件电路,直接通过读写数据寄存器就可以完成发送和接收数据
STM32F103C8T6片上资源/外设的简单介绍:
- F1芯片最后四个外设没有
系统结构:
-
ICode是用来加载程序指令的,Cortex-M3的控制器可以接收主存(Flash存储器)里面的指令操作码
-
由于主存的读取速度与Cortex-M3的读取速度不一致,所以中间需要Flash接口,
-
DCode是用来传输数据的,比如常量和调试数据等,所以连接Flash闪存(程序)
-
FSMC为可变静态存储器控制器,扩展静态内存
-
SRAM用于存储程序运行时的变量,可以用作高速缓冲存储器
-
桥接器:用于连接不同的总线,具有数据缓冲,转换和控制功能
-
AHB系统总线是挂载主要外设
-
AHB和APB2是72MHZ,APB1是36MHZ
-
DMA负责数据搬运,例如ADC的连续转化+扫描模式需要DMA
-
DMA拥有和CPU一样的总线控制权,绕过CPU直接访问内存与IO设备,主要是一些高速外设会发起DMA请求,DMA控制器会获取总线的访存控制权,此时CPU没有该控制器,会涉及总线控制权的争夺
-
SDIO:安全数字输入输出,定义了一种外设接口。
引脚的定义
颜色分类
- 红色是电源相关引脚,类型为S
- 蓝色是最小系统引脚
- 绿色是IO口,功能口
功能引脚介绍:
- IO口电平为FT表示可以接收5v电压
- 功能为VBAT是备用电池供电引脚,负责给外设RTC和BKP供电
- TAMPER侵入检测,功能是电平变化时清空数据
- RTC引脚用来输出RTC校准时钟,闹钟脉冲,秒脉冲
- 34号接32.758KHZ的晶振,电路经过2的15次方分频,生成1秒的时间信号
- VSSA和VDDA是模拟部分的电源,例如ADC,RC振荡器
- wkup可以唤醒处于待机的STM32
- 34/37-40是调试端口(下载端口),支持SWD(2根线)和JTAG(5根线)
最小系统引脚介绍:
- 复位:NRST表示低电平复位引脚(n表示低电平)
- 启动配置:BOOT0、BOOT1引脚是用来配置启动模式
- 晶振:5、6号接8MHZ的主晶振,芯片内部有锁相环电路,对8MHZ频率进行倍频,产生72MHZ的主时钟。
- 下载端口:34/37是调试端口(下载端口),支持SWD
电源引脚介绍:
- VSSA_1_2_3\和VDDA_1_2_3\是系统的主电源口,因为采用分区供电方式,所以有多个引脚
启动配置
- BOOT用来指定程序开始运行的位置,
一般是主闪存存储器
- 系统存储器模式用做串口下载,该存储器存储的是BootLoader程序,执行该程序可以将pc端代码数据刷新到主闪存中,当所有的调试接口都作为普通IO口时,可以采用这种方法
- 执行跳线帽的变换后要点reset开关
最小系统电路
- 连接最小系统引脚以及所需功能区的电源引脚
复位电路的设计:上电瞬间是先低电平后高电平
点击K1,上电的瞬间,相当于短路,给电容充电,NRST为低电平
。K1复位,电容充满电的时候相当于断路,此时NRST被电源上拉为高电平
。
- 滤波电容的作用是保证供电电压稳定,连接方式是一端接高电平,一端接地
二、软件安装
- 安装Keil5 MDK(keil5 c51是给51单片机。keil5 MDK给ARM架构的芯片)
- 安装器件支持包(因为芯片更新特别快,软件无法一直更新,通过器件支持包的形式来支持对应的芯片,例如stm32支持包)
- 软件注册
- 安装STLINK驱动
- 安装USB转串口驱动
三、新建工程
固件库文件夹
- 固件库主要文件在Libraries里面
型号分类及缩写
选择器件型号,因为启动文件要根据芯片型号和Flash内存大小
新建工程步骤
-
建立工程文件夹,Keil中新建工程,选择器件型号(此处选stm32f103c8t6)
-
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
-
Start文件夹里面包含如下文件【工程架构中会介绍文件的作用】
-
以上文件的本地路径分别是
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
-
-
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
- 将文件夹内的文件添加到工程分组里
- 选择所有文件
-
工程选项中添加头文件路径:点击魔术棒,C/C++,Include Paths内声明所有包含头文件(即含有.h的文件)的文件夹(因为是自己移入工程的)
-
工程里新建User文件夹并新建main.c文件
-
添加User文件夹
-
添加新文件
-
选择文件类型和文件路径(主要要选择已经建立好的文件夹下)
-
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER,使用库函数就必须声明
-
工程选项,Debug,下拉列表选择对应调试器ST-Link Debugger,点击右边Settings,Flash Download里勾选Reset and Run,下载程序后会立马复位执行
工程架构
- startup_stm32f10x_md.s文件
-
中断函数中调用了复位中断和其他中断(其他函数的参数用到的中断函数名就在该文件查询),完成设置初始SP(堆栈指针)、设置初始PC(程序计数器)、配置时钟系统
-
复位中断首先调用SystemInit()函数,该函数在system_stm32f10x.h中定义(-system_stm32f10x.c和system_stm32f10x.h用来配置时钟)
- 复位后函数调用顺序:startup_stm32f10x_cl.s(启动文件) → SystemInit() → SetSysClock () → SetSysClockTo72()
-
main函数文件中引入"stm32f10x.h"的头文件,该头文件中又引入 “stm32f10x_conf.h”(头文件包含关系配置)。因为"stm32f10x.h"使用条件编译的条件是USE_STDPERIPH_DRIVER,所以需要在Define内定义,在stm32f10x_conf.h中引入了Library中所有的库函数头文件
-
其他中断的函数定义不在"stm32f10x_it.h"中而在"startup_stm32f10x_md.s"文件中
-
stm32f10x.h是stm32的外设寄存器描述文件,作用和51单片机的REGX52.H一样,描述寄存器及其地址(外设描述文件)
-
core_cm3.h是内核寄存器描述文件
-
工程文件命名:
- hardware——存储于硬件相关的程序
- system——存储无硬件的程序
- library——库函数程序
- user——主程序
工程模板文件中执行keilkill.bat,会把Listings和Object里面的文件清空
其他
-
对于所使用的硬件,其实是了解如何初始化时序图和读写时序图,也就是说硬件编程是看时序写驱动
-
对于外设,需要了解其触发方式、通道配置、输出到哪里,写外设文件函数一般包含初始化函数和触发函数
-
W25Q64 Flash模块,存储数据并用spi总线进行通信
-
旋转编码器=编码电机的霍尔传感器和光电传感器的输出