• 五、Clion和STM32CubeMx---TIM定时器


    准备资料

    1. Clion

    2. STM32CubeMx开发环境

    3. STM32定时器

    4. 利用usrat模板工程(下面第三行,手动狗头)

    实验程序已经发布到百度网盘,本文末有链接可以自取

    STM32定时器查看这篇博客STM32定时器

    模板内含usart1重定向https://pan.baidu.com/s/1qzuLn5HftfkaZjsyCmp1Ow?pwd=0000

    工具Clion和STM32CubeMx

    实验程序已经发布到百度网盘,本文末有链接可以自取

    TIM定时器(定时中断)简介

    STM32定时器查看这篇博客STM32定时器

    实验步骤

    1. 复制下面这个工程模板,自带usart串口重定向

    https://pan.baidu.com/s/1qzuLn5HftfkaZjsyCmp1Ow?pwd=0000

    2. 修改工程名,Clion打开工程

    在这里插入图片描述
    使用Clion打开工程
    在这里插入图片描述

    3. 打开STM32CubeMx

    如果什么都不修改 ? 为了刷新一下工程 : 增加一些外设;
    小小的逻辑你应该能看的懂吧(手动狗头)
    在这里插入图片描述

    RCC、时钟树和调试模式都已经配好,如需修改请到:Clion和STM32CubeMx新建项目查看

    4. 配置Timers

    在这里插入图片描述

    1. 选择TIM2

    2. 定时器时钟选择内部时钟

    Clock Source(时钟来源)

    • 选项1 :Internal Clock 内部时钟
    • 选项2 : ETR2 外部触发输入(ETR)(仅适用TIM2,3,4)

    在这里插入图片描述

    Prtscaler (定时器分频系数) : 7199
    Counter Mode(计数模式) Up(向上计数模式)

    Counter Period(自动重装载值) : 4999

    CKD(时钟分频因子) : No Division 不分频

    • 选项: 可以选择二分频和四分频

    auto-reload-preload(自动重装载) : Enable 使能

    TRGO Parameters 触发输出 (TRGO) 不使能
    TRGO: 定时器的触发信号输出 在定时器的定时时间到达的时候输出一个信号(如:定时器更新产生TRGO信号来触发ADC的同步转换,)
    在这里插入图片描述
    这两个为定时器主从模式配置,很少用到,我们用不到,所以全部关闭

    使能定时器中断:
    在这里插入图片描述
    这里我们配置的是Time1是一个高级定时器所以具有刹车功能,(但是我们不用)
    启动溢出中断
    定时器溢出时间:
    在这里插入图片描述

    这里我们 arr=4999 psc=7199 Tclk=72Mhz Tout = (5000*7200)/72 us = 500ms

    5. 工程管理

    设置完MCU的各个配置之后,第三个就是工程文件的设置了
    在这里插入图片描述

    • 设置项目名称
    • 设置存储路径
    • 选择所用IDE(这里用的是Clion,所以用STM32CubeIDE或者SW4STM32都可以)
      在这里插入图片描述
      然后点击上方GENERATE CODE 创建工程
      在这里插入图片描述

    6. 返回Clion编写代码

    配置文件什么的都已经在工程模板里面配置完毕,大家直接使用即可,Clion和STM32CubeMx新建项目这里也有配置代码

    函数讲解:

    在这里插入图片描述

    HAL_TIM_IRQHandler(&htim1);
    
    • 1

    定时器中断处理函数 在stm32f4xx_it.c的 TIM1_IRQHandler()定时器中断服务函数中
    在这里插入图片描述

    这个函数的具体作用是判断中断是否正常,然后判断产生的是哪一类定时器中断(溢出中断/PWM中断…),然后进入相应的中断回调函数

    在这里插入图片描述

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    
    • 1

    在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中,

    这里我们是使用定时器溢出中断回调函数

    1. void TIM1_IRQHandler(void) 首先进入中断函数
    2. HAL_TIM_IRQHandler(&htim1);之后进入定时器中断处理函数
    3. 判断产生的是哪一类定时器中断(溢出中断/PWM中断…) 和定时器通道
    4. void HAL_TIM_PeriodElapsedCallback(&htim1); 进入相对应中断回调函数
    5. 在中断回调函数中添加用户代码

    在这里插入图片描述

    例程:

    定时器溢出时间为500ms,LED点亮延时500ms闪烁

    在main.c主函数上方初始化使能定时器1

    /*使能定时器1中断*/
        HAL_TIM_Base_Start_IT(&htim1);
    
    • 1
    • 2

    在main.c主函数下方添加中断回调函数

    /*中断回调函数*/
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
        static unsigned char ledState = 0;
        if (htim == (&htim1)) {
            if (ledState == 0)
                HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            else
                HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            ledState = !ledState;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    成品

    在这里插入图片描述

    工程链接

    链接:https://pan.baidu.com/s/1urTtEBtaYhP6-0SeweSMXQ 提取码:0000

  • 相关阅读:
    OpenCV形状检测
    HiveSQL用户留存率
    vuex的概念及环境配置
    [Vue3]构建通用后台系统
    安装Docker报错求解答~~
    面试必刷算法TOP101之回溯篇 TOP34
    Win10纯净版和官方原版哪个好?
    音响是如何把微弱声音放大呢
    应遵循哪些 GitLab 备份最佳实践
    CrossOver 23.6 让Mac可以运行Windows程序的工具
  • 原文地址:https://blog.csdn.net/weixin_55999942/article/details/126481005