STM32
登录
直播中
建立建利12
8年用户
1371经验值
擅长:可编程逻辑 嵌入式技术
私信
关注
[问答]
如何去编写基于stm32f103vet6单片机驱动led灯的程序呢
开启该帖子的消息推送
STM32F103VET6
单片机
如何去编写基于
STM32
f103vet6
单片机
驱动led灯的程序呢?
如何使用pwm去完成led灯的呼吸效果呢?
回帖
(1)
张涛
2021-11-15 10:56:49
1. 简介
本程序是基于stm32f103vet6单片机驱动led灯,使用pwm达到呼吸效果
1.1 选用引脚
[tr]PA2TIM2 CH1[/tr]1.2 灯泡
用的是野火的指南者STM32F103VET6,这个灯泡引脚是PB5,笔者将PB5与PA2接通(PB5对应的是TIM3,CH2,笔者一开始没有配置成功PB5的PWM,后来用PA2测试的,PB5需要把AFIO的部分映像功能打开就可以了 AFIO-》MAPR = AFIO_MAPR_TIM3_REMAP_1; //部分映像)
2. PWM
PWM:Pulse Width Modulation 脉冲宽度调剂,是一种对模拟信号电平进行数字编码的方法。
随着电子技术的发展,出现了多种脉冲宽度调制(Pulse width modulation,PWM)技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V,5V}这一集合中取值。
模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟威廉希尔官方网站 的输出与输入成线性比例。
尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟威廉希尔官方网站 容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟威廉希尔官方网站 可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟威廉希尔官方网站 还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟威廉希尔官方网站 还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。
通过以数字方式控制模拟威廉希尔官方网站 ,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。
3. 配置PWM
说白了就是把频率配置好然后不断改变CCR3的值,就是在改变占空比。
3.1 用到的寄存器
3.2 配置PWM
这里我配置的是pwm 模式1:如果是向上计数,当TIMX_CNT《TIMX_CCRX时通道X为有效电平,否则为无效电平。
模式一:如下图所示将OCxM设置为6.
配置的向上计数:如下图为低电平就是向上计数
启动相应的预装载寄存器:将OCxPE置一
事件产生寄存器:将UG位置1
使能捕获/比较寄存器:CCERx置1(太重要了!!!)
4 相应代码
4.1 初始化引脚
初始化 打开GPIOA PA2和TIM2。
int main(void)
{
RCC-》APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOA-》CRL |= (GPIOA-》CRL & 0XFFFFF0FF) | 0XB00;
TIM2_Configuration();
while(1)
{
int i;
for(i = 0; i 《 60; i++)
{
delay_ms(10);
TIM2-》CCR3 = i*5;
}
for(i = 60; i》 0; i--)
{
delay_ms(10);
TIM2-》CCR3 = i*5;
}
}
return 0;
)
4.2 配置代码
pwm配置
void TIM2_Configuration( void)
{
RCC-》APB1ENR |= RCC_APB1ENR_TIM2EN; //使能
TIM2-》ARR = 250;//最大计数值
TIM2-》PSC = 999;//
TIM2-》CR1 &=~TIM_CR1_DIR;
TIM2-》CCMR2 |= TIM_CCMR2_OC3M_1|TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3PE ;
TIM2-》CR1 |= TIM_CR1_ARPE;
TIM2-》CCR3 = 50;
TIM2-》CCER |= TIM_CCER_CC3P |TIM_CCER_CC3E ;
TIM2-》EGR |= TIM_EGR_UG;
TIM2-》RCR = 1;
TIM2-》CR1 = TIM_CR1_CEN;
TIM2-》BDTR |= TIM_BDTR_MOE;
}
5. 结果
测试PA2的电压,会发现电压在变化,但其实电压是不会变化的,变化的原因是一会高电平一会低电平,在我们看来电压是变化的,所以led灯泡给我的感觉是在呼吸,如果用示波器测量,电压值就是稳定的。
1. 简介
本程序是基于stm32f103vet6单片机驱动led灯,使用pwm达到呼吸效果
1.1 选用引脚
[tr]PA2TIM2 CH1[/tr]1.2 灯泡
用的是野火的指南者STM32F103VET6,这个灯泡引脚是PB5,笔者将PB5与PA2接通(PB5对应的是TIM3,CH2,笔者一开始没有配置成功PB5的PWM,后来用PA2测试的,PB5需要把AFIO的部分映像功能打开就可以了 AFIO-》MAPR = AFIO_MAPR_TIM3_REMAP_1; //部分映像)
2. PWM
PWM:Pulse Width Modulation 脉冲宽度调剂,是一种对模拟信号电平进行数字编码的方法。
随着电子技术的发展,出现了多种脉冲宽度调制(Pulse width modulation,PWM)技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V,5V}这一集合中取值。
模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟威廉希尔官方网站 的输出与输入成线性比例。
尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟威廉希尔官方网站 容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟威廉希尔官方网站 可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟威廉希尔官方网站 还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟威廉希尔官方网站 还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。
通过以数字方式控制模拟威廉希尔官方网站 ,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。
3. 配置PWM
说白了就是把频率配置好然后不断改变CCR3的值,就是在改变占空比。
3.1 用到的寄存器
3.2 配置PWM
这里我配置的是pwm 模式1:如果是向上计数,当TIMX_CNT《TIMX_CCRX时通道X为有效电平,否则为无效电平。
模式一:如下图所示将OCxM设置为6.
配置的向上计数:如下图为低电平就是向上计数
启动相应的预装载寄存器:将OCxPE置一
事件产生寄存器:将UG位置1
使能捕获/比较寄存器:CCERx置1(太重要了!!!)
4 相应代码
4.1 初始化引脚
初始化 打开GPIOA PA2和TIM2。
int main(void)
{
RCC-》APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOA-》CRL |= (GPIOA-》CRL & 0XFFFFF0FF) | 0XB00;
TIM2_Configuration();
while(1)
{
int i;
for(i = 0; i 《 60; i++)
{
delay_ms(10);
TIM2-》CCR3 = i*5;
}
for(i = 60; i》 0; i--)
{
delay_ms(10);
TIM2-》CCR3 = i*5;
}
}
return 0;
)
4.2 配置代码
pwm配置
void TIM2_Configuration( void)
{
RCC-》APB1ENR |= RCC_APB1ENR_TIM2EN; //使能
TIM2-》ARR = 250;//最大计数值
TIM2-》PSC = 999;//
TIM2-》CR1 &=~TIM_CR1_DIR;
TIM2-》CCMR2 |= TIM_CCMR2_OC3M_1|TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3PE ;
TIM2-》CR1 |= TIM_CR1_ARPE;
TIM2-》CCR3 = 50;
TIM2-》CCER |= TIM_CCER_CC3P |TIM_CCER_CC3E ;
TIM2-》EGR |= TIM_EGR_UG;
TIM2-》RCR = 1;
TIM2-》CR1 = TIM_CR1_CEN;
TIM2-》BDTR |= TIM_BDTR_MOE;
}
5. 结果
测试PA2的电压,会发现电压在变化,但其实电压是不会变化的,变化的原因是一会高电平一会低电平,在我们看来电压是变化的,所以led灯泡给我的感觉是在呼吸,如果用示波器测量,电压值就是稳定的。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F103VET6
单片机
请问
STM32F103VET6
怎么和LCD
驱动
板连接?
2020-08-14
1728
为什么
STM32F103VET6
单片机
和串口触摸屏无法进行通信
呢
2021-11-09
1600
怎样
去
设计
STM32F103VET6
/
STM32F407VET6
的威廉希尔官方网站 图
呢
2021-10-26
1942
怎样
去
移植一个基于SecureCrt和
stm32f103vet6
的BootLoader工程
呢
2021-12-14
921
STM32F103VET6
芯片是如何
去
定义的
2021-11-09
1888
STM32F103VET6
之怎么
编写
ADC库函数结构体
2021-10-13
836
STM32F103VET6
更换为
STM32F103VGT6
后不能启动
2019-03-25
6979
芯片是
stm32f103vet6
,图片中为什么
程序
进不了中断
呢
?
2014-07-11
4172
STM32F103VET6
2016-12-09
4119
STM32F103VET6
不能启动
2020-03-16
1865
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分