• 蓝桥杯嵌入式基础模块——定时器的基本作用(新板)STM32G431(HAL库开发)


     STM32定时器资源介绍        

             STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

    通用定时器的功能

    STM32 的通用 TIMx (TIM2、 TIM3、 TIM4 和 TIM5)定时器功能包括:

    1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
    2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~
    65535 之间的任意数值。
    3) 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
            A.输入捕获
            B.输出比较
            C. PWM 生成(边缘或中间对齐模式)
            D.单脉冲模式输出
    4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外
    一个定时器)的同步电路。
    5)如下事件发生时产生中断/DMA:
            A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
            B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
            C.输入捕获
            D.输出比较
            E.支持针对定位的增量(正交)编码器和霍尔传感器电路
            F.触发输入作为外部时钟或者按周期的电流管理

     实验内容

            初始化定时器定时100ms,使LED1闪烁,并且B1按键,可以改变定时器定时时间。按一次增加1000ms。

    演示效果

    696f2f499536494085cbf7873fd36c0b.gif

     

    硬件连接

    LED

    0b8aa66b6d864055aa50172e3bf39433.png

     按键

    505e6ac7b409451a8368df7463977dc5.png

    STM32CubeMX配置

    c30d028fe32e4950ad7259cc8283c342.png

     

     4da005d7debb4a8881528ea1425f93d3.png

    主程序

    main.c

    1. int main(void)
    2. {
    3. HAL_Init();
    4. /* USER CODE BEGIN Init */
    5. /* USER CODE END Init */
    6. /* Configure the system clock */
    7. SystemClock_Config();
    8. /* USER CODE BEGIN SysInit */
    9. /* USER CODE END SysInit */
    10. /* Initialize all configured peripherals */
    11. MX_GPIO_Init();
    12. MX_TIM2_Init();
    13. /* USER CODE BEGIN 2 */
    14. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//关闭锁存器
    15. LCD_Init();
    16. LCD_SetTextColor(White);
    17. LCD_SetBackColor(Black);
    18. LCD_Clear(Black);
    19. HAL_TIM_Base_Start_IT(&htim2);//使能定时器
    20. while (1)
    21. {
    22. vKeyScan();
    23. }
    24. }

    tim.c

    1. uint16_t flag=0;
    2. uint16_t B1=100;
    3. //定时器中断回调函数
    4. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    5. {
    6. if(htim->Instance=htim2.Instance)
    7. {
    8. flag++;
    9. if(flag==B1)
    10. {
    11. flag=0;
    12. HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
    13. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
    14. |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
    15. HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);//翻转电平
    16. HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
    17. }
    18. }
    19. }

     

     

  • 相关阅读:
    特斯拉2年内实现全自动驾驶,无人驾驶时代还远吗?丨曼孚科技
    java 基础5道题
    线程池BUG复现和解决
    02--Spring中AOP
    函数reshape(-1,)里的-1的意思
    python+selenium进行cnblog的自动化登录测试
    【基础教程】Matlab实现等高线图
    C++前缀和算法的应用:从栈中取出 K 个硬币的最大面值和 原理源码测试用例
    C#.NET 国密SM2 加密解密 与JAVA互通 ver:20230805
    Web3 世界的名片
  • 原文地址:https://blog.csdn.net/m0_58832575/article/details/126717499