-
2022-04-03 21:41:11
pwm.h
#ifndef _PWM_H #define _PWM_H #include"sys.h" void TIM1_PWM_Init(u16 arr,u16 psc); #endif
pwm.c
#include "pwm.h" #include "led.h" void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //gpio外设使能 //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM1,ENABLE); //主输出MOE使能 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1预装载使能 TIM_ARRPreloadConfig(TIM1, ENABLE); //使能装载在TIM1上的ARR预装载寄存器使能 TIM_Cmd(TIM1, ENABLE); //使能TIM1 }
main.c
#include "led.h" #include "delay.h" #include "sys.h" #include "pwm.h" int main(void) { u16 led0pwmval=0; u8 dir=1; delay_init(); LED_Init(); TIM1_PWM_Init(899,0);//72000/(899+1) while(1) { delay_ms(10); if(dir)led0pwmval++; else led0pwmval--; if(led0pwmval>300)dir=0; if(led0pwmval==0)dir=1; TIM_SetCompare1(TIM1,led0pwmval); } }
更多相关内容 -
【STM32F103笔记】7、定时器之PWM输出——做个呼吸灯
2021-01-06 11:57:25这一篇来介绍STM32的定时器,STM32的定时器分为三类: 基本定时器(Basic timers):从0计数到预设的值,并触发中断或DMA,没有其它功能,其...对于STM32F103C8T6来说,用于3个通用定时器和1个高级定时器(手册中)。 -
6通用定时器PWM—呼吸灯_f103c8t6呼吸灯_STM32F103_
2021-09-30 10:36:51基于Stm32F103C8T6的PWM呼吸灯,由PWM占空比调节LED灯的亮度 -
基于STM32F103 PWM呼吸灯设计
2020-07-29 23:02:35基于STM32F103 PWM呼吸灯设计 1、线性呼吸灯 bsp.c #include<includes.h> void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC...基于STM32F103 PWM呼吸灯设计
1、线性呼吸灯
bsp.c
#include<includes.h> void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC_Configuration(); /* 初始化系统时钟 */ TIM3_Configuration(); /* PWM配置 */ } /********************************************************************************************************* * 名 称 :RCC_Configuration * 功能描述 : 初始化系统时钟 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void RCC_Configuration(void) { SystemInit(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); } /********************************************************************************************************* * 名 称 :TIM3_Configuration * 功能描述 : 初始化定时器 PWM * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void TIM3_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //通道1 PA7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道2 PA6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道3 PB0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //通道4 PB1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc 影响周期 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1*/ TIM_OCInitStructure.TIM_Pulse =0; // 初始值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //pwm模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平 //通道1 TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道2 TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道3 TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道4 TIM_OC4Init(TIM3, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); /* 使能 */ }
main.c
#include <includes.h> #include <stdlib.h> extern void BSP_Init (void); /********************************************************************************************************* * 名 称 :main * 功能描述 : 初始化STM32 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ int main(void) { int n1,n2,n3,n4; int i; n1=100; n2=100; n3=100; n4=100; BSP_Init(); while(1) { for(i=0;i<100;i++) { TIM_SetCompare1(TIM3,i); TIM_SetCompare2(TIM3,i); TIM_SetCompare3(TIM3,i); TIM_SetCompare4(TIM3,i); delay_ms(19); } for(i=100;i>=0;i--) { TIM_SetCompare1(TIM3,i); TIM_SetCompare2(TIM3,i); TIM_SetCompare3(TIM3,i); TIM_SetCompare4(TIM3,i); delay_ms(19); } delay_ms(300); } }
2、正弦函数呼吸灯
bsp.c
#include<includes.h> void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC_Configuration(); /* 初始化系统时钟 */ TIM3_Configuration(); /* PWM配置 */ } /********************************************************************************************************* * 名 称 :RCC_Configuration * 功能描述 : 初始化系统时钟 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void RCC_Configuration(void) { SystemInit(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); } /********************************************************************************************************* * 名 称 :TIM3_Configuration * 功能描述 : 初始化定时器 PWM * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void TIM3_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //通道1 PA7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道2 PA6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道3 PB0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //通道4 PB1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc 影响周期 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1*/ TIM_OCInitStructure.TIM_Pulse =0; // 初始值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //pwm模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平 //通道1 TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道2 TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道3 TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道4 TIM_OC4Init(TIM3, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); /* 使能 */ }
main.c
#include <includes.h> #include <stdlib.h> #include <math.h> extern void BSP_Init (void); /********************************************************************************************************* * 名 称 :main * 功能描述 : 初始化STM32 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ int main(void) { int n1,n2,n3,n4; int i; n1=100; n2=100; n3=100; n4=100; BSP_Init(); while(1) { for(i=0;i<314;i++) { TIM_SetCompare1(TIM3,100*sin(i/100.0)); TIM_SetCompare2(TIM3,100*sin(i/100.0)); TIM_SetCompare3(TIM3,100*sin(i/100.0)); TIM_SetCompare4(TIM3,100*sin(i/100.0)); delay_ms(10); } for(i=314;i>=0;i--) { TIM_SetCompare1(TIM3,100*sin(i/100.0)); TIM_SetCompare2(TIM3,100*sin(i/100.0)); TIM_SetCompare3(TIM3,100*sin(i/100.0)); TIM_SetCompare4(TIM3,100*sin(i/100.0)); delay_ms(10); } delay_ms(300); } }
-
STM32CUBEMX配置stm32f103c8t6的pwm,生成pwm波来实现小灯的呼吸
2022-04-14 19:23:02不要以为控制电压大小就行,STM32F103C8T6最小系统板没法控制电压渐渐变大变小,但是我们可以通过PWM的占空比来实现呼吸灯,程序用keil5软件编写,编译无错,实现效果完美,望如您所愿。其中PA6作为波形输出口。 -
呼吸灯程序_STM32F103配置_
2021-10-04 08:04:44STM32F103单片机的外设资源,时钟,IO,PWM输出配置 -
stm32 f103 pwm呼吸灯
2019-08-15 14:06:58// 这边是实现呼吸灯的效果 } } //TIM3 PWM部分初始化 //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 void TIM4_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_...硬件:小灯是高电平亮
为了明白,完全重映射 , 以 TIM4_CH1为例
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端口初始化
TIM4_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
while(1)
{
delay_ms(1);
if(dir)led0pwmval++;
else led0pwmval--;if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM4,led0pwmval); // 这边是实现呼吸灯的效果}
}//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
//设置该引脚为复用输出功能,输出TIM4 CH1的PWM脉冲波形 GPIOB.6
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //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_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM3在CCR1上的预装载寄存器
TIM_Cmd(TIM4, ENABLE); //使能TIM3
}
下面配置的是完全重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); //Timer4重映射 -
STM32F103C8T6PWM输出呼吸灯
2018-06-19 17:38:48呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。 -
stm32f103pwm实现呼吸灯(寄存器)
2019-09-22 17:19:58stm32f103pwm实现呼吸灯(寄存器) 一、pwm_init()代码 void pwm_init() { //1.配置AFIO 进行端口映射 //使能AFIO RCC->APB2ENR |= 1 << 0; //使能GPIOB RCC时钟 RCC->APB2ENR |= 1 <<...stm32f103pwm实现呼吸灯(寄存器)
一、思路
- 通过 Tim 定时器可以设置多路 PWM 实现呼吸灯,所以我们使能一个 TIM3,因为 TIM3 的通道2(CH2)正好映射到 PB5(LED)
- 然后配置 PB5 为复用推挽输出,50MHZ
- pwm通过定时器 TIM3 的计数器 CNT 从 0 到 ARR(ARR可以设置为0-65535) 进行周期的自增或自减, CNT 每自增或自减一次与 CCR2 比较一次,CCR2的值由我们自己设置,一般通过 while 循环按照我们希望的时间 比如1s增加1
如果在PWM模式1下 CNT向上计数时 CNT < CCR2 则将 PB5设为高电平
如果在PWM模式2下 CNT向上计数时 CNT < CCR2 则将 PB5设为低电平
通过 占空比 = 高电平时间 / 总时间 的变化实现呼吸灯效果
二、pwm_init()代码
void pwm_init() { //1.配置AFIO 进行端口映射 //使能AFIO RCC->APB2ENR |= 1 << 0; //使能GPIOB RCC时钟 RCC->APB2ENR |= 1 << 3; //使能TIM3 RCC->APB1ENR |= 1 << 1; //把TIM3部分映射到GPIOB5 AFIO->MAPR |= 1 << 11; AFIO->MAPR &= ~(1 << 10); //2.配置GPIOB5端口 //设置GPIOB5为 复用推挽输出 即 [23:22] = CNF[1:0] GPIOB->CRL |= 1 << 23; GPIOB->CRL &= ~(1 << 22); //设置GPIOB5为 输出模式 速度50MHZ 即 [21:20] = MODE[1:1] GPIOB->CRL |= 1 << 21; GPIOB->CRL |= 1 << 20; //LED-OFF GPIOB->ODR |= 1 << 5; //3.配置TIM3 //PSC为定时器的分频器 TIM3->PSC = 0; //ARR为定时器计数上限 设置自动重装载值 TIM3->ARR = 5000; //TIM3->CH2 设置PWM模式1 TIM3->CCMR1 |= 6 << 12; //TIM3->CH2 预装载使能 TIM3->CCMR1 |= 1 << 11; //TIM3->CH2 输出使能 TIM3->CCER |= 1 << 4; //使能 ARPE ARR寄存器的值被装入缓冲器。 TIM3->CR1 |= 1 << 7; //使能计数器 TIM3->CR1 |= 1 << 0; //通过while循环设置TIM3->CCR2的值 int nFlag = 1; int nPwmValue = 0; while (1) { //通过for循环设置每次变化时间 for (volatile int i = 0; i < 100; i++) {} //通过设置 nFlag 的设置自增或自减 if (nFlag) { nPwmValue++; } else { nPwmValue--; } //设置周期最大值 if (nPwmValue >= 5000) { nFlag = 0; } //设置周期最小值 if (nPwmValue <= 0) { nFlag = 1; } //设置 CCR2 的值 TIM3->CCR2 = nPwmValue; } }
三、 分步讲解
1.配置AFIO 进行端口映射 (部分芯片可能不支持 可采用跳线方式实现)
//使能AFIO RCC->APB2ENR |= 1 << 0; //使能GPIOB RCC时钟 RCC->APB2ENR |= 1 << 3; //使能TIM3 RCC->APB1ENR |= 1 << 1; //把TIM3部分映射到GPIOB5 AFIO->MAPR |= 1 << 11; AFIO->MAPR &= ~(1 << 10);
2.配置GPIOB5端口
//设置GPIOB5为 复用推挽输出 即 [23:22] = CNF[1:0] GPIOB->CRL |= 1 << 23; GPIOB->CRL &= ~(1 << 22); //设置GPIOB5为 输出模式 速度50MHZ 即 [21:20] = MODE[1:1] GPIOB->CRL |= 1 << 21; GPIOB->CRL |= 1 << 20; //LED-OFF GPIOB->ODR |= 1 << 5;
3.配置TIM3
//PSC为定时器的分频器 TIM3->PSC = 0; //ARR为定时器计数上限 设置自动重装载值 TIM3->ARR = 5000; //TIM3->CH2 设置PWM模式1 TIM3->CCMR1 |= 6 << 12; //TIM3->CH2 预装载使能 TIM3->CCMR1 |= 1 << 11; //TIM3->CH2 输出使能 TIM3->CCER |= 1 << 4; //使能 ARPE ARR寄存器的值被装入缓冲器。 TIM3->CR1 |= 1 << 7; //使能计数器 TIM3->CR1 |= 1 << 0; //通过while循环设置TIM3->CCR2的值 int nFlag = 1; int nPwmValue = 0; while (1) { //通过for循环设置每次变化时间 for (volatile int i = 0; i < 100; i++) {} //通过设置 nFlag 的设置自增或自减 if (nFlag) { nPwmValue++; } else { nPwmValue--; } //设置周期最大值 if (nPwmValue >= 5000) { nFlag = 0; } //设置周期最小值 if (nPwmValue <= 0) { nFlag = 1; } //设置 CCR2 的值 TIM3->CCR2 = nPwmValue; }
-
stm32f103pwm寄存器呼吸灯,在开发板上灯无变化,不知道哪出问题了
2020-04-12 13:35:58、、、pwm函数、、、 void TIM3_CH1_PWM_Init(u16 arr,u16 psc) { RCC->APB1ENR |= 1;//使能tim3时钟 RCC->APB2ENR |= 1;//映射使能 RCC->APB2ENR |= 1;//c端口使能 AFIO->MAPR &=0XFFFF3FF;//清除映射端口 ... -
STM32F103_WS2812B灯带pwm+dma方式驱动控制程序软件源码.zip
2022-04-23 06:31:18STM32F103_WS2812B灯带pwm+dma方式驱动控制程序软件源码 #include "sys.h" #include "delay.h" #include "usart.h" #include "ws2812b.h" #define mode 1 //mode = 1为呼吸灯 mode = 2为流水灯 int main(void) {... -
stm32f103呼吸灯(PWM脉冲宽度调制)
2020-12-30 11:45:25stm32f103呼吸灯(PWM脉冲宽度调制)一、PWM脉冲宽度调制二、硬件说明三、编程实现1、硬件相关宏定义2、GPIO初始化3、定义 PWM表4、定时器 PWM配置5、定时器中断服务函数6、计算拟合周期四、呼吸灯演示1、PWM输出... -
STM32F103利用定时器生成PWM实现呼吸灯代码解析(实测可用)
2021-09-05 19:14:26#include "stm32f10x.h" #include "math.h" #include "stdio.h" u8 counter=0; int pwm=100; int flag=0; int mode =0; int velocity =0; int turning=1; //主要函数功能 void RCC_Configuration(void); //时钟... -
STM32F103RC的PWM呼吸灯实验
2021-07-05 01:11:43由于之前做过Nucleo-F429ZI的呼吸灯实验,所以就想当然地把那个实验的数据搬了过来。把PWM定时器和更改电平值定时器的prescaler都设置成了71,ARR也都设置成了9999。 将代码编译下载后,发现LED灯在闪烁中变换亮度... -
11-PWM呼吸灯实验_亲测可用_STM32的定时器3的PWM呼吸灯_
2021-09-30 01:16:00STM32单片机通过定时器3定时,控制PWM亮度慢慢降低或亮度慢慢升高,即呼吸灯,亲测程序可用。 -
STM32F103C8T6最小系统板的呼吸灯程序
2021-10-23 11:33:44即板是LED灯的亮灭实验程序,呼吸灯就是LED灯从亮慢慢变暗,再从暗慢慢变亮,不要以为控制电压大小就行,STM32F103C8T6最小系统板没法控制电压渐渐变大变小,但是我们可以通过PWM的占空比来实现呼吸灯,程序用keil5... -
STM32F103ZET控制WS2811/SM16703P驱动RGB全彩LED呼吸灯。
2018-08-29 10:09:57STM32F103ZET控制WS2811/SM16703P驱动RGB全彩LED呼吸灯。本人已用示波器确定好归零码时序,可直接使用。 -
STM32F103入门 | 12.PWM实现呼吸灯
2019-05-01 08:45:52重要补充:由于STM32F103入门这个系列的教程都是基于6.工程模板的建立里面的那个工程模板进行编程的,所以,在6.工程模板的建立的第 (11) 那里,LIB 需要添加<src>文件夹中所有的 .c 文件。(不然的话,从9.... -
22 PA1 PWM输出呼吸灯_STM32F103_STM32F103C8T6,PWM_PWM呼吸灯_c8t6time1输出PW
2021-09-11 14:03:10基于STM32F103C8T6通过PWM波输出控制呼吸灯 -
test_呼吸灯_softtnd_pwm_呼吸灯_PWM呼吸灯_STM32F103_
2021-09-30 09:44:23参考正点原子的代码,通过stm32 PWM实现呼吸灯的例程 -
STM32F103ZET6点亮呼吸灯工程(PWM)
2021-10-21 22:00:38PWM与LED呼吸灯有啥关系? 我们学过物理的同学应该知道,我们的占空比越大,做的功就越大,所以LED灯就越亮,反之,一样的原理。就像我们学过的物理一样(W=UIt),所以我们调节占空比就能灯的亮度。 二、代码编写 -
STM32 pwm控制呼吸灯代码
2018-11-17 15:55:28STM32 pwm控制呼吸灯代码,编写呼吸灯闪烁的主程序代码 -
STM32_PWM 呼吸灯 MDK 源代码
2013-03-16 11:27:59STM32_PWM 呼吸灯 利用PWM功能使LED灯呼吸效果,非常漂亮. -
STM32F103VET6呼吸灯之寄存器操作PWM
2020-07-20 09:07:31本程序是基于stm32f103vet6单片机驱动led灯,使用pwm达到呼吸效果 PA2 TIM2 CH1 PWM PWM:Pulse Width Modulation 脉冲宽度调剂,是一种对模拟信号电平进行数字编码的方法。 随着电子技术的发展,出现了多种脉冲... -
基于STM32单片机设计的PWM的呼吸灯控制KEIL工程源代码.zip
2022-04-21 08:54:33基于STM32单片机设计的PWM的呼吸灯控制KEIL工程源代码,PWM信号是一种脉宽调制信号,广范用于LED和电机控制等场合。PWM信号其实类似于方波,只有0和1两种状态。PWM信号可以调节占空比。不同占空比可以使LED产生不同... -
STM32F103VET6实现呼吸灯
2021-11-23 15:33:58STM32F103VET6开发板实现呼吸灯 文章目录STM32F103VET6开发板实现呼吸灯前言一、相关知识介绍1.呼吸灯简介2. 硬件简介二、实现呼吸灯1.单色呼吸灯2.初始化GPIO3.定义 PWM表4.定时器 PWM配置5.定时器中断服务函数6....