#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,115200); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
Timerx_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms
while(1)
{
LED2=!LED2;
delay_ms(200);
}
}
STM32定时器中断改成亮三秒灭八秒
答案:2 悬赏:60 手机版
解决时间 2021-03-03 03:25
- 提问者网友:我一贱你就笑
- 2021-03-02 16:05
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-03-02 17:27
可以发给我看看
再看看别人怎么说的。
再看看别人怎么说的。
全部回答
- 1楼网友:琴狂剑也妄
- 2021-03-02 18:04
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);
}
}
中断函数大概就这么写,其他的初始化都是直接调库就是了 没必要贴了 主函数里面一开始直接给灯点亮,再吊用俩个初始化就可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯