电赛学习笔记(1)——stm32学习笔记
stm32基础
关于stm32产品线
stm32f1系列 cortex-m3
stm32f4系列 cortex-m4
关键字volatile需要在声明寄存器变量的时候添加,因为要防止编译器自行优化。
HAL库
硬件抽象层,可以将不同产品线的芯片的寄存器操作抽象为函数,方便移植
本笔记使用HAL库进行编程
相对的,HAL库会产生大量的判断来降低代码运行效率
但是,还有另一个Low Layer库(LL),这个库可以提高效率
stm32cubeMX配置
stm32计时器
PWM调制输出
几个重要参数
- 占空比:高电平占整个周期的比例
- 频率:整个PWM周期的倒数
- 分辨率:占空比变化步长
PWM实现方法
输出比较模式,依靠内部计数器cnt和ccr设置的数值的比较来进行输出电平的控制,常用的有匹配时电平翻转和PWM模式
PWM占空比:$$DutyCycle=\frac{CCR}{ARR}$$
PWM频率:$$Freq=\frac{F_{clk}}{ARR}$$
PWM分辨率:$$Resolution=\frac{ARR}{2^{n}}$$高级定时器
死区生成:可以避免推挽电路上下管同时打开导致短路PWM控制电机
舵机是根据pwm信号控制舵机转动角度的,内部有直流电机电机驱动芯片
利用H桥,可以控制电机转动方向。四个开关管可以构成两个推挽电路,使得电机可以获得两个方向的电流。
电机需要的电源一般是大功率的,不能直接通过gpio驱动,因此可以通过让stlink的5v口接入电机驱动芯片来获得电源。但是注意,pwm信号的地应当和电机电源的地相连,否则会出现电平不稳定的情况。PWM代码
pwm的激活结构如下: - RCC开启时钟
- 配置时基单元
- 配置输出比较单元
- 配置GPIO,设置为复用推挽输出
- 运行控制,启动计数器
TIM库函数
在hal库中,tim相关库函数在stm32f1xx_hal_tim.h文件中
其中有关输出比较的内容有: - TIM_OC_InitTypeDef: 输出比较初始化结构体
- HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim):输出比较初始化函数
- HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel):配置输出通道函数
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!