#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的外部晶振,这个应该没问题,现在不知道问题错在哪里。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>