定时器&pwm

2023-11-19

定时器TIM

​ STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。
在这里插入图片描述

基本定时器

在这里插入图片描述

  1. 时钟源
    定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1 预分频器后分频提供,如果 APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M 。

  2. 计数器时钟
    定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC 是一个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。
    具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。

  3. 计数器
    计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

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

  5. 定时时间的计算
    定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT 的驱动下,计一个数的时间则是 CK_CLK 的倒数,等于:1/(TIMxCLK/(PSC+1)),产生一次中断的时间则等于:1/(CK_CLK * ARR)。如果在中断服务程序里面设置一个变量 time,用来记录中断的次数,那么就可以计算出我们需要的定时时间等于: 1/CK_CLK *
    (ARR+1)*time。

实验过程
创建工程

在这里插入图片描述

这里的时钟源选用是内部时钟源,这里的Prescaler配置的是分频系数,系统会自动加一,所以这里选择71;这里这个mode是计数模式,这里是向上计数的意思;counter period是计数周期,这里的意思是每计数到50000触发一次中断

然后更改一下这个
在这里插入图片描述

这里主要的作用就是利用高速外部时钟倍频出一个72M的时钟源

还要开启TIM的中断开关
在这里插入图片描述

中断优先级配置,根据工程需求自行配置

其余设置根据自身需求更改。

配置函数

在主函数添加

 HAL_TIM_Base_Start_IT(&htim2);

来开启定时器TIM2

HAL库下每个中断源都有一个弱定义的中断回调函数,可以由用户进行自我改写

这里的中断回调函数为

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

不需要更改配置文件,在main中重写即可

这里的中断回调函数我设置的是每两秒翻转一次电平和每五秒发送一次数据给上位机


	if(htim->Instance == TIM2)
	{
		if(++time_cnt >= 40)
		{
			time_cnt =0;
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
		}
		if(++qw>=100)
		{
			qw=0;
			HAL_UART_Transmit(&huart1,(uint8_t*)&ad,14,0xffff);
		}
	}

这里的两个计数变量需写为全局生效的变量,生存周期为整个函数

程序大致就是这样,但在实验中我遇到了一个问题。我使用的开发环境是stm32 cube ide,在编译完成以后我的hex经常没有更新。甚至于更新了但是实际内容没有发生变化。这里建议找不出问题所在的uu,把hex文件删除以后再重新生成一次,这样就没问题了。

在这里插入图片描述

PWM

pwm输出就是利用定时器,来控制输出方波信号的占空比,以此来形成pwm波

在这里插入图片描述

PWM输出模式

PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存
器 ARR的值决定,占空比由比较寄存器 CCR的值决定

在这里插入图片描述

1.PWM边沿对齐模式

在边沿对齐模式下,计数器 CNT 只工作在一种模式,递增或者递减模式。

2.PWM中心对齐模式

在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器CNT从 0 开始计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。

程序配置

在这里插入图片描述

注意的是配置通道的话,核心板上对应的GPIO口要发生变化,其他配置同上

编写以及编译
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);

这个就是开启定时器以及对应的通道。

这里产生pwm波主要用的是HAL库下的

__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,ss)

最后一个参数的意思是占空比,可根据自身需求更改占空比的变化规律。

这里pwm的输出口为PA1

这里很奇怪的是明明tim2,3,4都是通用寄存器,但是使用tim3,4不能完成呼吸灯的功能.这个问题我暂时不知道如何解决,就先使用tim2吧。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定时器&pwm 的相关文章

  • allegro画PCB如何更新元件的PCB封装

    allegro画PCB如何更新元件的PCB封装 一 更新单个器件的PCB封装 首先菜单栏选择Place gt Update Symbols 如下图 注意此案例是更新了C0805封装 中更新封装 就将上图第二个红色方框中的勾选即可 二 更新某
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • stm32毕设分享 stm32单片机酒精浓度酒驾检测系统 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 MQ 3酒精乙醇传感器模块 SIM800C模块 5 软件说明 系统框图
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 太阳诱电树立超高端产品概念,与电子产业同步发展

    无论是传统的手机 家电 安防 汽车 医疗 交通 建筑的智能化转型 还是从物联网 工业4 0 智能硬件 互联网 一场基于大数据 互联网 应用软件等技术的硬件复兴热潮正在席卷全球 没有新东西出来 每家都一样 这一长期以来的争议一直困扰着CEAT
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 【学习分享】全志平台TWI子系统源码分析(1)从设备树到寄存器

    全志平台TWI子系统源码分析 1 从设备树到寄存器 前言 一 名词解释 二 从设备树入手看源码 1 TWI设备树 2 TWI源码位置 3 TWI总线相关寄存器 总结 前言 这次开坑主要是想把全志平台TWI子系统在源
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公

随机推荐

  • redux-saga原理浅析

    前言 笔者最近在做一些后台项目 使用的是Ant Design Pro 其使用了redux saga处理异步数据流 本文将对redux saga的原理做一个简单的解读 并将实现一个简易版的redux saga Generator函数的自动流程
  • filter() map(),some() every(),find(),findIndex(),reduce()区别和用法

    some every map filter find foreach 一 相同点 1 都是返回布尔值 some every map 2 遍历全部元素 every map 都是遍历完全部元素 3 遇到匹配结果即停止 find some 遇到匹
  • Mac安装SQLmap【亲测有用】

    sqlmap是由Python编写的渗透测试工具 主要用来检测sql注入漏洞 是一款功能强大的sql漏洞检测利用工具 Mac安装SQLmap有很多种方式 此篇文章使用brew install 简单直接 安装过brew的直接忽略前两步 在mac
  • 剑指offer——day1

    题目一 题目主要考察的是对栈和队列的理解和基本实现 typedef int STDataType define DEFSTACKSIZE 100 typedef struct Stack STDataType array int size
  • 华为od机试题3 真题

    华为od机试题 真题 67 最小字符串 66 最长元音字符串 65 字母所在字符串中的位置索引 64 计算图形面积 63 剩余可用字符集 62 字符串解压缩 61 相等的连续子串 59 员工出勤奖 以下题目附带Java解法 是我个人写的 不
  • Vim高级教程:vim-plug安装C/C++插件

    本教程只支持Vim8 本教程为C C 安装插件 其他语言不支持 配套视频教程 废话不多说 开始安装插件 插件不是一个一个安装 而是通过插件管理器vim plug来安装 vim plug会将所有的插件全部安装完成 就不需要手动一个一个安装 第
  • 基于Jmeter实现Rocketmq消息发送

    在互联网企业技术架构中 MQ占据了越来越重要的地位 系统解耦 异步通信 削峰填谷 数据顺序保证等场景中 到处都能看到MQ的身影 而测试工程师在工作中 也经常需要和mq打交道 比如构造测试数据 触发某些业务场景 以及针对mq的性能测试等 目前
  • QueryDet:级联稀疏query加速高分辨率下的小目标检测

    论文 https arxiv org abs 2103 09136 代码 已开源 https github com ChenhongyiYang QueryDet PyTorch 计算机视觉研究院专栏 作者 Edison G 虽然深度学习的
  • 人工智能的发展对教育影响

    人工智能的横空出世给现代社会带来了翻天覆地巨大改变 格物斯坦表示 特别是在青少年阶段 他们 她们 对未知世界从满了好奇 想要去探险 自古英雄出少年 我们的人工智能领域同样也是年轻人未来 大展拳脚 的地方 儿童作为人工智能时代的 原住民 他们
  • RuntimeError: FlashAttention is only supported on CUDA 11 and above

    RuntimeError FlashAttention is only supported on CUDA 11 and above 问题描述 解决方案 问题描述 RuntimeError FlashAttention is only su
  • torch.cuda.is_available()

    可能问题1 cuda 与 torch 版本不对应 可能问题2 安装的torch是cpu版本 或者无cuda版本 可能问题3 torch的关联包未安装 解决方案 使用conda重新安装 conda install pytorch torchv
  • Fisco Bcos 答疑

    问 测试8的结果 集群中有4个节点 其中宕机3个 发起一笔交易 交易失败 然后启动宕机的3个节点 还是交易失败 但如果有一笔新的交易执行 会激活上一笔交易 交易失败的那一笔 最后失败的那一笔会交易成功 这种情况下的交易原理是怎样的 答 不存
  • 图的遍历(深度优先遍历,DFS)

    1 概念 图的遍历操作是从图中某一顶点出发 对图中所有顶点访问一次且仅访问一次 1 在图中 遍历的起始顶点是编号最小的顶点 2 某个起点到达不了所有顶点 则多次调用访问所有顶点 3 为避免遍历因回路而陷入死循环 附设置访问标志数组visit
  • SharedPreferences自定义XML文件保存位置

    声明 本篇文章的相关技术来自于 反射机制修改SharedPreferences存储路径 作者 Harlan9001 基于 实用的SharedPreferences工具类 前言 因为之前的文件是保存在项目目录下的 所以只要软件卸载了 本地的X
  • JAVA 中String 转JSONObject并取值

    今日在做Springboot时把请求放在后端进行 请求返回的结果的字符串需转化为JSON格式才能在后端进行交互 转换时遇到没有的问题 找寻后发现应该导入相关依赖包才能使用JSONObject import net sf json JSONO
  • Android_推送技术研究

    前言 最近研究Android推送的实现 研究了两天一夜 有了一点收获 写下来既为了分享 也为了吐槽 需要说明的是有些东西偏底层硬件和通信行业 我对这些一窍不通 只能说说自己的理解 为什么要研究Android推送技术 主要还是毕业设计要做一个
  • docker的数据卷、docker数据持久化

    目录 前言 docker数据持久化的2种方式 数据卷 bind mount 即 v参数 匿名数据卷 docker manager volume v参数和匿名卷的区别 docker volume 命令的使用 数据卷容器 孤儿volume mo
  • Linux操作系统Fedora命令界面与图形界面间切换

    Linux操作系统Fedora命令界面与图形界面间切换 听语音 浏览 5986 更新 2014 12 11 15 43 标签 linux 1 2 3 4 5 6 7 分步阅读
  • AI在玩一种很新的艺术,700万网友在线围观,ControlNet又立功了

    图片来源 由无界AI生成 文章来源 公众号量子位 QbitAI AI又在玩一种很新的艺术 一组 在离谱与合理的边缘反复试探 的图席卷各大平台 最火的一条 已有近700万查看16 8万点赞 到处有人在求教程 除了棋盘样式 还有一种螺旋样式的也
  • 定时器&pwm

    定时器TIM STM32F1 系列中 除了互联型的产品 共有 8 个定时器 分为基本定时器 通用定时器和高级定时器 基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器 只能定时 没有外部 IO 通用定时器 TIM2