STM32F105RBT6 使用定时器TIM3输出PWM波

news2025/1/24 18:00:23

1. TIM3的GPIO口,查阅STM32F105RBT6 数据手册,TIM3的4通道用的是PB1

在这里插入图片描述

2. 初始化GPIO口和定时器TIM3

2.1 相关函数

RCC_APB1PeriphClockCmd、GPIO_Init、TIM_TimeBaseInit、TIM_OC4Init、TIM_OC4PreloadConfig、NVIC_Init、TIM_ITConfig、TIM_Cmd、

void TIM3_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_OCInitTypeDef TIM_OCInitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;

    // Enable clock for TIM3 and GPIOB
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB2Periph_GPIOB, ENABLE);

    // Initialize GPIOB to output PWM signal
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

    // Initialize TIM3 for PWM generation with interrupt on update
    TIM_InitStruct.TIM_Period = 999; // Set PWM frequency to 70kHz (72 MHz / 1000 / 7)
    TIM_InitStruct.TIM_Prescaler = 0;
    TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_InitStruct);

    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStruct.TIM_Pulse = 500; // Duty cycle = 50%
    TIM_OC4Init(TIM3, &TIM_OCInitStruct);
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

    NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 4;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);

    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM3, ENABLE);
}

3. 中断入口 TIM3_IRQHandler

3.1 在启动文件里面找到TIM3 对应的中断入口函数,也就是中断服务函数 TIM3_IRQHandler

在这里插入图片描述

4. 编写中断服务函数

void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) // overflow interrupt
    {
        printf("龙傲天说,我三岁拳打南山不老院,四岁脚踢北海幼儿园\r\n");
    }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update); // clear interrupt flag

    // Handle interrupt by updating PWM duty cycle value
//    static uint16_t duty_cycle = 500; // Initial value of 50%
//    duty_cycle = duty_cycle < 950 ? duty_cycle + 50 : 0; // Increase duty cycle by 5% every period
//    TIM_SetCompare4(TIM3, duty_cycle);
}

4.1 中断服务函数需要快速地执行完毕。中断服务函数应该避免执行太多的计算复杂度较高的操作,否则可能会导致中断响应时间过长,甚至因为延迟而导致系统不稳定。

4.2 如果你需要在中断服务函数中访问全局变量,需要将这些变量定义为volatile类型。这是因为中断服务函数可能会在任何时间被外部中断所打断,如果没有使用volatile类型,就有可能导致变量值不准确。

4.3 在中断服务函数的结尾处,需要调用NVIC_ClearPendingIRQ()函数来清除中断挂起位。

4.4 中断函数最好别用printf 函数等耗时、有可能阻塞的一些函数,printf函数本身就比较耗时,在中断服务函数中调用的话,可能会导致中断响应时间过长,使系统不稳定。如果在中断服务函数中使用了printf函数,可能会导致printf函数与被打断的低优先级代码发生冲突,造成数据异常。我这里用 printf 只是为了装13,我龙傲天谁都不服

4.4 中断服务函数需要快速、简洁、有效地处理中断,并且需要小心地处理共享资源和全局变量。

5. 主函数调用一下初始化函数就可以了

int main(void)
{
    TIM3_Init();
    while (1)
    {
    	printf("剑圣来了,快跑");
	}
}

6. 串口数据

在这里插入图片描述

7. 拿示波器或者逻分仪去量PB1 引脚,看波形,有毛刺,我没滤波的,可以处理掉

在这里插入图片描述

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

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

相关文章

中国范围逐月夜间灯光数据(2012-2021年)

人类以其文明和智慧创造了城市&#xff0c;城市最美的一面就是夜晚的灯光。对于经济学家来说&#xff0c;城市灯光的背后隐藏着巨大的社会经济秘密。一个城市夜晚的灯光不仅可以反映这个城市人口的数量、预测房价的趋势还能反映这个城市的经济发达程度。 根据灯光的亮度我们还可…

(七)CSharp-CSharp图解教程版-事件

一、发布者和订阅者 发布者/订阅者模式&#xff08;publish/subscriber pattern&#xff09;&#xff1a; 很多程序都有一个共同的需求&#xff0c;即当一个特定的程序事件发生时&#xff0c;程序的其他部分可以得到该事件已经发生的通知。 发布者&#xff1a; 发布者类定义…

SpringSecurity 总结

SpringSecurity 总结 第一章 权限管理 权限管理SpringSecurity 简介整体架构 权限管理&#xff1a; 实现: "对用户访问系统的控制"(身份认证) &#xff0c; 按照 "安全规则"或者 "安全策略" (对已经认证的用户进行授权) 控制&#xff0c;用…

C++教程(05)——数据类型

C 数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当您创建一个变量时&#xff0c;就会在内存中保留一些空间。 您可能需要存储各种数据类型&#xff08;比如字符型、宽字符型、整型…

2.DIY可视化-拖拽设计1天搞定主流小程序-PHP安装

DIY可视化-拖拽设计1天搞定主流小程序-PHP安装 前言 话不多说,直接实操。一、拉取代码并导入 https://gitee.com/diygw/diygw-ui-php 找到本机一个文件夹&#xff1a; git clone 导入vscode 二、打开小皮&#xff0c;新建网站 启动web服务&#xff1a; 创建网站&#xff…

视觉SLAM十四讲——ch5实践(相机与图像)

视觉SLAM十四讲----ch3的实践操作及避坑 一、实践操作前的准备工作二、各个实践操作1.计算机中的图像2.3D视觉 三、遇到的问题 一、实践操作前的准备工作 安装OpenCV Ubuntu18参考&#xff1a;Ubuntu 18.04下opencv4安装及C配置 Ubuntu20参考&#xff1a;Ubuntu 20.04搭建OpenC…

shell脚本学习记录1(运算符)

Shell 传递参数 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推…… 以下实例我们向脚本传递三个…

普中自动下载软件1.86下载程序失败案例

今天在用开发板做一个功能&#xff0c;下载的时候报错了&#xff0c;说芯片超时 确定驱动安装好了的 波特率也试了一圈 线也换过了 最后发现是芯片类型选错了&#xff0c;这个开发板是用的stc89c52,所以我选了图里这个&#xff0c;但是翻了开发板配套的资料&#xff0c;发现…

数据库系统概论 --- 期末单元集

第一章 绪论 一、选择题&#xff08;必考题型&#xff09; 1&#xff0e;在数据管理技术的发展过程中&#xff0c;经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中&#xff0c;数据独立性最高的是 阶段。 A&#xff0e;数据库系统 B&#xff0e;文件…

ICRA2024

ICRA 2024 2024 IEEE International Conference on Robotics and Automation 2024年IEEE国际机器人与自动化大会 官网 http://ieee-icra.org/index.html CONNECT The 2024 IEEE International Conference on Robotics and Automation (ICRA2024) is the IEEE Robotics and Auto…

分布式系统和高可用架构设计方案

目录 分布式系统 RPC 的工作原理 分布式数据存储 分布式锁 降级、熔断、限流 链路追踪 系统优化和故障处理 分布式系统 传统单体服务架构代码数量庞大&#xff0c;牵一发而动全身&#xff0c;一个很小的改动都可能影响整个服务。正所谓不要把所有的鸡蛋装在一个篮子里&…

大学物理(上)-期末知识点结合习题复习(3)——质点运动学-惯性系 非惯性系 惯性力 动量定理 动量守恒定律

目录 1.惯性系 2.非惯性系 3.惯性力 题1 题目描述 题解 4.动量定理 题2 题目描述 题解 5.动量守恒定律 题3 题目描述 题解 1.惯性系 牛顿定律适用的参考系&#xff0c;总能在找到特殊的参照物群&#xff08;参考系&#xff09;&#xff0c;使得牛顿第一定律成立…

02_LinuxLED驱动开发

目录 Linux下LED灯驱动原理 地址映射 ioremap函数 iounmap函数 I/O内存访问函数 LED灯驱动程序编写 编写测试APP 编译驱动程序 编译测试APP 运行测试 Linux下LED灯驱动原理 Linux下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以LED灯驱动最终也是对I.MX6ULL…

前端面试题---事件循环机制和异步编程

一.JavaScript 中的事件循环&#xff08;Event Loop&#xff09;机制。 JavaScript 中的事件循环&#xff08;Event Loop&#xff09;是一种用于处理异步操作和事件的机制&#xff0c;它确保代码按照正确的顺序执行&#xff0c;并防止阻塞和死锁。 事件循环的工作原理如下&am…

2.Java概述|Java学习笔记

文章目录 Java的诞生Java重要特点JDK、JRE、JVMJava开发注意事项和细节说明注释Java 中的注释类型 Java的诞生 https://www.oracle.com/java/technologies/java-se-support-roadmap.html Java 技术体系平台&#xff1a; Java重要特点 Java 语言是面向对象的(oop)Java 语言…

Dcloud开发者注册,uniCloud服务空间创建。

一、注册dcloud开发者 1、登录dcloud官网&#xff0c;注册开发者账号&#xff0c;官网地址&#xff1a;https://www.dcloud.io/ 二、创建uniCloud服务空间 1、注册完成开发者后&#xff0c;点击开发者后台&#xff0c;点击uniCloud&#xff0c;进入uniCloud服务空间列表&…

shell脚本入门-多命令处理与变量

目录 1.多命令处理2.Shell变量Shell变量的介绍2.1 系统环境变量2.2自定义变量自定义局部变量查询变量值语法变量删除 自定义全局变量父子Shell环境介绍 2.3 自定义常量 1.多命令处理 多命令处理的介绍&#xff1a; 就是在Shell脚本文件中编写多个Shell命令 我们现在通过一些需…

自然语言处理实战10-文本处理过程与输入bert模型后的变化

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理实战10-文本处理过程与输入bert模型后的变化&#xff0c;通过一段文本看看他的整个变化过程&#xff0c;经过怎样得变化才能输入到模型&#xff0c;输入到模型后文本又经过怎样的计算得到最后的结果。看…

逆向工程的未来在哪里?掌握逆向技能,开创新的职业道路!

前言 随着移动互联网的兴起&#xff0c;“APP”成了99%的互联网企业主要运营的产品&#xff0c;知名的例如“支付宝”、“美团”、“滴滴”、“抖音”等。用户基数的不断变大&#xff0c;安全性也经历着巨大的挑战。 app越来越多&#xff0c;也离不开我们的生活&#xff0c;而…

团队管理之性能实施团队日志10

在这一周中基本上遇到了性能实施过程中应该遇得到的复杂的问题。 像堆外内存引发OOM Killer&#xff0c;C coredump&#xff0c;负载该均衡不均衡&#xff0c;主机资源不够用&#xff0c;数据引发TPS抖动&#xff0c;IO引发TPS抖动之类的。 在这个项目中几乎碰到了我之前遇到…