STM32 基础知识(探索者开发板)--93讲 PWM

预分频器相当于一个计数器,2分频就是接收2个脉冲传递一个脉冲,3分频就是接收3个脉冲传递一个脉冲,最高65535分频,那么总计时间能达到65535*65535*1/72MHZ 约59秒,没有分频器只能计数最高0.09秒

PWM配置步骤

1.配置定时器基础工作参数                       HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)

2.定时器PWM输出Msp初始化                   HAL_TIM_PWM_MspInit()

3.配置PWM模式/比较值等                         HAL_TIM_PWM_ConfigChannel()

4.使能输出并启动计数器                            HAL_TIM_PWM_Start()

5.修改比较值控制占空比                            __HAL_TIM_SET_COMPARE()

解释步骤1中TIM_HandleTypeDef

typedef struct
{
 TIM_TypeDef *Instance; /* 外设寄存器基地址 */
 TIM_Base_InitTypeDef Init; /* 定时器初始化结构体*/
}TIM_HandleTypeDef;

再解释其中Init

typedef struct
{
 uint32_t Prescaler; /* 预分频系数 */ 
 uint32_t CounterMode; /* 计数模式 */
 uint32_t Period; /* 自动重载值 ARR */
 uint32_t ClockDivision; /* 时钟分频因子 */ 
 uint32_t RepetitionCounter; /* 重复计数器 */
 uint32_t AutoReloadPreload; /* 自动重载预装载使能 */
} TIM_Base_InitTypeDef;

解释步骤3中

HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
TIM_OC_InitTypeDef *sConfig, uint32_t Channel)的 TIM_OC_InitTypeDef 结构体

typedef struct
{
 uint32_t OCMode; /* 输出比较模式选择,寄存器的时候说过了,共 8 种模式 */
 uint32_t Pulse; /* 设置比较值 */
 uint32_t OCPolarity; /* 设置输出比较极性 */
 uint32_t OCNPolarity; /* 设置互补输出比较极性 */
 uint32_t OCFastMode; /* 使能或失能输出比较快速模式 */
 uint32_t OCIdleState; /* 选择空闲状态下的非工作状态(OC1 输出) */
 uint32_t OCNIdleState; /* 设置空闲状态下的非工作状态(OC1N 输出) */
} TIM_OC_InitTypeDef

PWM控制呼吸灯实验

gtim代码

//gtim.c#include "./BSP/TIMER/gtim.h"TIM_HandleTypeDef g_timx_pwm_chy_handle;// 通用定时器PWM输出初初始化函数
void gitm_timx_pwm_chy_init(uint16_t arr,uint16_t psc)      //1.配置定时器基础工作参数
{TIM_OC_InitTypeDef timx_oc_pwm_chy = {0x00};            //定时器输出句柄g_timx_pwm_chy_handle.Instance = TIM14;g_timx_pwm_chy_handle.Init.Prescaler = psc;             //自动重装载值g_timx_pwm_chy_handle.Init.Period = arr;                //预分频系数g_timx_pwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP;HAL_TIM_PWM_Init(&g_timx_pwm_chy_handle);               //初始化PWMtimx_oc_pwm_chy.OCMode = TIM_OCMODE_PWM1;               //选择PWM模式1timx_oc_pwm_chy.Pulse = arr / 2;                     //设置占空比,百分之五十timx_oc_pwm_chy.OCPolarity = TIM_OCPOLARITY_LOW;     //设置输出极性为低HAL_TIM_PWM_ConfigChannel(&g_timx_pwm_chy_handle,&timx_oc_pwm_chy,TIM_CHANNEL_1);  //3.配置PWM模式/比较值HAL_TIM_PWM_Start(&g_timx_pwm_chy_handle,TIM_CHANNEL_1);    //4.使能输出计数器
}//定时器输出PWM MSP初始化函数
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)                     //配置GPIO
{if (htim->Instance == TIM14){GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOF_CLK_ENABLE();                                /* 开启通道y的CPIO时钟 */__HAL_RCC_TIM14_CLK_ENABLE();                                     /* 使能定时器时钟 */gpio_init_struct.Pin = GPIO_PIN_9;                              /* 通道y的CPIO口 */gpio_init_struct.Mode = GPIO_MODE_AF_PP;                        /* 复用推挽输出 */gpio_init_struct.Pull = GPIO_PULLUP;                            /* 上拉 */gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;                  /* 高速 */gpio_init_struct.Alternate = GPIO_AF9_TIM14;                    /* IO复用设置 */HAL_GPIO_Init(GPIOF, &gpio_init_struct);}
}//gtim.h#ifndef __GTIM_H
#define __GTIM_H#include "./SYSTEM/sys/sys.h"void gitm_timx_pwm_chy_init(uint16_t arr,uint16_t psc);
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);#endif

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/TIMER/gtim.h"extern TIM_HandleTypeDef g_timx_pwm_chy_handle; //引入结构体
int main(void)
{uint16_t ledrpwmval = 0;uint8_t dir = 1;HAL_Init();                                 /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7);         /* 设置时钟,168Mhz */delay_init(168);                            /* 延时初始化 */usart_init(115200);                         /* 串口初始化为115200 */led_init();                                 /* 初始化LED */gitm_timx_pwm_chy_init(500 - 1, 84 - 1);    /* 84 000 000 / 84 = 1 000 000 1Mhz的计数频率,2Khz的PWM */while (1){delay_ms(10);if (dir)ledrpwmval++;                   /* dir==1 ledrpwmval递增 */else ledrpwmval--;                      /* dir==0 ledrpwmval递减 */if (ledrpwmval > 100)dir = 0;           /* ledrpwmval到达300后,方向为递减 */if (ledrpwmval == 0)dir = 1;            /* ledrpwmval递减到0后,方向改为递增 *//* 修改比较值控制占空比 */__HAL_TIM_SET_COMPARE(&g_timx_pwm_chy_handle, TIM_CHANNEL_1, ledrpwmval);}
}

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

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

相关文章

《长江丛刊》期刊投稿发表

《长江丛刊》杂志是由国家新闻出版总署批准的正规期刊,是一本文学类综合性刊物,包括文学评论以及文学作品的发表。是广大专家、学者、教师、学子发表论文、交流信息的重要平台,符合评职称要求(单位有特殊要求除外)。 …

docker小白第八天

docker小白第八天 redis常规安装 前期已经配好了阿里云容器镜像加速库 docker search redis docker pull redis:6.0.8 docker images redis:6.0.8启动容器,并进入容器的命令行界面 docker run -d -p 6379:6379 redis:6.0.8 docker ps docker exec -it 容器id /bin/bash验证…

Java生态系统的进化:从JDK 1.0到今天

目录 前言 JDK 1.0:开启Java时代 JDK 1.1:Swing和内部类 JDK 1.2:Collections框架和JIT编译器 JDK 1.5:引入泛型和枚举 JDK 1.8:Lambda表达式和流 JDK 11以后:模块化和新特性 未来展望 总结 作者简…

UI自动化Selenium 元素定位之Xpath

一、元素定位方式 selenium中定位元素,通常有几种方式: 1、通过id定位:By.ID 2、通过Name定位:By.Name 3、通过元素其他属性定位,如class、type、text文本。。。。。。等等,如果要用属性定位那就需要使…

虚析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类的指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构代码函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性: 可以解决父类指针释放子类对象 都需要有具体的函数…

[SWPUCTF 2021 新生赛]finalrce

[SWPUCTF 2021 新生赛]finalrce wp 注&#xff1a;本文参考了 NSSCTF Leaderchen 师傅的题解&#xff0c;并修补了其中些许不足。 此外&#xff0c;参考了 命令执行(RCE)面对各种过滤&#xff0c;骚姿势绕过总结 题目代码&#xff1a; <?php highlight_file(__FILE__); …

【算法练习】leetcode链表算法题合集

链表总结 增加表头元素倒数节点&#xff0c;使用快慢指针环形链表&#xff08;快慢指针&#xff09;合并有序链表&#xff0c;归并排序LRU缓存 算法题 删除链表元素 删除链表中的节点 LeetCode237. 删除链表中的节点 复制后一个节点的值&#xff0c;删除后面的节点&#x…

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…

深度学习之RNN

1.循环神经网络 在时间t的时候&#xff0c;对于单个神经元来讲它的输出y(t)如下 wx是对于输入x的权重&#xff0c;wy是对于上一时刻输出的权重 所以循环神经网络有两个权重。 如果有很多这样的神经元并排在一起 则在t时刻的输出y为 这时输入输出都是向量 2.记忆单元 由于循…

车队试验的远程实时显示方案

风丘科技推出的数据远程实时显示方案更好地满足了客户对于试验车队远程实时监控的需求&#xff0c;并真正实现了试验车队的远程管理。随着新的数据记录仪软件IPEmotion RT和相应的跨平台显示解决方案的引入&#xff0c;让我们的客户端不仅可在线访问记录器系统状态&#xff0c;…

git unable to create temporary file: No space left on device(git报错)

1.问题 1.1 vscode中npm run serve跑项目的时候&#xff0c;进度达到95%的时候一直卡着无进度&#xff1b; 1.2 git命令提交代码报错&#xff1b; 2.具体解决 这个错误通常表示你的磁盘空间已经满了&#xff0c;导致 Git 无法在临时目录中创建文件。2.1 清理磁盘空间&#xf…

低代码平台在金融银行中的应用场景

随着数字化转型的推进&#xff0c;商业银行越来越重视技术在业务发展中的作用。在这个背景下&#xff0c;白码低代码平台作为一种新型的开发方式&#xff0c;正逐渐受到广大商业银行的关注和应用。白码低代码平台能够快速构建各类应用程序&#xff0c;提高开发效率&#xff0c;…

跨境电商引流真的很难吗?了解一下这些技巧!

随着全球电商市场的不断扩大&#xff0c;越来越多的企业开始涉足跨境电商领域&#xff0c;然而&#xff0c;与国内电商相比&#xff0c;跨境电商面临着诸多挑战&#xff0c;其中最大的难题之一就是如何有效地吸引潜在客户。 很多卖家觉得跨境电商引流非常困难&#xff0c;但实…

springBoot整合redis做缓存

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一&#xff0c;它是一个开源的使用ANSI c语言编写的key-value存储系统&#xff08;区别于MySQL的二维表格的形式存储。&#xff09;。和Memcache类似&#xff0c;但很大程度补偿了Memcache的不足。和Memcache一样&#xff0c;R…

BAT log-yyyy-mm-dd.log

日志文件 文件名 日期格式化 https://download.csdn.net/download/spencer_tseng/88673832 https://download.csdn.net/download/spencer_tseng/88673716

探究Android DreamService的梦幻世界

探究Android DreamService的梦幻世界 引言 DreamService的概述 在Android开发中&#xff0c;DreamService是一种特殊类型的服务&#xff0c;它可以用于创建梦幻世界的屏保应用。梦幻世界是一种用户界面显示模式&#xff0c;当设备进入空闲状态时&#xff0c;系统会自动启动D…

main函数的参数ac和av

概要&#xff1a; main函数有两个参数&#xff0c;ac和av ac表示参数的个数&#xff0c;程序名包括在内。也就是说程序无参数运行时&#xff0c;ac的值为1 av是一个字符串数组&#xff0c;这个数组中的每个元素表示一个参数&#xff0c;程序名包括在内。也就是说&#xff0c…

linux如何清理磁盘,使得数据难以恢复

sda 是硬盘&#xff0c;sda1 和 sda2 是硬盘的两个分区。centos-root 是一个逻辑卷&#xff0c;挂载在根目录 /。 /dev/sda 是硬盘&#xff0c;/dev/sda1 和 /dev/sda2 是硬盘的两个分区。 [rootnode2 ~]# dd if/dev/urandom of/dev/sda bs4M这个命令将从 /dev/urandom 读取随…

【JavaScript】垃圾回收与内存泄漏

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

JAVA语言—AOP基础

1、AOP概述 AOP&#xff1a;AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。 场景&#xff1a;案例部分功能运行较慢&…