电赛学习笔记(1)——stm32学习笔记

stm32基础

关于stm32产品线

stm32f1系列 cortex-m3

stm32f4系列 cortex-m4

  • 内置了rgb lcd驱动
  • 加入了DSP与FPU模块

    stm32f7系列 cortex-m7

  • 高速内存得到应用

    寄存器编程

关键字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的激活结构如下:
    PWM_Structure
  • 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):配置输出通道函数