搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

news2024/10/6 14:05:32

搭建了基础的环境,配置了一个简单的工程后,CubeMx的基本操作就会了。然后基于这个操作往下推进,开始对关键模块定时器的攻略,这个部分需要先熟悉一下Stm32的定时器基本原理。

《STM32参考手册》中仅对定时器的介绍就已经占了100多页,这里就不一一展开,挑一些关键的理解一下。

STM32一共有8个都为16位的定时器。其中TIM6、TIM7是基本定时器﹔TIM2、TIM3、TIM4、TIM5是通用定时器﹔TIM1和TIM8是高级定时器。这些定时器使STM32具有定时、信号的频率测量、信号的PWM测量、PWM输出、三相6步电机控制及编码器接口等功能,都是专门为电机控制领域量身定做的。


先说说基本定时器,特点:

  • 时钟源都是TIMxCLK,时钟经过PSC预分频输入至脉冲计数器TIMx_CNT
  • 只能够向上计数,只有向上计数模式
  • 工作的计数器TIMx_CNT直接由时钟触发,当TIMx_CNT的值等于重载寄存器TIMx_ARR中的值N时,产生溢出事件,可触发中断,或DMA请求,CNT的值重置为0,重新开始计数。

再看看通用定时器,特点:

  • 具备基础的定时功能外,还具备输入脉冲频率检测,输出PWM的功能
  • 具备编码器接口
  • 溢出时触发中断或DMA
  • 相对基本定时器具备脉冲捕获/比较寄存器,能够用于捕获外部输入的脉冲数量和脉宽

试试通用定时器的触发中断的功能。

第一步:选择时钟源,配置如下图所示,选择内部时钟。设置分频系数与触发中断计数器,在下图的PSC和Counter Period设置。

第二步:撰写打开定时器中断的代码, 生成代码后,需要一个关键步骤,就是在用户代码编辑区域,打开定时器TIM3的使能。如下图所示,可以看到User code begin2 的字样,这里就是经过CubeMx生成代码之后,用户编程序的地方。

HAL_TIM_Base_Start_IT(&htim3);

 然后在中断程序中输入我们需要执行的操作,中断程序在哪里呢?

 第三步:增加执行函数。在下图函数的这个里面,因为CubeMX在配置了中断之后,就会自动生成专门的中断.c文件,这里TIM3_IRQHandler就是TIM3的中断执行函数,在其中加入我们个人需要执行的代码。

 然后电机debug运行,得到如下结果,累加时间与分频时间相同。

再试试中断生成一路PWM的功能

第一步:配置GPIO

第二步:配置初始电平。如下图配置PA4的输出为输出模式, 并且设置初始输出电平为高电平。

 第三步:配置中断执行函数,执行输出电平的翻转,生成占空比为50%的PWM。

void TIM3_IRQHandler(void)
{
  /* USER CODE BEGIN TIM3_IRQn 0 */
	g_main_count ++;
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */

  /* USER CODE END TIM3_IRQn 1 */
}

输出结果,输出周期为42ms。由于此时我的定时器时钟为18M,分频系数为18,counter period为20000,经过18分频后,定时器时钟为1M,电平反转周期等于 20000/1000000 = 1/50 = 0.02s,约为20ms,单个电平持续时间为20ms,两个电平则为40ms左右,因此基本符合。这里也有个问题就是为什么不是精确的20ms,而是21ms。

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

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

相关文章

C++的最后一道坎 | 百万年薪的程序员

| 导语 C 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一,C发明人Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功,他说:“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标,就是…

用nginx实现一个直播服务—RTMP推流和HTTP-FLV拉流

目录 一、环境准备 二、安装编译nginx所需的安装包和下载nginx原代码包 三、nginx配置 四、启动nginx服务 五、测试推流和拉流服务 六、摄像头数据采集 七、查看统计 这篇文章主要记录用nginx实现直播服务,通过RTMP推流和通过HTTP-FLV或RTMP拉流,…

DJ5-4 链路层交换机

目录 一、链路层交换机 二、交换机:支持多节点同时传输 三、交换机:转发表或称交换表 四、交互机:自学习 1. 单个交换机自学习/转发的例子 2. 多个交换机自学习/转发的例子 五、交换机:数据帧的过滤/转发 六、交换机的交换…

css基础技巧

1. emmet语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

如何在CSDN获取更多的铁粉?

一、铁粉的定义 要想获取铁粉&#xff0c;首先我们得知道什么是铁粉&#xff0c;根据官方给出定义是下面这样的&#xff1a; 【铁粉】具体规则如下&#xff1a; 铁粉 90 天内有阅读&#xff0c;购买专栏或其他互动&#xff0c;并且原力等级 > 0 的粉丝。 也就是说你的原力…

数据结构——二叉树_(上)

学习二叉树之前我们首先要对树有一个认识&#xff0c;树是一种非线性结构&#xff0c;它是由n(n>0)个有限节点组成的一个具有层次关系的节点&#xff1b;而这个层次结构倒过来看就十分的像一棵树&#xff0c;所以起名树结构。 跟现实中的树一样&#xff0c;树结构也有一个根…

Altium Designer18基础

原理图 第5课 元件库介绍及电阻容模型的创建.mp4_哔哩哔哩_bilibili 原理图库&#xff08;schLib&#xff09; 1. 创建原理图库&#xff1a; panels -> SCHLIB&#xff1a;左侧弹出SCH Lib窗口 Add&#xff1a;新建原理图库 点击原理图库名称&#xff1a;进入原理图库设置…

【短视频矩阵系统源码搭建+二开源码定制部署】

短视频矩阵源码的框架有很多种&#xff0c;根据不同的业务需求和技术要求&#xff0c;可选择适合的框架。目前常见的短视频矩阵源码框架有&#xff1a;Flutter、React Native、Vue、Angular等前端框架&#xff1b;Spring Boot、Laravel等后端框架&#xff1b;FFmpeg、Pusher、W…

ChatGPT“保姆级教程”——手把手教你5分钟快速AI智能文字转爆款视频(剪映+百度AIGC平台)

目录 前言ChatGPT 剪映ChatGPT生成视频文档安装专业版剪映使用剪映一键出片保姆集教程 百度AIGC平台注册百度AIGC平台使用百度AIGC平台一键出片保姆集教程 总结其它资料下载 前言 在这个数字时代&#xff0c;视频已经成为了最流行的内容形式之一。而如何自动将文字转化为引人…

JavaScript实现输入学生姓名,按q键程序结束的代码

以下为实现输入输入学生姓名&#xff0c;按q键程序结束的程序代码和运行截图 目录 前言 一、输入学生姓名&#xff0c;按q键程序结束 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#…

Web应用技术(第十三周/第二次练习/7h)

本次练习基于how2java和课本&#xff0c;学习MyBatis高级映和分页 1.MyBatis高级映射&#xff1a;1.1 相关XML标签及其属性&#xff1a;&#xff08;1&#xff09;mapper标签&#xff1a;&#xff08;2&#xff09;DOCTYPE标签&#xff1a;&#xff08;3&#xff09;typeAliase…

【MySQL】MySQL体系架构

文章目录 背景一、MySQL体系架构二、网络连接层三、数据库服务层3.1 连接池3.2 系统管理和控制工具3.3 SQL接口3.4 解析树3.5 查询优化器3.6 缓存 四、存储引擎层五、系统文件层5.1 日志文件5.2 数据文件5.3 配置文件5.4 pid文件5.5 socket文件 背景 很多小伙伴工作很长时间了…

【OJ比赛日历】快周末了,不来一场比赛吗? #05.27-06.02 #14场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-05-27&#xff08;周六&#xff09; #8场比赛2023-05-28…

Holocube-第一集

准备工作&#xff1a; 装备&#xff1a; ESP 8266 D1 MINI1.3寸 TFT 屏幕分光棱镜25.4mm面包板、杜邦线、数据线等配件 软件&#xff1a; Arduino(本人使用1.8.16)---驱动ch341 初始arduino简单程序&#xff0c;对esp8266上传代码&#xff0c;能正常运行。正式开始 坑1&…

Day0:Windows编程环境搭建

前言&#xff1a;学习一个东西&#xff0c;首先要有三问&#xff1a; 1. 这个东西是什么&#xff1f; 2. 为什么要学它&#xff1f; 3. 该怎么学习它&#xff1f; 第一问是要明白你要学习的东西它是什么&#xff0c;你就会对它有一个整体的了解。这也是第二问的半个答案&#x…

有没有想过一种可能,30岁之后,转行去做IT售前?

灵魂拷问 IT行业的变化是非常迅速的&#xff0c;各种新技术、新产品、新观念、新的业务模式层出不穷&#xff0c;不仅是我们&#xff0c;客户也在不断地学习进步&#xff0c;因此我们注定要终身学习。 IT售前这个岗位为许多IT职场人提供了一种新的选择: 你不需要成为某一方面…

微信小程序推送消息

微信小程序推送消息 前言一、推送消息&#xff1a;小程序“订阅消息”功能二、开发步骤1.小程序调用wx.requestSubscribeMessage&#xff0c;进行消息订阅用户授权2.小程序调用wx.login&#xff0c;获取code3.后端访问请求&#xff0c;获取用户openId4.后端访问请求&#xff0c…

树形dp问题套路

⭐️前言⭐️ 本篇文章旨在将二叉树中的树形dp问题模板化&#xff0c;借助信息体传递的方式&#xff0c;通解树形dp问题。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友…

双目测距联合YOLOv8 项目总结

代码贴&#xff1a;双目测距--5 双目相机 联合 YOLOv8_爱钓鱼的歪猴的博客-CSDN博客 1、单目标定&#xff08;张友正标定法&#xff09; 获得左相机、右相机的cameraMatrix&#xff08;内部参数值&#xff09;、disCoeffs(畸变矩阵) 2、双目标定 固定左右相机的内部参数值、…

File类和IO流的相关面试(二)

一.IO流 1.什么是IO? I&#xff1a;Input&#xff0c;数据的读取&#xff0c;数据的输入 数据的输入&#xff0c;可以是从键盘输入&#xff0c;从文件读取&#xff0c;从网络接收... O&#xff1a;Output&#xff0c;写数据&#xff0c;数据的输出 数据的输出&#xff0c;可…