文章目录

  • 一、环境配置
  • 二、定时器简介
  • 三、用STM32CubeMX配置工程
  • 四、用Keil配置代码
  • 五、运行效果
  • 六、总结
  • 七,参考资料

一、环境配置

软件:STM32CubeMX:6.6.1
Keil 5.31
mcuisp
硬件:STM32F103C8T6

二、定时器简介

STM32F4 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2TIME5,TIM9TIM14 等通用定时器,还有 TIME6 和 TIME7 等基本定时器,总共达 14 个定时器之多。
定时器分类

定时器功能介绍

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

计时器模式
通用定时器可以向上计数、向下计数、向上向下双向计数模式。

1.向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
2.向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
3.中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

三、用STM32CubeMX配置工程

1.点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

2.搜索型号,选择合适的型号进行工程建立

3.打开外部时钟,点击“System Core” ,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”

4.选择调试接口,点击“System Core”,选择SYS。,在右侧弹出的菜单栏中选择“Serial Wire”。

5.点击GPIO,配置管脚,将PC15设置为GPIO-OUT,并设置User Label为D1

6.配置定时器2。这里我们使用定时器2来实现定时的功能。如图所示,依次点击位置1,选中定时器2;位置2,配置定时器2的时钟源为内部时钟;位置3,分频系数为71,向上计数模式,计数周期为5000,使能自动重载模式。

分频系数那里虽然写的是71,但系统处理的时候会自动加上1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数5000次,得到时间5000/1000000=0.005秒。也就是每隔0.005秒定时器2会产生一次定时中断。
7.配置中断。如下图所示,开启定时器2的中断。

如下图所示,生成定时器2中断优先级配置代码。

8.配置时钟。

9.点击“Project Manager” ,再点击“Code Generator” ,进行配置

再点击“Project ”,进行配置后,点击“GENERATE CODE”,生成项目

四、用Keil配置代码

1.打开生成的工程,找到mian.c,将如下代码添加到如下图位置:

HAL_TIM_Base_Start_IT(&htim2);


该函数表示启动相应的定时器, “h”表示HAL库, “tim2”表示定时器2。所以这行代码的意思就是启动定时器2。
同样在main.c中找到如下位置写入代码:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint32_t time_cnt =0;if(htim->Instance == TIM2){if(++time_cnt >= 400){time_cnt =0;HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);}}
}

该函数为定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。在函数内部定义了一个静态变量:time_cnt。当它大于等于400的时候,才会执行if里面的代码。也就是说需要发生400次中断,才会让LED的状态翻转。前面已经算过了,一次定时中断的时间是0.005秒,所以400次中断的时间是0.005*400=2秒。也就是说每隔2秒,LED的状态翻转一次。

五、运行效果

TIMER_LED

六、总结

本次实验完成了用定时器Timer方式实现LED周期性闪烁,了解了定时器的相关知识,又多积累了一点知识。

七,参考资料

http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
https://blog.csdn.net/weixin_66578482/article/details/126322102?ops_request_misc=&request_id=&biz_id=102&utm_term=STM32%E7%AC%94%E8%AE%B0%E4%B9%8B%20Timer&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-126322102.142v59pc_rank_34_1,201v3add_ask&spm=1018.2226.3001.4187

用定时器Timer方式实现LED周期性闪烁相关推荐

  1. 【嵌入式系统开发15】STM32F103C8T6下通过定时器Timer方式实现时间的精准控制,实现串口通信并让LED等周期性地闪烁

    本文目的是主要介绍通过STM32F103C8T6采用定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务.请设置一个5秒的 ...

  2. CC2530————通过定时器T1查询方式控制LED1周期性闪烁(模模式)

    CC2530----通过定时器T1查询方式控制LED1周期性闪烁(模模式) 宏定义与函数声明 初始化 主函数 宏定义与函数声明 /*********************************** ...

  3. 三档按键定时器c语言程序,单片机C语言程序设计:定时器控制4个LED滚动闪烁

    /*  名称:定时器控制 4 个 LED 滚动闪烁 说明:4 只 LED 在定时器控制下滚动闪烁. */ #include #define uchar unsigned char #define ui ...

  4. c语言控制led闪烁次数,单片机C语言程序设计之定时器控制4个LED滚动闪烁

    描述 通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力.通过定时器控制4只LED滚动闪烁系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高 ...

  5. 通过定时器Timer方式实现时间的精准控制

    目录 一.定时器的介绍 1.定时器概念及作用 2.定时器的分类 (1)硬件定时器 (2)软件定时器 (3)系统滴答定时器(SysTick) (4)实时时钟(RTC) 二.新建cubemx项目 1.选择 ...

  6. 用定时器Timer方式实现时间的精准控制

    目录 一.定时器简介 1.STM32定时器的定义 2.STM32定时器的分类 二.创建工程项目 三.编写代码 1.在main.c写入以下函数 2.编译运行 四.烧录 1.电路连接 2.效果 五.总结 ...

  7. 定时器Timer方式实现时间的精准控制

    什么是定时器 就是用来定时的机器,是存在于STM32单片机中的一个外设.STM32总共有8个定时器,分别是2个高级定时器(TIM1.TIM8),4个通用定时器(TIM2.TIM3.TIM4.TIM5) ...

  8. STM32定时器实现5秒周期串口通信,2秒LED灯闪烁

    文章目录 前言 一.定时器Timer 1.定时器定义 2.定时器分类 3.计数器模式 4.时钟产生器和时基单元 5.工作原理 二.实验步骤 1.用STM32CubeMx创建项目 1.1 创建项目 1. ...

  9. STC8H8K64U——定时器T0(LED灯闪烁)

    LED灯闪烁 使用定时器实现延时实现LED灯闪烁,定时 5ms,count 计数50定时 250ms #include <STC8H.H>sbit LED = P2^0; unsigned ...

最新文章

  1. Cerebras发布全球首个人类大脑规模的AI解决方案
  2. 【深度学习】深入浅出数字图像处理基础(模型训练的先修课)
  3. DELPHI listbox去除重复项
  4. Python 技术篇 - 通过paramiko库判断连接linux服务器的账号密码是否正确方法演示
  5. Python面向对象中super用法与MRO机制
  6. struts2 表单回填与action里的属性
  7. ZOJ4024 Peak
  8. C#中IEnumerable.OfType()方法的简单使用
  9. 算法高级(30)-外卖凑单算法-为什么每次点外卖你怎么都凑不够那碗卤肉饭呢?
  10. HTML/CSS开发规范指南
  11. 利用python语言实现分类算法_使用python实现kNN分类算法
  12. Hibernate(十二):HQL查询(一)
  13. sensor_msgs::PointCloud2转换pcl::PCLPointCloud2 pcl::PointXYZ
  14. php 银行支付通道_基于PHP框架的聚合四方支付系统
  15. PLSQL 14.0.6 安装使用教程
  16. 华为手机刷机后显示无服务器,华为手机刷机后,无法开机怎么办?
  17. 华为android9升级包,华为Mate9官方固件ROM刷机包
  18. Python求二次方程根
  19. 云原生这么火,你再不了解就out了
  20. 使用jQuery实现轮播图

热门文章

  1. 排序算法,最全的10大排序算法详解(Sort Algorithm)
  2. 网络安全突发事件应急处置工作预案
  3. PGM:有向图模型:贝叶斯网络
  4. 上门预约程序公众号模块 完美版
  5. FXmarket 集团 9月24日财经早餐:美元小幅上扬,黄金创二周新高,期银飙升5%
  6. 大学生游戏静态HTML网页设计 (HTML+CSS+JS仿英雄联盟网站15页)
  7. matlab深度遍历算法,数据结构算法之动态规划(深度优先遍历)
  8. 掌握typora使用方法
  9. 手机能运行linux系统吗,老外继续折腾iPhone 7,成功运行Linux
  10. 计算机硬件知识题,计算机硬件知识题库