基本定时器Timer6的问题。。

2019-07-20 09:16发布

#include "stm32f4xx.h"
#include "timer.h"
#include "led.h"


//TIM6/TIM7为基本定时器,时钟源是内部时钟源
//定时器时钟为84M,是递增计数器

/*
函数功能:初始化基本定时器,定时时间为1s
*/
void timer6_init(uint16_t psc,uint16_t arr)
{       
        uint32_t priority = 0;
        RCC->APB1ENR |= 1 << 4; //开启tim6外设时钟
        TIM6->PSC = 8400 - 1; //84M/8400 = 10000 频率  -1是因为寄存器上+1了
        TIM6->ARR = 10000 - 1;  //配置计数器的值  -1是因为公式+1了  不要纠结
       
        //配置控制寄存器
        TIM6->CR1 = 0;   //不缓冲(不使用影子寄存器、循环模式,使能其他一些东西)
        TIM6->CR2 |= (0x4 << 4);        //选择更新事件作为触发TRGO
        TIM6->DIER |= 1 << 0;  //使能更新中断
       
        //设置中断优先级
        NVIC_SetPriorityGrouping(7-2);  //设置优先级分组
        priority = NVIC_EncodePriority(7-2,2,2); //优先级编码
        NVIC_SetPriority(TIM6_DAC_IRQn,priority); //设置优先级编码
        NVIC_EnableIRQ(TIM6_DAC_IRQn);       //使能核心级优先级
       
        TIM6->CR1 |= 1 << 0; //开启计数器计数
}

/*
函数功能:基本定时器tim6的中断服务函数
//这里只做了一部分
*/
void TIM6_DAC_IRQHandler(void)
{       
                LED0 = !LED0;
                TIM6->SR &= ~(0X1 << 0);
                TIM6->CR1 |= 1 << 0; //开启计数器计数
}



上面这部分代码是我想定时1s的,结果示波器变成了3s。。。我不知道哪里错了。。
另外,我没有按照原子的方法修改启动文件那些,查了一下还是8M的外部晶振,这个应该没问题,现在不知道问题错在哪里。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。