stm32week17+18+19+20
stm32学习
十二.串口
5.USART的HAL库用法
USART/UART异步通信配置步骤:
- 配置串口工作参数:HAL_UART_Init();
- 串口底层初始化:HAL_UART_MspInit();
- 开启串口异步接收中断:HAL_UART_Receive_IT();
- 设置优先级,使能中断:HAL_NVIC_SetPriority();、HAL_NVIC_EnableIRQ();
- 编写中断服务函数:USARTx_IRQHandler();、UARTx_IRQHandler();
- 串口数据发送:USART_DR、HAL_UART_Transmit();
十三.看门狗
1.IWDG
Independent watchdog,独立看门狗
本质:产生系统复位信号的计数器
喂狗:在计数器数到0之前,将计数器复位
2.WWDG
Window watchdog,窗口看门狗
与IWDG的区别:需在窗口内喂狗(早于下限或晚于上限均复位),可检测超时和异常提前喂狗,配置复杂
应用场景:
IWDG:适用于主时钟可能故障、对可靠性要求极高的场景(如安全系统),独立工作,对时间精度要求低
WWDG:适用于需精确控制复位时间的场景(如实时任务监控),通过窗口严格监控,确保任务在规定时段内运行
十四.TIMER
1.概述
软件定时原理:用纯软件(CPU死等)的方式实现定时功能,不精准,且拖累CPU
硬件定时:用精准的时基,实现定时功能
STM32定时器分类:

整体的区别:

2.配置步骤
- 配置定时器基础工作参数:HAL_TIM_Base_Init()
- 定时器基础MSP初始化:HAL_TIM_Base_MspInit(),配置NVIC、CLOCK
- 使能更新中断并启动计数器:HAL_TIM_Base_Start_IT()
- 设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 编写中断服务函数:TIMx_IRQHandler
- 编写定时器更新中断回调函数:HAL_TIM_PeriodElapsedCallback()
3.PWM
通用定时器PWM输出实验配置步骤:
- 配置定时器基础工作参数:HAL_TIM_PWM_Init()
- 定时器PWM输出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置PWM模式/比较值等:HAL_TIM_PWM_ConfigChannel()
- 使能输出并启动计数器:HAL_TIM_PWM_Start()
- 修改比较值控制占空比(可选):__HAL_TIM_SET_COMPARE()
- 使能通道预装载(可选):__HAL_TIM_ENABLE_OCxPRELOAD()
4.通用定时器输入捕获脉宽测量
输入捕获脉宽测量是微控制器利用内部定时器的 输入捕获功能 来测量外部脉冲信号宽度的技术。这一功能在电机控制、信号检测、通信协议解析等场景中广泛应用
配置步骤:
- 配置定时器基础工作参数:HAL_TIM_IC_Init()
- 定时器输入捕获MSP初始化:HAL_TIM_IC_MspInit()配置NVIC、CLOCK、GPIO
- 配置输入通道映射、捕获边沿:HAL_TIM_IC_ConfigChannel()
- 设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能定时器更新中断:__HAL_TIM_ENABLE_IT()
- 使能捕获、捕获中断及计数器:HAL_TIM_IC_Start_IT()
- 编写中断服务函数:TIMx_IRQHandler()
- 编写更新中断和捕获回调函数:HAL_TIM_PeriodElapsedCallback()、HAL_TIM_IC_CaptureCallback()
5.通用定时器脉冲计数
配置步骤:
- 配置定时器基础工作参数:HAL_TIM_IC_Init()
- 定时器输入捕获MSP初始化:HAL_TIM_IC_MspInit()配置NVIC、CLOCK、GPIO
- 配置定时器从模式等:HAL_TIM_SlaveConfigSynchro()
- 使能输入捕获并启动计数器:HAL_TIM_IC_Start()
- 获取计数器的值:__HAL_TIM_GET_COUNTER()
- 设置计数器的值:__HAL_TIM_SET_COUNTER()
6.高级定时器
输出指定个数PWM配置步骤:
- 配置定时器基础工作参数:HAL_TIM_PWM_Init()
- 定时器PWM输出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置PWM模式/比较值等:HAL_TIM_PWM_ConfigChannel()
- 设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能定时器更新中断:__HAL_TIM_ENABLE_IT()
- 使能输出并启动计数器:HAL_TIM_PWM_Start()
- 编写中断服务函数:TIMx_IRQHandler()
- 编写更新中断和捕获回调函数:HAL_TIM_PeriodElapsedCallback()
输出比较模式配置步骤:
- 配置定时器基础工作参数:HAL_TIM_OC_Init()
- 定时器PWM输出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置输出比较模式:HAL_TIM_OC_ConfigChannel()
- 使能通道预装载:__HAL_TIM_ENABLE_OCxPRELOAD()
- 使能输入捕获并启动计数器:HAL_TIM_OC_Start()
- 修改捕获/比较计数器的值:__HAL_TIM_SET_COMPARE()
死区控制、刹车

元器件有延迟特性,所以通电后会有一段死区时间
死区会导致 稳态精度下降、执行器抖动、能耗增加,所以要有死区控制系统
刹车:让电机快速停转,stm32可以通过寄存器输出刹车信号
配置步骤:
- 配置定时器基础工作参数:HAL_TIM_PWM_Init()
- 定时器PWM输出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置输出比较模式:HAL_TIM_OC_ConfigChannel()
- 配置刹车功能、死区时间等:HAL_TIMEx_ConfigBreakDeadTime()
- 使能输出并启动计数器:HAL_TIM_PWM_Start()
- 使能互补输出、主输出、计数器:HAL_TIMEx_PWMN_Start()
PWM输入模式
配置步骤:
- 配置定时器基础工作参数:HAL_TIM_IC_Init()
- 定时器PWM输出MSP初始化:HAL_TIM_IC_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置输出比较模式:HAL_TIM_IC_ConfigChannel()
- 配置从模式,触发源等:HAL_TIM_SlaveConfigSynchro()
- 设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能输入捕获并启动计数器:HAL_TIM_IC_Start()、HAL_TIM_IC_Start_IT()
- 编写中断服务函数:TIMx_IRQHandler()
- 编写输入捕获回调函数:HAL_TIM_IC_CaptureCallback()
十五.某些外设
1.MPU
f1没有
memory protection unit内存保护单元
功能:
- 设置不同的存储区域的存储器访问权限
- 设置存储器(内存和外设属性):可缓存、可缓冲、可共享
三种内存类型:
- Normal memory:CPU以最高效的方式加载和存储字节
- Device memory:加载和存储要严格按照次序进行
- Strongly ordered memory:程序完全按照代码顺序执行,CPU会等待当前加载存储执行完毕
