• STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁


    STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁


    📚功能介绍

    📑通过STM32CubeMX配置定时器1和定时器3分别作为两个led的定时闹钟。这里作为演示,当然使用一个定时器,通过轮询方式,实现多个led不定长时间闪烁也是可以的。

    📗实现方法介绍

    • ✅定时时间计算公式:
      定时时间 = (Prescaler+1)× (Counter +1)/ 定时器时钟频率
      例如,这里定时时间为 1ms,可设置Prescaler = 64-1;Counter = 1000 - 1;(TIM2时钟频率设置为64MHz)
      在这里插入图片描述
      1. 对应自动生成的代码部分
     htim1.Instance = TIM1;
      htim1.Init.Prescaler = 64-1;//预分频
      htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
      htim1.Init.Period = 1000-1;//1ms = 64/(64-1)/1000
      htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
      htim1.Init.RepetitionCounter = 0;
      htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    🔖如果想直接定时1S,那么配置参数代码如下:

      htim1.Instance = TIM1;
      htim1.Init.Prescaler = 6399;//预分频
      htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
      htim1.Init.Period = 9999;
      htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
      htim1.Init.RepetitionCounter = 0;
      htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
      1. 🔨使能定时器中断
        在这里插入图片描述
    • ✅中断向量表这里勾选也一样
      在这里插入图片描述

    📝重写定时器中断回调函数内容

    🍁在main.c中,相应位置添加如下代码:

    #include //用于调用printf函数打印,需要在target选项中勾选‘Use MicroLib’
    #define led_shine_time 1000 //定时时长
    #define led_shine_time2 1000
    uint16_t cnt1,cnt2;
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
        if(htim->Instance == TIM1)                  //处理TIM1间隔定时中断
        {
    				cnt1++;
    				if(cnt1 == led_shine_time)
    				{
    					cnt1 = 0;
    					printf("cnt1 \n");//1s打印一次
            HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);
    				}
        }
        if(htim->Instance == TIM3)                 //处理TIM3间隔定时中断
        {
    			cnt2++;//1s打印一次
    			if(cnt2 == led_shine_time2)
    			{
    				cnt2 = 0;
            HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);
    				printf("cnt2 \n");
    			}
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 🚩在usart.c文件中添加如下内容:
    #include "stdio.h"
    /*可调用printf*/
    int fputc(int ch,FILE *f)
    {
        /*&huart1指的是串口1,如果用别的串口就修改数字*/
        HAL_UART_Transmit(&huart1 , (uint8_t *)&ch , 1 , 0xffff);
        return ch;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 🌿串口调试信息打印
      在这里插入图片描述

    ⛳程序源码

    链接:https://pan.baidu.com/s/1UTPwtcE5xfC4EbIya-DRDA 
    提取码:e5ez
    
    • 1
    • 2
  • 相关阅读:
    Mac下使用Docker快速布署FastGPT实现AI私有知识库
    react09 hooks(useState)
    Docker部署Emqx并配置ssl支持微信小程序
    kubeadm安装k8s集群
    【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)
    [附源码]SSM计算机毕业设计远程在线教育平台JAVA
    算法练习----力扣每日一题------6
    1秒破解iPhone 13 Pro:可任意获取并删除设备上的数据
    接口测试工具
    分布式协调系统ZooKeeper实践与原理剖析
  • 原文地址:https://blog.csdn.net/weixin_42880082/article/details/127593657