定时器预分频系数好像必须要大于定时计数器值才能正常?
时间:10-02
整理:3721RD
点击:
为什么我用基本定时器6发现,时钟预分频值如果小于定时计数器重载值是会出错,感觉像进入中断的时间特别短,中断函数中灯的闪烁完全常亮。
还有,我用的是上电默认的8mhz时钟,但是定时器进中断的时间跟我预料的差好多,求看看哪里问题。
#include<stm32f10x.h>
int main()
{
RCC->APB1ENR|=(1<<4);//开启定时器6时钟
TIM6->CR1|=(1<<7)|(1<<2);//开启预装载,只有计数溢出才产生更新中断/dma请求
TIM6->DIER|=0x01;//使能中断
TIM6->PSC=8000;//预分频系数8000
TIM6->ARR=8000-1;//自动重装载值8000.因内部8mhz,大概进入中断为8s一次
TIM6->CR1|=1;//启动定时器6
NVIC->ISER[1]|=(1<<22);//开nvic的定时器6中断,优先级按默认
RCC->APB2ENR|=(1<<4);
GPIOC->CRL|=0X22222222;
GPIOC->BSRR=0XFF;//初始化led灯的io口
while(1);
}
void TIM6_IRQHandler()
{
static u16 sec=0;
if(sec%2!=0)
{
GPIOC->BRR=0XFF;
}
else
GPIOC->BSRR=0XFF;
sec++;
TIM6->SR=0X00;//清除标志
}
还有,我用的是上电默认的8mhz时钟,但是定时器进中断的时间跟我预料的差好多,求看看哪里问题。
#include<stm32f10x.h>
int main()
{
RCC->APB1ENR|=(1<<4);//开启定时器6时钟
TIM6->CR1|=(1<<7)|(1<<2);//开启预装载,只有计数溢出才产生更新中断/dma请求
TIM6->DIER|=0x01;//使能中断
TIM6->PSC=8000;//预分频系数8000
TIM6->ARR=8000-1;//自动重装载值8000.因内部8mhz,大概进入中断为8s一次
TIM6->CR1|=1;//启动定时器6
NVIC->ISER[1]|=(1<<22);//开nvic的定时器6中断,优先级按默认
RCC->APB2ENR|=(1<<4);
GPIOC->CRL|=0X22222222;
GPIOC->BSRR=0XFF;//初始化led灯的io口
while(1);
}
void TIM6_IRQHandler()
{
static u16 sec=0;
if(sec%2!=0)
{
GPIOC->BRR=0XFF;
}
else
GPIOC->BSRR=0XFF;
sec++;
TIM6->SR=0X00;//清除标志
}
共同研究,正在看stm32
你要确认一下你的系统时钟是8MHZ?你没有使用HSE?如果没有装外部晶振,则系统启动后使用HSI为8MHZ,如果有使用HSE,则系统启动默认72MHZ
