STM32开发(10)----CubeMX配置基本定时器

news2024/9/22 6:23:15

CubeMX配置基本定时器

  • 前言
  • 一、定时器的介绍
  • 二、实验过程
    • 1.实验材料
    • 2.STM32CubeMX配置基本定时器
    • 2.代码实现
    • 3.编译烧录
    • 4.硬件连接
    • 5.实验结果
  • 总结


前言

本章介绍使用STM32CubeMX对基本定时器进行配置的方法,STM32F103高性能系列设备包括基本定时器、高级控制定时器、通用定时器、看门狗定时器和 SysTick 定时器,但是STM32F103C6t6上资源比较有限(高级定时器TIM1,通用定时器TIM2和TIM3),没有真正的基本定时器,其实通用定时器和高级定时的功能是包含基本定时器的,因此如果没有使用到通用定时和高级定时的附加功能,也就是基本定时器了。本章介绍基本定时器,其他的定时器由后续章节一一介绍,最后通过示波器和打印结果来展现实现结果,如果有LED灯也可以,通过定时器来控制LED灯闪烁来观察现象。

一、定时器的介绍

定时器就像单片机的闹钟一样,定时器的核心就是计算器, 要实现计数功能,首先要给它一个时钟源,定时器根据时钟的输出信号,每隔“一秒"(一个单位时间),计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间"时,计数单元就会向中断系统发出中断申请,产生"响铃提醒",使程序跳转到中断服务函数中执行。
下面是三种定时的比较:
在这里插入图片描述
我们这里给出基本定时器的框图,基本定时器比较简单,也是通用定时器和高级定时器的基础,分析基本定时器,可以很好的分解通用定时器和高级定时器。
在这里插入图片描述
从上图我们可以看到基本定时器主要由下面四个部分组成:
**时钟源:**定时器时钟 TIMxCLK,即内部时钟 CK_INT所以定时器时钟,通过下图可以看到不同定时器所在的总线,从而确定他们的时钟源,STM32F103C6T6的高级定时器TIM1定时挂在APB2上,通用定时器TIM2。
在这里插入图片描述
**预分频器(TIMx_PSC):**定时器时钟经过 PSC 预分频器之后,即计数器时钟 CK_CNT,用来驱动计数器计数。 PSC 是一
个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。具体计算方式为: CK_CNT=TIMxCLK/(PSC+1)。

下图为预分频系数从1变到2的计数器时序图:图中CK_PSC是脉冲信号,预分频系数为2,所以最下面的预分频计数器计数0,1,中间的计数器寄存器记一次数。
在这里插入图片描述
**计数器(TIMx_CNT):**计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

**自动重装载寄存器(TIMx_ARR):**自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数
值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。

下图为分频系数为1,自动重装载寄存器(TIMx_ARR)为36的计数器时序图。当计数器满36则进行重装,同时触发更新事件,更新中断标志等动作。
在这里插入图片描述
定时器有如下三种计数模式
**递增计数模式:**计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。
**递减计数模式:**计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。
**中心对齐模式:**计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。

有了以上的基础知识,下面我们通过实验来验证一下

二、实验过程

1.实验材料

  • STM32F103C6T6最小系统开发板

在这里插入图片描述

  • ST-LINK V2

在这里插入图片描述

  • 杜邦线
  • 示波器

2.STM32CubeMX配置基本定时器

选择芯片stm32f103c6t6,新建工程

在这里插入图片描述

设置时钟源,最小系统外部晶振8Mhz,作为外部高速HSE时钟源。由于没有外接外部低速晶振,这里低速时钟源选择旁路时钟源。

在这里插入图片描述

配置时钟树,这里使用官方推荐的配置

在这里插入图片描述

配置引脚功能,先配置一个GPIO,过会使用定时器控制其输出高低电平,方便用示波器测试,我们使用通用定时器TIM2,已知TIM2挂在APB1上。
在这里插入图片描述
内部时钟设置为不分频(CKD),则CK_PSC的时钟频率等于APB1的时钟频率72MHz,即72000 000Hz。若要定时时间为1s,则即可设置7200分频(预分频器寄存器 (TIMx_PSC)的值为7200-1),定时器的时钟CK_CNT的频率为10000Hz.则自动重载寄存器 (TIMx_ARR)设置为10000-1即定时为1s.TRGO为触发输出,可以触发内部ADC/DAC,这里我们没有用到这个功能,参数为默认设置。
T = (psc+1)(arr+1)/Tclk=(7200)(1000)/72us=1000ms = 1s

在这里插入图片描述
在NVIC Settings框勾选开启定时器中断。优先级为默认。或者在NVIC配置中使能TIM2中断。
在这里插入图片描述
Code Generator中设置只拷贝使用到的库,分离.c和.h文件

在这里插入图片描述

设置好项目名称和路径,点击GENERATE CODE即可,生成后使用keil5 IDE打开。

在这里插入图片描述

2.代码实现

实现一个LED等间隔1s闪烁一次的功能,代码如下

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
			
    /* USER CODE BEGIN 3 */
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); //PA0
		printf("TIM2 \r\n");
		HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

3.编译烧录

代码编译成功

在这里插入图片描述

在下载前检查keil是否检测到ST-LINK,选择魔法棒进行设置

在这里插入图片描述

如图所示,已经检测到ST-LINK 下载器

在这里插入图片描述

点击load,自动下载固件

在这里插入图片描述

4.硬件连接

烧录器ST-LINK V2和最小系统板的连接如图所示: 四线连接 SWDIO,GND,SWCLK,和3.3V电源

在这里插入图片描述

5.实验结果

使用串口打印和示波器两种方式测试,打印可以看到周期输出,示波器可以精准的读到输出频率和时间间隔。
串口debug

示波器测量

总结

本章介绍了STM32F103系列设备中基本定时器的用法,接下来接着介绍定时器的进阶用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE-HTTP协议(一)

目录什么是HTTP协议?协议格式如何看到HTTP的报文格式?HTTP请求HTTP响应URLURL encode/decode什么是HTTP协议? 计算机网络,核心概念,网络协议 网络协议种类非常多,其中一些耳熟能详的,IP,TCP,UD…

shell命令行并行神器 - parallel

shell命令行并行神奇 - parallel 概述 GNU parallel 是一个 shell 工具,用于使用一台或多台计算机并行执行作业。作业可以是单个命令或必须为输入中的每一行运行的小脚本。典型的输入是文件列表、主机列表、用户列表、URL 列表或表列表。作业也可以是从管道读取的…

98年的确实卷,公司新来的卷王,我们这帮老油条真干不过.....

都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …

电脑麦克风没声音怎么办?这3招就可以解决!

最近有用户在使用电脑麦克风进行视频录制时,发现麦克风没有声音。这是什么原因?电脑麦克风没有声音怎么办?关于解决方案,我专门整理了三种方法来帮你们,一起来看看吧! 操作环境: 演示机型&#…

在TitanIDE中使用ChatGPT辅助科研开发

作者:行云创新CEO 马洪喜 命题:太空望远镜拍摄的照片处理 假设:我是图形科学家,但不是特别懂Python 先上传一张银河系照片,目的是把彩色转成灰度: 然后我不会啊, 问问chatGPT 彩色图片转灰度…

电话号码的字母组合-力扣17-java

一、题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits "23"输出…

Android 一体机研发之修改系统设置————自动锁屏

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解自动锁屏。 自动锁屏功能,这个可以根据…

简述springIOC容器的bean加载流程

参考笔记:https://blog.51cto.com/u_14006572/3118363 https://zhuanlan.zhihu.com/p/386335813 https://blog.csdn.net/mrathena/article/details/115654379 目录结构 spring ioc容器的加载,大体上经过以下几个过程: 资源文件定位、解析、注册、实例化…

UWA Pipeline 2.4.1 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线,提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 在本次UWA Pipeline 2.4.1版本更新中,主要…

PIL.Image与cv2之间的常用API汇总

简单介绍 主要是因为经常用到这两个,经常弄混淆,所以,总结一番。持续更新。 from PIL import Image import cv2 as cv import numpy as np import matplotlib.pyplot as plt1、读取文件与写入文件 1.1 Image.open() img_pil Image.open…

电商数据监测——中国白酒行业数据浅析

大国盛世酿,万家潭酒香。中国白酒是中国特色文化之一。 2022年,国内白酒总产量为671.2万千升,处于持续下滑的态势。 白酒产量不佳,但线上平台的销售情况却成绩优异。2022年,京东平台白酒的年度总销量超3500万件,同比去…

操作系统开发:编写开机引导

操作系统是用来管理与协调硬件工作的,开发一款操作系统有利于理解底层的运转逻辑,本篇内容主要用来理解操作系统是如何启动的,又是如何加载磁盘中的内核的,该系列文章参考各类底层书籍,通过自己的理解并加以叙述&#…

彻底理解 cookie、session、token (一)

发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记…

阿里巴巴在开源压测工具 JMeter 上的实践和优化

Apache JMeter [1] 是 Apach 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史。JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一。 性能测试通常集中在新系统上线或大型活动前&…

l1和l2接口如何进行编写?一定要掌握这几个元素

在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…

浏览器广告拦截插件| 浏览器搜索广告横飞怎么办

文章目录浏览器广告拦截插件| 浏览器搜索广告横飞怎么办一、效果二、安装浏览器广告拦截插件| 浏览器搜索广告横飞怎么办 浏览器广告横飞怎么办?今天教你一招解决!很多小伙伴说自己用的浏览器总是有广告。 今天咱们就针对这个问题分享一个浏览器插件&a…

【面试题】JavaScript中递归的理解

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库递归 RecursionTo iterate is human, to recurse, divine. 理解迭代,神理解递归。本文会以 JavaScript为主、有部分 Rust 举例说明。…

【python--networkx】函数说明+代码讲解

【Python–NetworkX】函数说明代码讲解 文章目录【Python--NetworkX】函数说明代码讲解1. 介绍1.1 前言1.2 图的类型(Graph Types)1.3 常用方法2. 代码示例1. 介绍 1.1 前言 NetworkX是复杂网络研究领域中的常用Python包。 1.2 图的类型(G…

Linux高级命令之文件权限命令

文件权限命令学习目标能够使用chmod命令完成文件权限的修改1. chmod命令的介绍命令说明chmod修改文件权限chmod修改文件权限有两种方式:字母法数字法2. chmod 字母法的使用角色说明:角色说明uuser, 表示该文件的所有者ggroup, 表示用户组oother, 表示其他用户aall, 表示所有用户…

[carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题

1.获取车辆的Odometry原始信息 在carla中,通过订阅/carla/ego_vecle/odometry 可以查看车辆的全局位置信息,例如: > header: seq: 118872stamp: secs: 5946nsecs: 5720187frame_id: "map" child_frame_id: "ego_vehicle" pos…