【STM32F103ZET6——库函数】6.PWM
目录
配置PWM输出引脚
使能引脚时钟
配置PWM
使能PWM
配置定时器
使能定时器时钟
使能定时器
例程
例程说明
main.h
main.c
PWM.h
PWM.c
led.h
led.c
DSQ.h
DSQ.c
配置PWM输出引脚
PWM的输出引脚必须配置为复用功能。
注意:需要使用哪个引脚,必须得先查看数据手册,只有含有“TIMx_CHx”或者含有“TIMx_CHxN”的引脚才能用作PWM脉冲信号输出,并且对应引脚对应固定,不可变。(重点!!!重点!!!重点!!!)
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);//LED蓝灯 PB1引脚
GPIO_InitTypeDef GPIO;
GPIO.GPIO_Speed=GPIO_Speed_50MHz;
GPIO.GPIO_Pin=GPIO_Pin_1;
GPIO.GPIO_Mode=GPIO_Mode_AF_PP;//复用功能
GPIO_Init(GPIOB,&GPIO);
使能引脚时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB1引脚时钟
配置PWM
配置PWM模式。模式1:计数值<CCR时,通道1为有效电平。模式2:计数值>CCR时,通道1为有效电平。
比较输出使能
配置输出比较极性。0:高电平有效。1:低电平有效。
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
/*
CHx->TIM_OCxInit
CH几就对应OC几TIMx_->TIMx
TIMx_就对应定时器几
*///PB1 -> TIM3_CH4 -> TIM3、TIM_OC4Init
TIM_OCInitTypeDef PWM;
PWM.TIM_OCMode=TIM_OCMode_PWM2;//PWM模式2
PWM.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
PWM.TIM_OCPolarity=TIM_OCPolarity_High;//输出比较极性
TIM_OC4Init(TIM3,&PWM);//初始化PWM
使能PWM
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
/*
CHx->TIM_OCxInit
CH几就对应OC几TIMx_->TIMx
TIMx_就对应定时器几
*///PB1 -> TIM3_CH4 -> TIM3、TIM_OC4PreloadConfig
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能PWM
配置定时器
根据对应的引脚定时器配置对应的定时器。
配置第一次时钟分频
配置计数模式
配置重载值
配置预分频系数
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);TIM_TimeBaseInitTypeDef DSQ_3;
DSQ_3.TIM_ClockDivision=TIM_CKD_DIV1;//第一次时钟分频,不分频
DSQ_3.TIM_CounterMode=TIM_CounterMode_Up;//计数模式,向上计数模式
DSQ_3.TIM_Period=900-1;//重载值,
DSQ_3.TIM_Prescaler=0;//预分频系数
TIM_TimeBaseInit(TIM3,&DSQ_3);//定时器3初始化
使能定时器时钟
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟
使能定时器
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);TIM_Cmd(TIM3,ENABLE);//使能定时器3
例程
例程说明
使用定时器3的PWM功能,输出占空比可变的PWM波,用来驱动LED灯,从而达到LED[PB5]亮度由1档变5档,再又5档变1档,每个档位持续1秒,如此循环。
main.h
#ifndef _MAIN_H_
#define _MAIN_H_#include "stm32f10x.h" // Device header
#include "stm32f10x_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO
#include "stm32f10x_tim.h" // Keil::Device:StdPeriph Drivers:TIM
#include <stm32f10x_rcc.h>
#include <stm32f10x_usart.h>
#include <stm32f10x_sdio.h>
#include <misc.h>
#include <stdio.h>
#include "timch.h"
#include "bsp_SysTick.h"#include "delay.h"
#include "PWM.h"
#include "led.h"
#include "DSQ.h"#endif
main.c
#include "main.h"int main() {char i;u16 PWM[]={0,225,450,675,900};delay_init();LED_Init();DSQ_3_Init();PWM_Init();while(1){for(i=0;i<5;i++){TIM_SetCompare4(TIM3,PWM[i]);delay_ms(1000);}for(i=4;i>=0;i--){TIM_SetCompare4(TIM3,PWM[i]);delay_ms(1000);}}
}
PWM.h
#ifndef __PWM_H_
#define __PWM_H_#include "stdio.h"
#include "sys.h"void PWM_Init();#endif
PWM.c
#include "PWM.h"void PWM_Init(){TIM_OCInitTypeDef PWM;PWM.TIM_OCMode=TIM_OCMode_PWM2;//PWM模式2PWM.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能PWM.TIM_OCPolarity=TIM_OCPolarity_High;//输出比较极性TIM_OC4Init(TIM3,&PWM);//初始化PWMTIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能PWM
}
led.h
#ifndef __LED_H_
#define __LED_H_#include "stdio.h"
#include "sys.h"void LED_Init();
void LED_ALL_OFF();
void LED_R_NO();
void LED_R_OFF();
void LED_G_NO();
void LED_G_OFF();
void LED_B_NO();
void LED_B_OFF();#endif
led.c
#include "led.h"void LED_Init(){GPIO_InitTypeDef GPIO;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO.GPIO_Pin=GPIO_Pin_5;GPIO.GPIO_Mode=GPIO_Mode_Out_PP;GPIO.GPIO_Speed=GPIO_Speed_50MHz;//GPIO_Init(GPIOB,&GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO.GPIO_Pin=GPIO_Pin_0;//GPIO_Init(GPIOB,&GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO.GPIO_Pin=GPIO_Pin_1;GPIO.GPIO_Mode=GPIO_Mode_AF_PP;//复用功能GPIO_Init(GPIOB,&GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_1);
}void LED_ALL_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO_SetBits(GPIOB,GPIO_Pin_1);
}void LED_R_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}void LED_R_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_5);
}void LED_G_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}void LED_G_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_0);
}void LED_B_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}void LED_B_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
DSQ.h
#ifndef __DSQ_H_
#define __DSQ_H_#include "stdio.h"
#include "delay.h"
#include "led.h"void DSQ_1_Init();
void DSQ_3_Init();#endif
DSQ.c
#include "DSQ.h"void DSQ_1_Init(){TIM_TimeBaseInitTypeDef DSQ_1;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//使能定时器1时钟DSQ_1.TIM_ClockDivision=TIM_CKD_DIV1;//第一次时钟分频,不分频DSQ_1.TIM_CounterMode=TIM_CounterMode_Up;//计数模式,向上计数模式DSQ_1.TIM_Period=900-1;//重载值,DSQ_1.TIM_Prescaler=0;//预分频系数 TIM_TimeBaseInit(TIM1,&DSQ_1);//定时器1初始化//TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//定时器3计数值更新、溢出,使能TIM_Cmd(TIM1,ENABLE);//使能定时器3
}void DSQ_3_Init(){TIM_TimeBaseInitTypeDef DSQ_3;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟DSQ_3.TIM_ClockDivision=TIM_CKD_DIV1;//第一次时钟分频,不分频DSQ_3.TIM_CounterMode=TIM_CounterMode_Up;//计数模式,向上计数模式DSQ_3.TIM_Period=900-1;//重载值,DSQ_3.TIM_Prescaler=0;//预分频系数 TIM_TimeBaseInit(TIM3,&DSQ_3);//定时器3初始化//TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//定时器3计数值更新、溢出,使能TIM_Cmd(TIM3,ENABLE);//使能定时器3
}相关文章:
【STM32F103ZET6——库函数】6.PWM
目录 配置PWM输出引脚 使能引脚时钟 配置PWM 使能PWM 配置定时器 使能定时器时钟 使能定时器 例程 例程说明 main.h main.c PWM.h PWM.c led.h led.c DSQ.h DSQ.c 配置PWM输出引脚 PWM的输出引脚必须配置为复用功能。 注意:需要使用哪个引脚&…...
基于SpringBoot + Vue的商城购物系统实战
一:简介 使用springboot框架编写后端服务,并使用若依框架搭建管理端界面。在原有基础功能基础上有加入了人工客服、收货地址、智能助手(接入通义千问,暂时关闭)、抽奖功能、支付宝沙箱支付、优惠卷等功能。 目前已部…...
Perl 调用 DeepSeek API 脚本
向 chat.deepseek.com 提问:请将这个 python 脚本翻译为 perl 语言脚本 参阅:Python 调用 DeepSeek API 完整指南 将 Python 脚本翻译为 Perl 语言脚本时,需要注意两种语言之间的语法差异。以下是将给定的 Python 脚本翻译为 Perl 的版本&a…...
2025国家护网HVV高频面试题总结来了01(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 0x1 高频面试题第一套 0x2 高频面试题第二套 0x3 高频面试题第三套 0x4 高频面试题第四套 0x5 高频面…...
【前端基础】3、HTML的常用元素(h、p、img、a、iframe、div、span)、不常用元素(strong、i、code、br)
HTML结构 一个HTML包含以下部分: 文档类型声明html元素 head元素body元素 例(CSDN): 一、文档类型声明 HTML最一方的文档称为:文档类型声明,用于声明文档类型。即:<!DOCTYPE html>…...
【前端场景题】如何应对页面请求接口的大规模并发问题
如何应对页面请求接口的大规模并发问题,尤其是前端方面的解决方案,并且需要给出详细的代码解释。首先,我需要仔细阅读我搜索到的资料,找出相关的信息,然后综合这些信息来形成答案。 首先看,它提到前端优化策…...
Sublime Text4安装、汉化
-------------2025-02-22可用---------------------- 官方网址下载:https://www.sublimetext.com 打开https://hexed.it 点击打开文件找到软件安装目录下的 ctrlf 查找 8079 0500 0f94 c2右边启用替换替换为:c641 0501 b200 90点击替换按钮 替换完成后 另存为本地…...
Python PDF文件拆分-详解
目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中,我们常常会遇到大型的PDF文件,这些文件可能难以发送、管理和查阅。将PDF拆分成…...
MacDroid for Mac v2.3 安卓手机文件传输助手 支持M、Intel芯片 4.7K
MacDroid 是Mac毒搜集到的一款安卓手机文件传输助手,在Mac和Android设备之间传输文件。您只需要将安卓手机使用 USB 连接到 Mac 电脑上即可将安卓设备挂载为本地磁盘,就像编辑mac磁盘上的文件一样编辑安卓设备上的文件,MacDroid支持所有 Andr…...
人大金仓国产数据库与PostgreSQL
一、简介 在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常因为各种”不适配“问题,但可以感觉得到大部分问题,将人大金仓视为postgreSQL就能去解决大部分问题。据了解,Kingba…...
阿里云 Qwen2.5-Max:超大规模 MoE 模型架构和性能评估
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 一、引言 Qwen2.5-Max 是阿里云通义千问团队研发的超大规模 Mixture-of-Expert(MoE)模型,旨在通…...
C++ 标准库容器的常用成员函数
目录 C 标准库容器简介 通用成员函数 1. 大小相关 size() empty() max_size() 2. 元素访问 operator[] at(size_t n) front() back() 3. 修改容器 push_back(const T& value) pop_back() clear() insert() erase() 4. 迭代器相关 begin() end() rbegi…...
MySQL双主搭建-5.7.35
文章目录 上传并安装MySQL 5.7.35双主复制的配置实例一:172.25.0.19:实例二:172.25.0.20: 配置复制用户在实例 1 (172.25.0.19)上执行:在实例 2 (172.25.0.20)上执行&…...
Uniapp开发微信小程序插件的一些心得
一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…...
Vscode通过Roo Cline接入Deepseek
文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程,那如何在vscode编译器中使用deepseek,记录下来,方便备查。 第一步、安装插件 在…...
不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比
本文深入探讨了最近国内外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技术细节、性能表现、应用场景及局限性,并从技术能力、功能需求、成本预算、数据安全和合规以及服务与支持五个关键维度,详细分析了不同规模企业在选择 AI 工具时的考量因素…...
如何有效判断与排查Java GC问题
目录 一、GC的重要性与对性能的影响 (一)GC对性能的影响简要分析 1.GC暂停与应用停顿 2.GC吞吐量与资源利用率 3.GC对内存管理的作用:资源回收 4.GC策略与优化的选择 (二)GC的双刃剑 二、GC性能评价标准 &…...
【笔记】用大预言模型构建专家系统
最近闲庭漫步,赏一赏各个AI大语言模型芳容。也趁着时间,把倪海夏一家的天纪和人纪视频看完了,感谢倪先生和现在网络的知识分享,受益匪浅。但是发现看完,很多不错的知识都不能记录在脑子里,那用的时候岂不是…...
Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析
一、功能实现全景视图 目标场景:在Android 14系统级ROM定制中,为SystemUI下拉状态栏的QuickQSPanel区域新增响铃模式切换开关,实现静音/响铃快速切换功能。该功能需通过三层关键改造实现: 二、核心实现三部曲 1. 配置注入&…...
【Python】基础语法三
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解Python的函数、列表和数组。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自ÿ…...
Windows HEIC缩略图支持:让资源管理器直接预览HEIC文件的完整方案
Windows HEIC缩略图支持:让资源管理器直接预览HEIC文件的完整方案 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 跨平台图…...
成本控制艺术:OpenClaw+Phi-3-vision-128k-instruct任务级计费方案
成本控制艺术:OpenClawPhi-3-vision-128k-instruct任务级计费方案 1. 当Token消耗成为拦路虎 上个月收到账单时,我的手指在鼠标滚轮上停滞了整整三秒——Phi-3-vision-128k-instruct的API调用费用比预期高出47%。这个数字让我意识到,在享受…...
突破模型部署瓶颈:TimesFM 2.5从500M到200M的压缩实践指南
突破模型部署瓶颈:TimesFM 2.5从500M到200M的压缩实践指南 【免费下载链接】timesfm TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting. 项目地址: https://gitc…...
Python自动化办公:3分钟搞定Outlook邮件批量导出(附完整代码)
Python自动化办公:3分钟搞定Outlook邮件批量导出(附完整代码) 每天早晨打开Outlook,面对堆积如山的未读邮件,你是否也感到一阵窒息?市场部的周报、客户的需求变更、财务部的报销提醒……重要信息散落在上百…...
UniApp项目实战:手把手教你用云函数搞定UniPush 2.0服务端消息推送
UniPush 2.0云函数实战:从零构建高可用消息推送系统 在移动应用生态中,消息推送是维系用户活跃度的关键触达手段。UniPush 2.0作为DCloud推出的新一代推送服务,通过云函数与厂商通道的深度整合,解决了传统推送方案中离线到达率低、…...
蛋白质功能预测:从序列同源性到多模态深度学习
点击 “AladdinEdu,你的AI学习实践工作坊”,注册即送-H卡级别算力,沉浸式云原生集成开发环境,80G大显存多卡并行,按量弹性计费,教育用户更享超低价。 摘要:蛋白质功能预测是注释未知蛋白质、揭示…...
Phi-4-Reasoning-Vision基础操作:图片预览、参数调整、结果复制与导出功能
Phi-4-Reasoning-Vision基础操作:图片预览、参数调整、结果复制与导出功能 1. 工具概览 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。它专为双卡4090环境优化,通过Streamlit搭建了直观的宽屏交…...
告别Lottie和SVGA:用Unity给Android应用做高性能动态引导动画的实战踩坑记录
告别Lottie和SVGA:用Unity给Android应用做高性能动态引导动画的实战踩坑记录 在移动应用开发中,动态引导动画一直是提升用户体验的关键元素。从早期的帧动画到后来的Lottie、SVGA等方案,开发者们不断寻求更高效、更灵活的动画实现方式。然而&…...
新手福音:在快马平台交互式学习openclaw更新命令语法与参数
作为一名刚接触openclaw的新手,我最初看到那些复杂的命令行参数时简直一头雾水。直到发现了InsCode(快马)平台,它用可视化的方式帮我拆解了openclaw更新命令的每个细节,现在终于能自信地操作了。下面分享我的学习心得: 命令结构拆…...
用仓颉语言搞定编译原理实验:从正则表达式到DFA的保姆级实现(附完整代码)
用仓颉语言实现编译原理实验:从正则表达式到DFA的实战指南 第一次接触编译原理实验时,看着那些晦涩的算法描述和数学符号,我完全不知道如何下手。直到用仓颉语言完整实现了从正则表达式到NFA再到DFA的转换过程,才真正理解了这些概…...
