速发国际365的最新网站-百特365平台可靠吗-日博365投注网

STM32学习记录--关于PWM引脚配置

目录 前言 使用PWM时,需要注意引脚是否支持TIM功能 可支持引脚 PWM.c PWM.h main.h 参考 前言 PWM(Pulse Width Modulation)是一种脉宽调制技术,用来调

STM32学习记录--关于PWM引脚配置

目录

前言

使用PWM时,需要注意引脚是否支持TIM功能

可支持引脚

PWM.c

PWM.h

main.h

参考

前言

PWM(Pulse Width Modulation)是一种脉宽调制技术,用来调节信号波形的高电平时间(脉冲宽度)的比例,从而改变有效值。PWM技术常见于电子电路中,广泛应用于各种领域和设备中,包括但不限于以下几个方面:

1. 电机控制:PWM可用于控制直流电机、步进电机和交流电机的转速和转向。通过调节脉冲宽度,可以实现精确的电机速度控制和精度定位。

2. 电源调节:PWM用于调节电源输出电压或电流。通过控制开关器件的导通时间和断开时间,可以实现电源输出的稳定调节,以满足不同的负载需求。

3. LED灯控制:PWM常用于LED灯的亮度调节。通过改变脉冲宽度,可以控制LED灯的亮度,实现不同亮度级别的灯光效果,节能的同时提高照明质量。

使用PWM时,需要注意引脚是否支持TIM功能

可支持引脚

PA0 TIM2_CH1 PA1 TIM2_CH2 PA2 TIM2_CH3 PA3 TIM2_CH4

PA6 TIM3_CH1 PA7 TIM3_CH2 PB0 TIM3_CH3 PB1 TIM3_CH4

PB6 TIM4_CH1 PB7 TIM4_CH2 PB8 TIM4_CH3 PB9 TIM4_CH4

PWM.c

#include "timer.h"

#include "led.h"

#include "usart.h"

//通用定时器3中断初始化

//这里时钟选择为APB1的2倍,而APB1为36M

//arr:自动重装值。

//psc:时钟预分频数

//这里使用的是定时器3!

void TIM3_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

TIM_Cmd(TIM3, ENABLE); //使能TIMx外设

}

//定时器3中断服务程序

void TIM3_IRQHandler(void) //TIM3中断

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源

LED1=!LED1;

}

}

//TIM3 PWM部分初始化

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM3_PWM_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5

//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

//初始化TIM3

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//初始化TIM3 Channel2 PWM模式

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器

TIM_Cmd(TIM3, ENABLE); //使能TIM3

}

PWM.h

#ifndef __TIMER_H

#define __TIMER_H

#include "sys.h"

void TIM3_Int_Init(u16 arr,u16 psc);

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

main.h

int main(void)

{

u16 led0pwmval=0;

u8 dir=1;

delay_init(); //延时函数初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

uart_init(115200); //串口初始化为115200

LED_Init(); //LED端口初始化

TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz

while(1)

{

delay_ms(10);

if(dir)led0pwmval++;

else led0pwmval--;

if(led0pwmval>300)dir=0;

if(led0pwmval==0)dir=1;

TIM_SetCompare2(TIM3,led0pwmval);

}

}

参考

使用STM32输出PWM波形https://blog.csdn.net/qq_45237293/article/details/111997424?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170218244416800184156047%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170218244416800184156047&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-111997424-null-null.nonecase&utm_term=STM%E4%BD%BF%E7%94%A8PWM&spm=1018.2226.3001.4450

← 上一篇: 一加5和努比亚Z11谁更物超所值?看完我就跪了 ……
下一篇: 银行卡转错账怎么办?教你一招追回 →

相关推荐

阴阳师提灯小僧哪里多 提灯小僧副本哪出现的多

阴阳师提灯小僧哪里多 提灯小僧副本哪出现的多

阴阳师提灯小僧哪里多?悬赏封印任务做起来还是比较简单的,但是大家时常需要查找一下相关的攻略,关于阴阳师中提灯小僧出现的章节和副

天章A4打印纸对比评测:TANGO新绿70g与其他品牌的性能大揭秘!

天章A4打印纸对比评测:TANGO新绿70g与其他品牌的性能大揭秘!

在办公室、学习、印刷行业中,打印纸是不可或缺的消费品。然而,市面上种类繁多的打印纸让许多消费者在选择时感到困惑。到底哪款打印纸

【丙】的甲骨文金文篆文字形演变含义日期:2023-03-19 来源:甲骨密码评论:0点击:

【丙】的甲骨文金文篆文字形演变含义日期:2023-03-19 来源:甲骨密码评论:0点击:

【丙】的甲骨文金文篆文字形演变含义 日期:2023-03-19 来源:甲骨密码 评论:0 点击: 摘要汉字的来历和演变(說文解字 篆體字)(金文 )(甲骨文 )

盘点全平台推荐使用的播放器

盘点全平台推荐使用的播放器

对于windows平台来说,自带的官方播放器功能简单,界面简洁,但是支持的编码不够,导致在播放一些冷门编码视频会出现失败的情况,这个时候

孩子的优点有哪些100条(女生的优点100条不重复)

孩子的优点有哪些100条(女生的优点100条不重复)

孩子的100个优点列举 1、孩子有良好的创新意识,能够提出新颖的想法和解决方案。4孩子有良好的学习能力,能够快速掌握新的知识和技能。4孩

为什么战狼2还不下架

为什么战狼2还不下架

近日,由吴京主演的电影《战狼2》仍然备受关注,但是却有不少网友纷纷表示,为什么这部电影还不下架?其实,这部电影的票房成绩非常出色