码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 五、Clion和STM32CubeMx---TIM定时器


    目录

    • 准备资料
    • TIM定时器(定时中断)简介
    • 实验步骤
      • 1. 复制下面这个工程模板,自带usart串口重定向
      • 2. 修改工程名,Clion打开工程
      • 3. 打开STM32CubeMx
      • 4. 配置Timers
      • 5. 工程管理
      • 6. 返回Clion编写代码
        • 函数讲解:
        • **例程:**
    • 成品
    • 工程链接

    准备资料

    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

  • 相关阅读:
    m低信噪比下GPS信号的捕获算法研究,使用matlab算法进行仿真
    leetcode1297. 子串的最大出现次数
    CentOS7.6升级内核到5.11及build RPM包
    2.1 发布与订阅C++
    tomcat 启用https加密码访问
    为什么大厂前端监控都在用GIF做埋点?
    30天Python入门(第十四天:深入了解Python中的高阶函数))
    P6774 [NOI2020] 时代的眼泪(分块)
    壳聚糖修饰的雷公藤多苷聚乳酸纳米粒(LMWC-TG-PLA-NPs)齐岳规格信息
    第5章 操作符和表达式
  • 原文地址:https://blog.csdn.net/weixin_55999942/article/details/126481005
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号