CubeMx笔记--中断+定时器

所用软件 STM32CubeMX、keil5
未注明的操作表示在keil
笔记来源:https://www.bilibili.com/video/BV1Ht41157eu?p=2&vd_source=c40ab5658bef241a1d15ffea353293aa

1、关于代码的生成

  • 生成代码以后需要编译,不然有些函数无法跳转

1.1、设置Project Manager

  • 在cubemx中设置
  • 文件名不能有中文,IDE改为MDk
  • 自动生成 .c.h,不然很多初始化函数会直接在main中生成
    在这里插入图片描述

1.2、设置SYS

  • 在cubemx中设置
  • Serial Wire 占用引脚最少

1.3、要编译utf-8格式的中文

  • 在魔法棒的c/c++里的miscControls添加:–locale=english

1.4、.s文件

  • 修改堆栈
    Stack_Size EQU 0x400
    Heap_Size EQU 0x200

1.5、代码保护区

/* USER CODE BEGIN XXX */

/* USER CODE END XXX */
  • 不能自己构建保护区
  • 非保护区的内容会在cubemx生成代码时被删除
  • 最好别动类似的注释

1.6、{}Function选项卡

  • 可以直观的查看文件里的函数
    在这里插入图片描述

1.7、函数前的注释

  • @brief 说明函数功能
  • @param 第1参数
  • @param 第2个参数
  • @retval 返回值

2、GPIO与外部中断

2.1、切换引脚电平 (toggle)

  • 就是这个HAL_GPIO_TogglePin函数

2.2、中断优先级

  • 抢占优先级 Preemption priority
    抢占优先级越高,当中断产生时越先执行
    如:a中断函数执行时,b优先级高于a,产生b中断,暂停a执行b中断函数
  • 响应优先级
    cubemx中 以Sub priority表示
    抢占优先级相同时,当两个中断来临时,响应优先级越高的先执行

2.3、中断设置

  • 在cubemx中设置
  • 直接在芯片引脚选择GPIO_EXIT
    GPIO mode:设置中断触发方式:下降沿触发(高变低)具体看情况
  • 使能外部总线中断
    NVIC–> EXIT line
  • 设置中断优先级
    NVIC–> EXIT line–>Preemption Priority
    值越小中断优先级越高

2.4、外部中断的使用

  • 在stm32f2xx_it.c中的 EXTI15_10_IRQHandler函数查看
  • main中重写HAL_GPIO_EXTI_Callback

3、RCC与定时器中断

HSI RC、LSI RC为芯片自带晶振

3.1、设置系统时钟

  • 在cubemx中设置,具体的设置要看芯片手册

  • HSI 为内部时钟

  • HSE 外部高速时钟
    BYPASS Clock Source是旁路时钟源,使用外部晶振时不能选择旁路时钟源

  • PLL 锁相环
    PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件。
    由 HSE 或者 HSI 提供时钟输入信号
    在这里插入图片描述

  • CSS
    如果 HSE 发生故障,HSE 和 PLL 也会被关闭,此时系统会自动切换 HSI 作为系统时钟
    没有开启 CSS 和 CSS 中断的话,此时SYSCLK = HSI 系统低速运行
    开启了 CSS 功能,在css中断使用 HSI可以重新设置系统频率

  • LSE外部低速 时钟
    主要是给RTC用的(一般不用),所以还需要配置RTC使能

  • AHB 高速总线
    Advanced High-performance Bus, 用来接高速外设。

  • APB 低速总线
    Advanced Peripheral Bus,用来接低速外设。

3.2、时钟预分频值和自动重装值(16bit)

  • psc:时钟预分频值 从0开始计
  • arr:自动重装值 从0开始计
  • Tclk:输入时钟频率(单位为 Mhz)
  • Tout:中断时间(单位 us)
  • Tout= ((arr+1)(psc+1))/Tclk
    例:(4999+1)
    ( 7199+1))/72=500000us=500ms 每0.5秒中断一次
  • 中断频率 = 1/Tout (单位 Hz)
    例:72000000/(4999+1)*( 7199+1)) = 2 Hz

3.3、设置预分频值和自动重装值

  • 在cubemx中设置
  • 设置定时器
    TIMx --> Clock Source --> internal clock (内部时钟)
  • 预分频值 Prescaler和自动重装值Counter Period
    TIMx --> ParamterSettings --> Prescaler,Counter Period

3.4、查看内部时钟

  • time.c --> HAL_TIM_Base_MspInit --> __HAL_RCC_TIM1_CLK_ENABLE()
  • 也可在芯片手册 RCC registers查看

在这里插入图片描述

3.5、定时器中断的使用

  • stm32f2xx_hal_tim.c --> HAL_TIM_Base_Start_IT(在main中调用启动函数)
  • 中断处理回调函数HAL_TIM_PeriodElapsedCallback(在main中重写)

4、定时器中断频率与pwm

4.1、设置pwm

  • 在cubemx中设置
  • 选一个空闲引脚 选择 TIMx_CHx 以 TIM3_CH2 为例
  • TIM3 --> 设置Clock Source(选内部时钟) 和 Channel(选PWM Generation CH2)
  • 设置预分频值和自动重装值
  • 设置占空比 Pulse
    占空比 = Pulse/自动重装值
    可不设置 在main中设置TIM3->CCR2的值 Pulse = TIM3->CCR2
    在这里插入图片描述D:占空比 F:中断频率

4.2、设置启动函数

  • 同定时器中断一样
    在main中调用 stm32f2xx_hal_tim.c --> HAL_TIM_PWM_Start
    在time.c中的pwm对应定时器初始化函数中可找到如何传参
  • 设置占空比
    在main中设置:TIM3->CCR2 = xx; 占空比 = xx / 自动重装值

那个大佬后面还讲了串口,我只是为了熟悉cubemx所以就没往后看了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值