基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)

基于stm32的pwm呼吸灯 使用定时器来控制i/o口输出pwm波形,从而驱动led灯出现类似呼吸频率一般的亮灭。
硬件电路图:
我的收获:
这是stm32数据手册上对tim3通用定时器复用功能重映象的描述,假设让pa6作为pwm输出,从图中可以看出pa6对应tim3的通道1,
使能tim3通道1的函数为
tim_oc1init();1
同样的,如果想要使能pa7,它对应的是tim3的通道2,那么使能通道2的函数便是:
tim_oc2init()1
以此类推,需要注意,使能不同相同定时器不同通道的函数是有一点小差别的,防止在程序中调用tim_oc1init()函数来使能tim3通道2这种情况的发生。
注意看这里,假设使用的是tim3的通道1,那么这里就要写成
tim3-》ccr11
类似的如果用tim3定时器的通道2,这里就要相应的改为
tim3-》ccr21
这同样是为了防止本来计划使用的是tim3的通道1,反而在这里自摆乌龙写为了tim-》ccr2的情况,这样的错误一般很隐蔽,不容易查找。
相应的程序已经上传,但是不知道为什么在这里无法显示程序的下载地址,需要下载可以去我的资源里下载。
工程文件为
progect–》rvmdk(uv4)–》iso_stm32
stm32pwm输出实现led灯渐亮渐灭程序: /**说明:
*pa0:key1;pa1:key2;
*pa2:led1;pa3:led2;
*pa9:usart1_tx;pa10:usart1_rx
*/
#include “stm32f10x.h”
#include “stm32f10x_rcc.h”
#include “stm32f10x_gpio.h”
#include “stm32f10x_tim.h”
#include “stm32f10x_pwr.h”
#include “stm32f10x_exti.h”
#include “system_stm32f10x.h”
#include “misc.h”
void rcc_configuration(void);
void gpio_configuration(void);
void tim2_configuration(void);
void delay_ms(u16 time);
int main()
{
u8 led_fx=1;
u16 led_dt=0;
rcc_configuration();
gpio_configuration();
tim2_configuration();
while(1)
{
delay_ms(10);
if(led_fx==1)
{
led_dt++;
}else{
led_dt--;
}
if(led_dt》100) led_fx=0;//可以和初始值一样
if(led_dt==0) led_fx=1;
tim_setcompare3(tim2,led_dt);//通道3没有重影像是pa2对应led1
tim_setcompare4(tim2,led_dt);//通道4没有重影像是pa3对应led2
}
}
void rcc_configuration(void)
{
systeminit();
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa,enable);
rcc_apb1periphclockcmd(rcc_apb1periph_tim2,enable);
//gpio_afiodeinit();和下面相同效果,可以查看源码证明
rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);
}
void gpio_configuration(void)
{
gpio_inittypedef gpio_initstructure;
//gpio_pinremapconfig(gpio_partialremap2_tim2,enable);//端口映射函数
gpio_initstructure.gpio_pin = gpio_pin_2|gpio_pin_3;//gpio_pin_3对应channel3,主函数改为:tim_setcompare3
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_init(gpioa, &gpio_initstructure);
}
void tim2_configuration(void)
{
tim_timebaseinittypedef tim_timebasestructure;
tim_ocinittypedef tim_ocinitstructure;
tim_deinit(tim2);
tim_internalclockconfig(tim2);
//定时器初始化
tim_timebasestructure.tim_period = 100-1;//初始值是100,2mhz=2000khz,2mhz/100=0.02mhz,所有周期t=1/0.02mhz=50us,示波器显示周期应该为50us
tim_timebasestructure.tim_prescaler = 36-1;//36倍分频,72mhz/36=2mhz
tim_timebasestructure.tim_clockdivision = 0;
tim_timebasestructure.tim_countermode = tim_countermode_up;
tim_timebasestructure.tim_repetitioncounter = 0;
tim_timebaseinit(tim2, &tim_timebasestructure);
//pwm初始化
tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm1;
tim_ocinitstructure.tim_outputstate = tim_outputstate_enable;
tim_ocinitstructure.tim_pulse = 50;//占空比值是50,所以占空比是:50/100=50%
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_low;
tim_oc3init(tim2,&tim_ocinitstructure);
tim_ocinitstructure.tim_pulse = 20;
tim_oc4init(tim2,&tim_ocinitstructure);
//tim_oc3preloadconfig(tim2,tim_ocpreload_enable);
//tim_arrpreloadconfig(tim2, enable);
tim_cmd(tim2,enable);
tim_ctrlpwmoutputs(tim2,enable);
}
void delay_ms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000;
while(i--);
}
}

VR自然灾害演练系统的应用,可提升人们应急处置能力
固纬新推PHX-系列可编程开关直流电源
预计微软云计算会成为最大业务, 营收已达到170亿美元
激光填丝焊的妙用(CRT激光焊接示教系统)
SEW-MOVEFIT网络模块故障后如何转变思路替换
基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)
微软XSX主机即将重磅上市
PLC案例卷帘门控制
工研院展示可同时内外翻折触控技术成果
LiFi的介绍以及是否会影响LED照明质量的分析
智能座舱的终极形态将会是什么样?
有叻种草家真会玩!创意快闪活动空降魔都BFC
新一代的Apple Watch将会增加血氧检测功能
南宁多丽电磁炉故障代码
信号差怎么办,如何增强家中的移动通信信号
三星Galaxy Buds Pro曝光:支持ANC 或随S21发布
思科宣布将以6.6亿美元收购加州半导体公司Luxtera
中国联通:云网2.0的阶段需运用四大算网技术
高压电动机无功就地补偿柜是一种直接同高压异步电动机并联
新iPad或将会采用Type-C接口