【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教

p63 中断的使用和HAL库中断回调处理机制
EXTI配置步骤
- 使能GPIO时钟
- 设置GPIO输入模式
- 使能AFIO/SYSCFG时钟
- 设置EXTI和IO对应关系
- 设置EXTI屏蔽,上/下沿
- 设置NVIC
- 设置中断服务函数
HAL库设置步骤(GPIO外部中断)
- 使能GPIO时钟
- GPIO/AFIO(SYSCFG)/EXTI(使用HAL_GPIO_Init一步到位)
- 设置中断分组
- 设置中断优先级
- 使能中断
- 设置中断服务函数
STM32仅有7个中断服务函数:
- EXTI0-4共5个
- EXTI5-9共1个
- EXTI10-15共1个
通用外设驱动模型(四步法,1、4步)
HAL库中断回调处理机制
- 中断服务函数(硬件中断服务函数)
- HAL库中断处理共用函数(异常处理,清中断标志和,调用回调函数)
- HAL库数据处理回调函数(各种回调函数,可有多个)
p88 定时器概述
课堂内容
- 定时器概述
- 基本定时器
- 通用定时器
- 高级定时器
- 课堂总结(掌握)
本节内容
- 软件定时原理
- 定时器定时原理
- STM32定时器分类
- STM32定时器特性表
- STM32基本、通用、高级定时器功能整体的区别
1.1 软件定时原理
- 使用纯软件(CPU死等)的方式实现定时(延时)功能
- 延时实现1:执行for语句,执行__nop();每次执行延迟时间与芯片主频有关。
- 延时实现2:延迟时间乘以延时因子,然后循环递减(不精准的)
缺点
- 延时不精准
- CPU死等
1.2 定时器定时原理
- 使用精准的时基,通过硬件的方式,实现定时功能
- 定时器核心就是计数器
- CLK经过PSC(预分频器),获得TIM CLK(计时器真正工作的时钟);计数器根据时钟计数,直到溢出,产生事件;计数器可以由APP自动重装载值
1.3 STM32定时器分类
定时器分类
- 常规定时器:基本、通用、高级
- 专用定时器:独立看门狗、窗口看门狗、实时时钟、低功耗定时器
- 内核定时器:SysTick定时器
1.4 STM32定时器特性表
特性表(F1)
- 基本定时器:TIM6、7;计数模式递增;捕获/比较通道0;无互补输出
- 通用定时器:TIM2-5;计数模式递增、递减、中央对齐;捕获/比较通道4;无互补输出
- 高级定时器:TIM1、8;计数模式递增、递减、中央对齐;捕获/比较通道4;有互补输出
共同特性:计数器位数16;计数模式递增;预分频系数1~65535;可以产生DMA请求;
H7特性表略
表格在开发指南中可以找到
1.5 STM32基本、通用、高级定时器功能整体的区别
- 基本定时器:没有输入输出通道,常用作时基,即定时功能
- 通用定时器:具有多路独立通道,可用于输入捕获/输出比较,也可用作时基
- 高级定时器:具备通用定时器所有功能,具备带死区控制的互补信号输出、刹车输入等功能(可用于电机控制、数字电源设计等)
p89 基本定时器简介 框图 计数模式及溢出条件
本节内容
- 基本定时器简介
- 基本定时器框图
- 定时器计数模式及溢出条件
- 定时器中断实验相关寄存器
- 定时器溢出时间计算方法
- 定时器中断实验配置步骤
- 编程实战:定时器中断实验
2.1 基本定时器简介
- 基本定时器:TIM6/TIM7
- 主要特性:16位递增计数器(计数值0~65535);16位预分频器(分频系数1~65536);可用于触发DAC;在更新事件(计数器溢出)时,可产生中断/DMA请求
2.2 基本定时器框图
- 时钟源:来自RCC的TIMxCLK->内部时钟(CK_INT)
- 控制器
- 计数器(时基单元):CK_PSK->PSC(预分频器)--(CK_CNT)--> CNT(计数器);自动重载寄存器--> CNT计数器
- PSC和ARR有影子寄存器
- 影子寄存器实际上起作用,不可直接访问,实际上起到缓冲的作用
- 写入寄存器的数值需要转移到影子寄存器才能起作用,依靠一个事件
事件
- 溢出产生更新事件(U事件)、中断和DMA输出事件、UG位产生软件更新事件
- 更新事件可使预装载寄存器的值加载到对应的影子寄存器
- ARPE位决定ARR是否具有缓冲
定时器时钟源的来源