stm32按键控制改变pwm占空比

这篇具有很好参考价值的文章主要介绍了stm32按键控制改变pwm占空比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每次按下按键改变TIM_Setcompare函数中占空比值即可。

相关io口,占空比调节级数,是否支持连按根据自己需要自行修改。

main.c

#include "delay.h"

#include "sys.h"

#include "pwm.h"

#include "stm32f10x_tim.h"

#include "key.h"

int t=50;//占空比

void key_function(void) 

{

 static u8 key = 0;

 key = KEY_Scan(0);

if(key)

{

  t=t+25;

 if(t==125) //占空比50,75,100三档调节

 {

 t=50; //复位

 }

 }

}

void Device_Init(void) //初始化

{

 delay_init();

 key_Config();  

 delay_ms(10);

}

int main(void)

{

 SystemInit(); // 配置系统时钟为72M  

 TIM4_PWM_Init(100,720);

 Device_Init();

 while(1)

 {  

 delay_ms(10);

 key_function();

 TIM_SetCompare2(TIM4,t);

 }

}

 文章来源地址https://www.toymoban.com/news/detail-481239.html

pwm.c

#include "sys.h"
#include "pwm.h"
#include "stm32f10x_tim.h"
 
void TIM4_PWM_Init(u16 arr,u16 psc)  
{
 
 GPIO_InitTypeDef TIM4_PWM_Pin;
 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 TIM_OCInitTypeDef TIM4_OCInitStructure;
 
   
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能GPIO外设功能模块时钟
 
 
 TIM4_PWM_Pin.GPIO_Mode = GPIO_Mode_AF_PP;       //复用推挽输出
 TIM4_PWM_Pin.GPIO_Pin = GPIO_Pin_7;                     //PB7
 TIM4_PWM_Pin.GPIO_Speed = GPIO_Speed_50MHz;             //50MHZ
 GPIO_Init(GPIOB,&TIM4_PWM_Pin);
 
 //初始化TIM4
 TIM_TimeBaseStructure.TIM_Period = arr - 1; //自动重装载值
 TIM_TimeBaseStructure.TIM_Prescaler =psc - 1; //预分频值 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //
 
 //初始化TIM4_CH2  PWM模式  
 TIM4_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //脉冲宽度调制模式2
  TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
 TIM4_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
 TIM_OC2Init(TIM4, &TIM4_OCInitStructure);  
 
 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR2上的预装载寄存器
 
 TIM_Cmd(TIM4, ENABLE);  //使能TIM4
}

pwm.h

#ifndef __PWM_H

#define __PWM_H

 

#include "stm32f10x.h"

#include "stm32f10x_tim.h"

void TIM4_PWM_Init(u16 arr,u16 psc); //初始化 定时器4_PWM

 

#endif

key.c

#include "key.h"

#include "delay.h"

 

void key_Config(void) //配置 主控按键

{

 GPIO_InitTypeDef KEY_Pin;

 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

 

 KEY_Pin.GPIO_Mode = GPIO_Mode_IPU; //上拉输入,按下0松开1

 KEY_Pin.GPIO_Pin = GPIO_Pin_4;

 KEY_Pin.GPIO_Speed = GPIO_Speed_50MHz; 

 GPIO_Init(GPIOB,&KEY_Pin);

 

}

 

u8 KEY_Scan(u8 mode)//1连按,0单击

{  

 static u8 key_up=1;//按键按松开标志

 if(mode)key_up=1;

 if(key_up&&(KEY==0))

 {

  delay_ms(10);//去抖动 

  key_up=0;

  if(KEY==0)return KEY_PRES;//1

 

 }else if(KEY==1)key_up=1;      

  return 0;// 无按键按下

}

 

 key.h

#ifndef __KEY_H

#define __KEY_H

 

#include "stm32f10x.h"

#include "delay.h"

 

#define KEY GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)

 

#define KEY_PRES 1 //按键按下

 

void key_Config(void); //配置按键

 

u8 KEY_Scan(u8 mode);

 

void key_function(void); 

 

 

#endif

 

 

 

到了这里,关于stm32按键控制改变pwm占空比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32输入捕获测频率&PWM模式测频率占空比

    本文章转自B站江科大自化协    1,输入捕获测频率 接线图  目录结构 IC.h IC.c pwm.c PWM.h      main.c 编译下载出结果   2.PWM模式测频率占空比 接线图同上 目录结构同上 IC.c  IC.h main.c 编译下载测试     PS:测h   

    2024年02月15日
    浏览(27)
  • STM32 定时器及PWM计算占空比计算周期

    文使用Cubemx+MDK5开发方式(纯新手向 记录一下) 定时器时间计算 两步 (特别特别特别注意 单位换算 简单无脑) 1MHZ = 1000KHZ 1KHZ = 1000HZ 1HZ 的周期是1秒 1s = 1000毫秒(ms) 1ms =  1000 微秒(μs) 1μs = 1000纳秒(ns) 第一步: 定时器所在时钟总线频率 / 预分频 / 定时器计数值 = 频率 //频率

    2024年02月14日
    浏览(30)
  • stm32 笔记 PWM输入模式测量脉宽和占空比原理

    在测量占空比之前,我们先一步一步来,先让 STM32 可以测量脉宽。 TIM3_CH1(tim3 定时器通道 1)捕获模式测量脉宽步骤如下: 1.输入捕获到 PWM 上升沿触发 2.发送中断,通知用户此时被触发,用户获得当前计数器值 3.计数器清零,然后继续计数... 让 STM32 芯片一直重复这三步即

    2024年01月15日
    浏览(30)
  • [FOC-Stm32]设置PWM占空比(比较值)的几种方法

    近期博主在阅读一些基于STM32的FOC代码中,对PWM占空比的设置问题很感兴趣,于是找了分别拿出来做了一下对比,来看看都是怎么来调整PWM输出的。 下图给出了PWM占空比调整的原理,在定时器循环中,有两个量:ARR 重装载值和 CCR 比较值。定时器内的计数器从0到ARR循环记录数

    2024年02月15日
    浏览(35)
  • STM32主从模式实现两路同步PWM脉冲输出,频率、占空比可调

    原理:定时器1为主模式,定时器8为从模式,TIM1的定时器使能操作作为触发输出[TRGO]触发TIM8并使能TIM8的计数器,同时输出两路频率、占空比以及脉冲数量(小于256个,高级定时器重复计数功能为8位)可调PWM波形。 关键代码: 定时器1(TIM1)设为主模式: 定时器2(TIM8)设为从

    2024年02月13日
    浏览(29)
  • STM32-TIM3-PWM实现不同占空比波形

    目录 硬件准备 PWM介绍 产生PWM方法  TIM3模块介绍  代码部分 详细步骤 总结 首先,需要准备一块带有STM32芯片的开发板,例如STM32F103C8T6或STM32F407VET6。连接开发板到电脑上,并使用Keil,IAR等软件进行编程。本文章用的是Keil软件。 PWM(Pulse Width Modulation)即脉冲宽度调制,在具

    2024年02月03日
    浏览(32)
  • STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    目录 一、概述 二、输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道  三、输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程         主要介绍通用定时器的输入捕获功能,输入信号由GPIO口进入输入捕获通道,之后输入部分对相应的TIx输入信号采样,并

    2024年02月06日
    浏览(62)
  • 一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

    在STM32定时器配置中,我们知道可以将定时器配置为PWM输出模式,也叫输出比较模式,通过修改ARR寄存器中的值可以改变PWM周期,通过修改CCR寄存器中的值可以修改,PWM的占空比,但是这种普通的PWM输出模式较为单一,能输出PWM的定时器有4个通道,这种方式只能够产生4路周期

    2024年02月12日
    浏览(37)
  • STM32实现PWM输出频率1kHz占空比50%的方波和呼吸灯

    板子:野火指南者 芯片:STM32f103VET6 PWM通道:TIM3的通道1和通道3 GPIO:PA6和PB0 本文主要讲需要怎么做,简要讲解原理,提供全部代码,有利于快速上手。 打开STM32f103VET6的芯片数据手册,打开目录Pinouts and pindescriptions——High-density STM32F103xC/D/E pin definitions,如图所示。 这里选

    2024年02月05日
    浏览(40)
  • STM32 PWM模式与输出比较模式的区别。PWM占空比不生效,在STM32CubeMX中配置PWM的两种模式——蓝桥杯嵌入式

      🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届

    2023年04月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包