一. STM32介绍
1.1 stm32芯片介绍
ST:指意法半导体
M:指定微处理器
32:指定计算机处理器位数
ARM是一类微型处理器的统称,其微型处理器包含多个系列,每个系列各自具有不同的特点和应用领域。
ARM分为三个系列:
Cortex-A:针对多媒体应用
Cortex-R:针对对实时性和性能有一定要求的场景
Cortex-M:针对低功耗高性能的场景
【细分】Cortex-M0、Cortex-M3、Cortex-M4
命名规则
1.2 stm32芯片内部结构
SOC :片上集成系统
Cortex-M3内核(CPU):执行代码
存储器:代码下载保存的地方
I/O:和外部其他设备进行通信

详细内部结构
缩写定义:
DMA:直接内存存取控制器
FLASH:闪存存储器
FLITF:闪存存储器接口
FSMC:灵活的静态存储器控制器
GPIO:通用输入输出
ADC:模数转换器
SPI:串行外设接口
SDIO:接口
USART:通用同步/异步收发器
TIM:定时器
RTC:实时时钟
EXTI:外部中断事件控制器
I2C:接口
BKP:备份寄存器
bxCAN:控制器局域网模块
PWR:电源/功耗控制

1.3 stm32最小系统组成
使用stm32芯片型号:stm32f103c8t6

芯片工作的基本电路:
1、供电系统
2、时钟电路(内部时钟源、外部时钟源)
3、复位电路
4、下载的接口电路
5、boot电路(启动相关的电路)

1.4 开发相关参考手册介绍

二、固件库介绍
2.1 mcu开发方式介绍
从开发语言:
- 汇编语言
- C语言(高级语言效率高)
stm32单片机:(汇编+C)
实际开发编程使用方法:
1、配置MCU中的某个功能模块的寄存器,进行操作
2、使用ST官方提供的固件库驱动操作(封装的每个功能函数)
ST官方提供了STM32CubeMX软件,图形化配置开发软件。
2.2 固件库介绍



Libraries/CMISIS:与芯片启动相关
Libraries/STM32F10x_StdPeriph_Driver:标准外设驱动
Libraries/STM32F10x_StdPeriph_Driver/inc:头文件 /src:.c源码



三、开发环境搭建
3.1 keil软件的安装

3.2 keil工程搭建
3.2.1 目录结构管理

3.2.2 工程结构管理
1、打开keil5软件,点击project,创建新的工程

2、选择芯片型号 STM32f103C8
3、管理keil工程内部的目录结构

4、文件添加

3.2.3 配置


四、STM32启动过程
4.1 存储器结构
程序存储器、数据存储器、寄存器和输入输出端口,被组织在同一个4G的线性地址空间中。 可以通过地址的方法访问对应存储器和寄存器。
4.2 三种启动模式


4.3 启动文件


4.4 启动文件分析
上电或按下复位按键,从Reset_Handle 开始执行。
; Reset handler Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
执行的第一个函数:SystemInit
初始化flash接口
初始化设置PLL
初始化设置 系统时钟
第二个函数:__main
(属于C库函数,作用:
完成全局/静态变量的初始化
初始化堆栈
库函数初始化
程序的跳转,进入用户的main函数入口)
五、STM32时钟系统
5.1 时钟系统框图
5.1.1 系统时钟的时钟源
HSI
HSE
PLL

外部低速时钟(LSE):
可以被选择作为RTC时钟源
内部低速时钟(LSI):
一是作为独立看门狗时钟源,二是可以被选择作为RTC时钟源
系统时钟sysclk:
PCLK1&TIM-2-7:
最大36MHz
PCLK2&TIM1&TIM8:
5.2 系统时钟初始化过程

六、STM32通用输入输出(GPIO)
6.1 GPIO介绍
功能:
输入(Input):
浮空
模拟
上拉
下拉
输出(Output):
推挽
推挽输出有一定的驱动能力,可以真正的输出高低电平
开漏
实际没有驱动能力,想要驱动设备,需要外部有驱动设备
七、STM32PWM输出
7.1 stm32定时器介绍
共有8个高级定时器:高级定时器(TIM1和TIM8)、通用定时器(TIM2-TIM5)、基本定时器(TIM6、7)
具体功能特点:参考stm32数据手册
7.2 定时器PWM输出
PWM:脉冲宽度调制(频率可以设定,占空比可动态调节)高电平所占的时间比

7.2.1 原理说明
每个定时器有4路输出通道:OC1—OC4
有RCC给到TIM2—TIM7的时钟频率是72MHz
7.2.2 固件库相关函数说明

10 void TIM_TimeBaseInit(TIM_TypeDef* TIM, TIM_TimeBaseInitTypeDef* TIM——TimeBaseInitStruct);


PWM1模式:CNT < CRRx,输出为有效电平。
PWM2模式:相反
有效电平由极性决定:TIM_OCPolarity_High TIM_OCPolarity_Low

八、嵌套中断向量控制器NVIC
8.1 NVIC介绍








8.2 中断行为
当stm32开始响应一个中断时,会做出如下动作:
- 入栈
- 取向量
- 选择堆栈指针MSP(主堆栈)/PSP(进程堆栈),更新堆栈指针SP,更新链接寄存器LR,更新程序计数器PC


8.3 外部中断·



8.4 外部中断/事件线路映象


8.5 EXTI相关数据结构与函数说明



九、直接存储器存取(DMA)


芯片内部框图:

9.1 DMA初始化


十、串口UART







十一、看门狗
- 独立看门狗 IWDG












十二、模数转化器ADC




















6055

被折叠的 条评论
为什么被折叠?



