先配置单片机的时钟,然后配置LED的IO,然后配置定时器完成1秒定时,
可以使用定时器中断,然后在定时器中断内部对变量进行取反操作,具体代码不方便上传。
懂事电子设计 vgz
就是一个周期方波,周期,周期,,方波呀是方波,
比如一个周期1s的pwm,占空比50%,就是500ms高电平,500ms低电平,或是500ms低电平,500ms高电平。
关键字: 周期,占空比。
要去控制的主要就是这两个。
stm32我记得这个属于定时器部分,所以怎么去让stm32产生一个pwm了。
1。要设置这个模块的时钟,当做定时器的时基(什么是时基:我跟单位两个类比,比如最小单位是mm,那这个时基就是1mm)。
2。这个pwm的周期,是多少个时基组成了,比如定时器的计数值计数一次(也就是时基)的时间是1us(一般应该比这个小),那pwm的周期是1ms,那这个计数值就要设置为1000,对吧。
3。这下就可以开始这是占空比,比如我设置成300,那占空比就是30%(前提是先高电平,后面700us是低电平)。
4。启动定时器。
第一部分就是设置时基(time base)
第二部分就是选择定时器模式,设置占空比(就是上面的TIM_Pulse)。
这些设置了还需要你设置pwm输出引脚,相信你已经用stm32点过灯了,设置gpio就简单了!
使用库开发还是特别清晰,直接用寄存器不清晰,相信你的英语比我好,一看就懂。
参考文章
这里7199代表定时器3的计数器从0计数到7199,共计7200个数
这里9999代表定时器计数的频率为72MHz / (9999+1)=7200Hz,即周期为1/7200s
那么共计时7200×(1/7200s) = 1s
time3.h省略NVIC_INIT
time3.c为
main.c为
STM32 定时器是16位的吧 按你的晶振 和分频 最大65536*0.1ms=6.5536s 单个的话怎么整。。达到8s应该也是可以的,不过分频得增加,但是那样就没72的倍数啦 可能有点误差,你这思路很简单啊,开俩个定时器,第一个定时器在初始化的时候就给他使能,即开始计数,在该定时器的中断函数里面把该定时器关了 并对另一个定时器使能,在另一个定时器的中断函数里同样,对第一个定时器使能,并关闭自己,每个定时器的时间根据你要亮灭来调ARR寄存器的值,
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET){
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
LED1=~LED1;
TIM_Cmd(TIM4,DISABLE);
TIM_Cmd(TIM3,ENABLE);
}
}
中断函数大概就这么写,其他的初始化都是直接调库就是了 没必要贴了 主函数里面一开始直接给灯点亮,再吊用俩个初始化就可以了
本文标签:stm32定时器秒闪