STM32学习和实践笔记(23):PWM输出的配置

PWM可以看作是定时器功能中其中一个子功能,配置步骤与前面定时器的方式类似。相关库函数也同样在tim.c里。

3.PWM输出配置步骤

1)使能定时器及端口时钟,并设置引脚复用器映射。

a)         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//TIM3定时器的端口时钟打开

所谓的引脚复用器映射,是指将原来默认设置在某个引脚上的功能,改到别的引脚上去实现。

比如,这里的通用定时器3的通道1,它的默认PWM输出引脚是PA6,通过使用重映像或映射,可以让它在PB4或PC6引脚上输出!

在接下来的PWM实验中,就是实现在PC6上输出PWM信号,来使接在PC6的LED灯,显示呼吸灯的效果。

所以就有下面这两条语句:

b)        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开PC端口的时钟

c)        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//通过这个函数来将通用定时器3的通道1的输出重映像到PC6。

上表中的部分重像与完全重映像,并没有什么特别的意思,仅仅是为了在库函数中,用这两个名字来代表两个值:10和11,用以传递形参来分别表明,到底是映射到PB4还是PC6而已。

有哪些功能可以在对应引脚上实现重映像?可选的参数在 stm32f10x_gpio.h 都已经列出来非常详细:

d)        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//将PC6配置为复用的推挽输出

2)初始化定时器参数,包含自动重装值,分频系数,计数方式等

voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*

TIM_TimeBaseInitStruct);

3)初始化PWM输出参数,包含PWM模式、输出极性(含义见上一篇文),使能等

void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef*

TIM_OCInitStruct); 

typedef struct

{

  uint16_t TIM_OCMode;        //比较输出模式(PWM一共有8种输出模式)

  uint16_t TIM_OutputState;   //比较输出使能

  uint16_t TIM_OutputNState;  //比较互补输出使能(这个在高级定时器中才用到)

  uint32_t TIM_Pulse;         //脉冲宽度(这个在高级定时器中才用到)

  uint16_t TIM_OCPolarity;    //输出极性

  uint16_t TIM_OCNPolarity;   //互补比较输出极性(这个在高级定时器中才用到)

  uint16_t TIM_OCIdleState;   //空闲状态下比较输出状态(这个在高级定时器中才用到)

  uint16_t TIM_OCNIdleState;  //空闲状态下比较输出状态(这个在高级定时器中才用到)

} TIM_OCInitTypeDef;        

如果我们要配置TIM3的CH1为PWM1模式,输出极性为低电平,并且使能

PWM输出,可以如下配置

TIM_OCInitTypeDef TIM_OCInitStructure;//先定一个结构体变量

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OC1Init(TIM3,&TIM_OCInitStructure); //输出比较通道1初始化                            

4)开启定时器

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

TIM_Cmd(TIM3,ENABLE); //开启定时器

5)修改TIMx_CCRx的值控制占空比

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1);

6)使能TIMx在CCRx上的预装载寄存器

使能输出比较预装载库函数是

void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

第一个参数用于选择定时器,第二个参数用于选择使能还是失能输出比较预装载寄存器,可选择为TIM_OCPreload_Enable、TIM_OCPreload_Disable。

7)使能 TIMxARR 上的预装载寄存器允许位

使能 TIMxARR 上的预装载寄存器允许位库函数是

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

第一个参数用于选择定时器,第二个参数用于选择使能还是失能 

以上是通用定时器的设置,如果是高级定时器要想输出PWM波形,还须要设置一个 MOE 位(TIMx_BDTR 的第 15 位),以使能主输出,否则不会输出 PWM。库函数设置的函数为

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);                 

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

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

相关文章

举个栗子!Tableau 技巧(272):学做曲线面积图(Sigmoid area charts)

曲线面积图(Sigmoid area charts)是区域图的一种创新变形,呈现数据随时间变化的情况,也可用于对数据总值趋势的洞察。 如何在 Tableau 中具体实现呢?今天的栗子,一睹为快吧! 本期《举个栗子》…

HTML学习笔记(二)

1.HTML图像 图像标签&#xff08;<img>)和源属性&#xff08;src&#xff09; HTML中&#xff0c;图像由<img>标签来定义&#xff0c;<img>是空标签&#xff0c;只包含属性&#xff0c;没有闭合标签。在页面上显示图像需要使用源属性&#xff08;src),src是指…

机器人系统ros2-开发实践03-监听节点的参数变化(C++)

背景&#xff1a; 通常&#xff0c;节点需要响应其自身参数或另一个节点参数的更改。 ParameterEventHandler 类可以轻松侦听参数更改&#xff0c;以便您的代码可以响应它们。本教程将向您展示如何使用 ParameterEventHandler 类的 C 版本来监视节点自身参数的更改以及另一个节…

Linux系统安全与应用【一】

目录 1.账号安全控制 1.1 系统账号清理 1.2 密码安全控制 1.3 命令历史限制 1.4 命令总结 2.系统引导和登录控制 2.1 使用su命令切换用户 2.2 限制使用su命令的用户 3.可插拔式认证模块PAM 3.1 linux中的PAM安全认证 3.2 PAM认证原理​编辑 3.3 PAM认证的构成 3.4 P…

itables, Python 大型数据集显示工具

目录 前言 安装 特性 基本功能 显示表格 排序功能 搜索功能 分页显示 高级功能 自定义列的显示格式 高级搜索功能 实现数据的动态更新 集成外部JavaScript库 总结 前言 iTables库是Python中一个强大的工具&#xff0c;专门用于在Jupyter Notebook和其他IPython环境中以交…

Leetcode—1329. 将矩阵按对角线排序【中等】(unordered_map、priority_queue)

2024每日刷题&#xff08;121&#xff09; Leetcode—1329. 将矩阵按对角线排序 实现代码 class Solution { public:vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {const int m mat.size();const int n mat[0].size();unorder…

R语言--图形绘制

一&#xff0c;绘制简单图形 c1<- c(10,20,30,40,50) c2<-c(2,7,15,40,50) plot(c1,c2,typeb) 具体参数请参考R语言中的绘图技巧1&#xff1a;plot()函数参数汇总_r语言plot参数设置-CSDN博客 c1<- c(10,20,30,40,50) c2<-c(2,7,15,40,50) plot(c1,c2,typeb,col#…

这些小众工作软件让你事半功倍

大家好&#xff0c;我是追求高效工作的小红书种草小能手&#xff01;今天要和大家分享几款超实用的工作软件&#xff0c;它们可能不像那些大牌软件那样家喻户晓&#xff0c;但绝对能让你的工作生活焕然一新&#xff01;&#x1f31f; 1️⃣《亿可达》- &#x1f5a5;️自动化办…

第8章 软件工程

一、软件工程概述 &#xff08;一&#xff09;软件危机 1、含义&#xff1a;落后的软件生产方式无法满足迅速增长的计算机软件需求&#xff0c;从而导致软件开发与维护过程中出现一系列严重问题的现象。 2、解决方案&#xff1a;引入软件工程的思想。 &#xff08;二&#x…

【Qt】无法创建或打开CMake项目

无法创建或打开CMake项目 没有CMake选项 原因 卸载重装了qt&#xff0c;安装时勾选了cmake&#xff0c;发现还是一样没有。。。 后面发现是插件里没有勾选上CMake。。。很无语 不是应该默认就有的吗 不懂了 解决 插件勾选重启就好了

Python 操作PDF图片 – 添加、替换、删除PDF中的图片

PDF文件中的图片可以丰富文档内容&#xff0c;提升用户的阅读体验。除了在PDF中添加图片外&#xff0c;有时也需要替换或删除其中的图片&#xff0c;以改进视觉效果或更新信息。文本将提供以下三个示例&#xff0c;介绍如何使用Python 操作PDF文件中的图片&#xff1a; 目录 …

qt学习篇---界面按键关联(信号和槽)

目录 1.qt基础 2.做一个界面 创建project UI界面设计 信号和槽 1.控件改名字 2.什么是信号和槽 3.怎么关联信号和槽 自动关联 手动关联 1.qt基础 qt可移植性强&#xff0c;不久会用到MCU。很有意义学习 2.做一个界面 创建project 不要中文路径 选择QWidget .pro文件…

强力的应用容器引擎---------Docker的资源控制

目录 一、CPU 资源控制 1.1cgroups有四大功能 1.2设置CPU使用率上限 1.2.1查看CPU使用率 1.2.2进行CPU压力测试 1.2.3设置50%的比例分配CPU使用时间上限 1.3设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 1.3.1创建两个容器为hua1 和hua2&#xff0c…

限流--4种经典限流算法讲解--单机限流和分布式限流的实现

为什么需要限流 系统的维护使用是需要成本的&#xff0c;用户可能使用科技疯狂刷量&#xff0c;消耗系统资源&#xff0c;出现额外的经济开销问题&#xff1a; 控制成本>限制用户的调用次数用户在短时间内疯狂使用&#xff0c;导致服务器资源被占满&#xff0c;其他用户无…

Q1季度方便速食行业线上市场(京东天猫淘宝)销售数据分析

方便食品行业作为快速消费品市场的重要组成部分&#xff0c;近几年表现出较为强劲的发展势头。当然&#xff0c;每年的食品安全问题也在一定程度上影响着市场的良性健康发展。那么&#xff0c;今年Q1季度方便食品的线上发展如何&#xff1f; 根据鲸参谋数据显示&#xff0c;Q1…

制造企业如何打造客户服务核心竞争力?[AMT企源典型案例]

引言 产品同质化严重&#xff0c;竞争的焦点从产品转向服务&#xff0c;企业的管理模式也要相应转变。那么如何打造围绕服务的核心竞争力&#xff1f;相信以下案例会给大家一些启发。 项目背景&#xff1a; 售后服务在市场竞争中的作用凸显 A公司是一家医疗器械生产制造企业…

kali 网络环境设置

一、修改网卡配置 1.1 系统桌面上单击右键&#xff0c;在弹出的菜单中选择 Open Terminal Here。 1.2 输入命令 vim /etc/network/interfaces&#xff0c;显示配置网卡参数为。iface lo 一般指 本地环回接口&#xff0c; iface eth0 网卡为系统正在使用的网卡&#xff0c;其中的…

浏览器的本地存储---localstorage

web存储对象 Web 存储对象 localStorage 和 sessionStorage 允许我们在浏览器上保存键/值对。 这两个对象保存再本地&#xff08;客户端&#xff09;&#xff0c;允许保存至少 5MB 的数据&#xff08;或更多&#xff09;&#xff0c;这些数据不会因为页面刷新而销毁&#xff0…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中&#xff0c;科技的发展为我们的生活带来了无数便利和可能性。其中&#xff0c;高扬程水泵作为一种高效能的水泵&#xff0c;其独特的设计使其在各个领域都有着广泛的应用&#xff0c;尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程&#xff1a;高扬程水泵…

TinyML之Hello world----基于Arduino Nano 33 BLE Sense Rev2的呼吸灯

早期版本的Hello World 这应该是一个逼格比较高的呼吸灯了&#xff0c;用ML来实现呼吸灯功能&#xff0c;之前已经有大佬发过类似的文章&#xff1a;https://blog.csdn.net/weixin_45116099/article/details/126310816 当前版本的Hello World 这是一个ML的入门例程&#xff…