【STM32CubeMX开发】-2.2-TIM_输出一个PWM信号

news2025/2/28 12:42:20

目录

1 Tim定时器的时钟源

2 Tim定时器的配置

2.1 PWM配置

2.2 中断配置

3 生成代码

4 测试结果

结尾


1 Tim定时器的时钟源

TIM3的时钟来源自APB1 Timer clocks,时钟树上所有总线频率均设置为了STM32F0能达到的最高频率,此时APB1 Timer clocks = 48MHz。

2 Tim定时器的配置

依次选择Pinout&Configuration -- > Timers -- > TIM3,参数配置如下:

Clock Source:选择Internal Clock内部时钟源。TIMInternal Clock来自APB1 Timer clock(MHz)

Prescaler(PSC – 16 bits value):时钟源分频系数(TIMx_PSCPSC),一个计数的时间长度为480/48MHz = 10微妙;

Counter Mode:(TIMx_CR1中的DIR)Up向上计数,Down向下计数,Center Aligned mode1/2/3;

Counter Period(AutoReload Register – 16 bits value):(TIMx_ARR中的ARR一个定时周期的时间,10000 * 10微妙 = 100毫秒;

Internal Clock Division:(TIMx_CR1中的CKD位)时钟分频因子。定义在定时器时钟频率与数字滤波器使用的采样频率之间的分频比例;

RepetitionCounter:配置重复计数器的值,这里设置为0,表示不使用重复计数功能;

auto-reload preload:(TIMx_CR1中的ARPE位)自动重装载预装载允许位。定义在TIMx_ARR和实际的自动重装载寄存器之间是否设置缓冲器;

Trigger Output (TRGO) Parameters :一般是用来设置用作其他外设的触发源的。比如将Trigger Event Selection选择为Update Event,然后在其他外设比如ADC中配置外部触发源时选择该定时器的触发事件(如果可以的话),这样在定时器产生Update Event时就可以启动外设,实现用定时器来控制外设启动的功能;

2.1 PWM配置

Channel 1中,选择PWM Generation CH1,会自动将MCU的PA6配置为TIM3_CH1,通过该PIN输出PWM信号。

PWM的一个周期的时间等于Counter Period的时间100ms,

PWM的Mode选择:

  • PWM mode 1:在向上计数中,当计数值小于CCR值时输出高电平,计数值大于CCR值时输出低电平;在向下计数中,当计数值小于CCR值时输出低电平,计数值大于CCR值时输出高电平;
  • PWM mode 2:在向上计数中,当计数值小于CCR值时输出低电平,计数值大于CCR值时输出高电平;在向下计数中,当计数值小于CCR值时输出高电平,计数值大于CCR值时输出低电平。

Pulse(16 bits value)表示CH Polarity电平的持续时间,这里高电平持续30ms,低电平持续70ms;

Fast Mode:如果频率太高可以使能快速模式。可以大大提高PWM反应时间;同时将IO口输出速度调高。

2.2 中断配置

NVIC Settings中,选择合适的中断优先级并勾选TIM3 global interrupt的中断使能。

3 生成代码

单击GENERATE CODE,生成代码:通过HAL_TIM_Base_Start(&htim3) 启动TIM3TIM3_IRQHandler中断函数间隔100ms被周期调用一次。通过HAL_TIM_PWM_Start启动PWM信号的输出。过程中可通过调用__HAL_TIM_SET_COMPARE来改变占空比。

Main.c

/**
  * @brief  The application entry point.
  * @retval int
  */
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();
  MX_TIM1_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
  demo_init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

stm32f0xx_it.c

/**
  * @brief This function handles TIM3 global interrupt.
  */
void TIM3_IRQHandler(void)
{
  /* USER CODE BEGIN TIM3_IRQn 0 */

  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */

  /* USER CODE END TIM3_IRQn 1 */
}

demo.c

#include "main.h"
#include "demo.h"
#include "tim.h"

#define LED_SWITCH_TIMER       500    // Unit:ms
#define FUNCTION_CALL_CYCLE    1      // Unit:ms

void demo_init(void)
{
    /********************************Start timer TIM1**********************************/
	HAL_TIM_Base_Start_IT(&htim1);       
	
	/********************************Start timer TIM3**********************************/
	HAL_TIM_Base_Start_IT(&htim3);        

	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);/* PWM generation Error */
}

void demo_main(void)
{
    static uint16_t led_timer = 0;
    static uint8_t led_flg = 0;		
	
	  if(led_timer <= (LED_SWITCH_TIMER / FUNCTION_CALL_CYCLE))
		{
				led_timer += FUNCTION_CALL_CYCLE; 
		}
	  else
	  {
	      led_timer = 0;
			
				if(led_flg == 0)
				{
					   led_flg = 1;
					
						 HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_RESET);   // ON LED
				}
				else
				{
					   led_flg = 0;
					
					   HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_SET);     // OFF LED
				}	
	  }

}

4 测试结果

PWM信号占空比30%,一个周期100ms。

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

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

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

相关文章

【CTF Web】Pikachu ../../ Writeup(路径遍历)

目录遍历漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过程中&a…

Diffusion model原理:李宏毅篇(1)

本文是对李宏毅老师相关视频的记录。视频连接:Diffusion Model数学原理(一) 1. 基本概念 slide注释有一个加噪的扩散过程和一个去噪生成图像的过程VAE与Diffusion model有类似的地方。Diffusion model加噪的过程可以看成是VAE的encoder,去噪的过程看成是VAE的decoder2. DD…

【Linux】信号(初版)

信号概念 信号是进程之间发送异步信息的一种方式 在Linux命令行中&#xff0c;我们可以通过ctrl c来终止一个前台运行的进程&#xff0c;其实这就是一个发送信号的行为。我们按下ctrl c是在shell进程中&#xff0c;而被终止的进程&#xff0c;是在前台运行的另外一个进程。…

[2024领航杯] Pwn方向题解 babyheap

[2024领航杯] Pwn方向题解 babyheap 前言&#xff1a; 当然这个比赛我没有参加&#xff0c;是江苏省的一个比赛&#xff0c;附件是XiDP师傅在比赛结束之后发给我的&#xff0c;最近事情有点多&#xff0c;当时搁置了一天&#xff0c;昨天下午想起来这个事情&#xff0c;才开始…

C++容器适配器1-基本使用(stack、queue)

###适配器意思是可以将一种不能用于某种场景的东西经过特殊转换&#xff0c;包装成一个新东西&#xff0c;这个新定西可以用于这个场景&#xff0c;并且还具有之前旧东西的功能作用&#xff1b; stack、queue就是C里面的容器适配器&#xff0c;这两个适配器堆vector和list两个…

前端进阶之路:推荐几本不可错过的前端开发书籍

前端开发是一个不断更新换代的领域&#xff0c;作为一名前端工程师&#xff0c;持续学习和提升自己是至关重要的。阅读专业书籍是系统学习前端知识的一种有效方式。以下是一些前端开发者不可错过的书籍推荐&#xff0c;帮助你巩固基础&#xff0c;拓宽视野&#xff0c;成为更优…

【进阶OpenCV】 (13)--视频物体跟踪

文章目录 物体跟踪一、跟踪器二、代码实现1. 创建CSRT跟踪器实例2. 打开视频文件3. 主循环3.1 读取每一帧3.2 设置跟踪目标3.3 更新跟踪器&#xff0c;获取对象位置3.4 显示视频每一帧 4. 释放资源和关闭窗口5. 完整代码展示 总结 物体跟踪 本篇我们来介绍&#xff0c;如何对移…

Nvidia Jetson Orin平台部署CenterPoint模型

最近尝试将CenterPoint模型部署到Orin平台,网络上教程很多,也很杂乱,于是便整理一版自用。 主要根据NVIDIA Lidar AI Solution进行复现。并在此基础上进行补充 Orin平台: python:3.8 CUDA:11.4 torch:1.14.0 torchvision:0.15.1 TensorRT: 8.5.2.1 在Compile &&a…

第十九篇——复盘:数学给了我什么启示?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学带给这个世界什么&#xff1f;数学在我们的人生路上意味着什么&#…

Arthas 介绍,阿里开源线上JVM性能监控工具

1.官网 https://arthas.aliyun.com/ arthas (aliyun.com) Arthas 是一款由阿里巴巴开发并开源的 Java 应用诊断工具&#xff0c;主要用于帮助开发人员实时监控、诊断和调优 Java 应用程序。这款工具对于处理复杂的生产环境问题特别有效&#xff0c;尤其在定位那些难以复现的…

面网易后台开发居然遇到了一个困难难度算法题

在提供面经的同学中&#xff0c;竟然有同学在面试网易后台研发的时候遇到了一道困难难度的算法题。 一般来说&#xff0c;大多数面试的算法题都是以中等难度为主&#xff0c;遇到困难难度的算法题也许是公司现在不缺人、也许是在选拔人才、当然也很可能是面试官其实并不想要你…

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【WRF工具】服务器上安装convert_geotiff

【WRF工具】服务器上安装convert_geotiff convert_geotiff简介方法1&#xff1a;下载安装包后下载convert_geotiff依赖库安装库1&#xff1a;libtiff库2&#xff1a;sqlite库3&#xff1a;curl库4&#xff1a;projcmake更新&#xff08;可选&#xff09;库5&#xff1a;geotiff…

mysql--表的约束

目录 理解表的约束和操作 如何理解&#xff1f; 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key &#xff08;1&#xff09;创建表时指定可以 &#xff08;2&#xff09;创建表后指定key &#xff08;3&#xff09;删除主…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

Avalonia开发实践(四)——关于Setter优先级的问题

首先看一段样例代码&#xff1a; <StackPanel Orientation"Horizontal" Spacing"50" HorizontalAlignment"Center"><StackPanel.Styles><Style Selector"Button.default"><Setter Property"Background&quo…

健身俱乐部预约报名系统

这个是我新开发搭建的健身俱乐部行业的预约报名系统。 首页 焦点图大图展示 右侧联系栏目 关于我们 底部版权信息 在线咨询 一键拨号 添加微信 转发分享 预约来校 专业资质 室内环境相册 教练名片列表 教练名片详情 关于我 联系我 分享给好友 课程介绍 保存到通讯录 行业新闻 …

Vue3概述

1. Vue3概述 1.1 Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece。 1.2 vite简介 vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;Vite中文网。 1.3 Vue2和Vue3区别 Vue2的API设计是Options&#xff08;配置&…

模拟设计工程师必知必会:一文讲透PLL学习重点

在模拟设计中&#xff0c;相位锁定环&#xff08;PLL&#xff09;是一种极其重要的技术。它在频率合成、时钟恢复、数据同步等多个方面发挥着关键作用。作为一名模拟设计工程师&#xff0c;对PLL的深入理解和熟练应用是必不可少的。本文将通过移知公开课《模拟设计工程师必知必…

QD1-P32 CSS 边框属性(3)padding(元素的内边距)

本节学习&#xff1a;CSS padding属性&#xff08;元素的内边距&#xff09; 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p32 ‍ padding 属性的用途 ​​ ‍ 在CSS中&#xff0c;padding​ 属性用于设置元素内部的空间&#xff0c;即在元素内容和其边界&…