初级会员

- 积分
- 93
- 金钱
- 93
- 注册时间
- 2016-10-10
- 在线时间
- 20 小时
|
“从定时器的第一个周期没有预分频,也没有ARR+1。后面计时正常”
本来从定时器周期是 T*(ARR+1)*(PSC+1).,但第一个周期却是T*ARR,后面的周期又正常,(T为主定时器周期,ARR与PSC是从定时器的自动装载值和预分频系数)
如以下程序实际结果是 从定时器 第一个周期是20s,后续都为90s 而不是都为90s。求解
#include "timer.h"
#include "sys.h"
#include "led.h"
#include "delay.h"
void tim3_init(u16 arr,u16 psc,u16 a1,u16 p1)
{
RCC->APB1ENR|=3<<1; //使能时钟
TIM3->PSC=psc; //分频 配置
TIM3->ARR=arr; //计数器自动转载值 计数配置
TIM3->CR2=1<<5; //TIM3的更新事件选为触发输入
TIM4->PSC=p1; //分频
TIM4->ARR=a1; //计数器自动转载值
TIM4->SMCR=0X27;//内部触发3,TIM4触发输入
TIM4->DIER|=1<<0; //允许跟新中断
MY_NVIC_Init(2,1,TIM4_IRQn,2);//中断分组配置
TIM3->CR1|=1<<0; //使能定时器3
TIM4->CR1|=1<<0; //使能定时器4
}
void TIM4_IRQHandler(void)
{
if(TIM4->SR&0X0001)//溢出中断
{
PC0=!PC0; //LED0翻转
}
TIM4->SR&=~(1<<0); //清除中断
}
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
int main()
{
Stm32_Clock_Init(9); //时钟配置72M
led_init(); // LED初始化
delay_init(72); //delay初始化
tim3_init(49999,14399,2,2); //定时器3 计数50k,频率5k,周期10s;定时器4 计数3,频率1/30。
while(1)
{
PC2=!PC2; //LED2翻转
delay_ms(1000);
}
}
|
|