仪器社区

关于STM8定时器4的问题,无论怎么设置初值,计时器好像没有什么反应。

懿_Kindred 2013-10-30
定时器初始化程序 void TIMER_Init(void) { //系统定时器初始化 TIM4_IER = 0x00; //禁止中断 TIM4_PSCR = 0x01; //计数时钟=主时钟的2分频,即1MHZ TIM4_ARR = 0x9C; //自动重装值156,约每100微秒产生一次中断 TIM4_CNTR = 0x9C... 定时器初始化程序 void TIMER_Init(void) { //系统定时器初始化 TIM4_IER = 0x00; //禁止中断 TIM4_PSCR = 0x01; //计数时钟=主时钟的2分频,即1MHZ TIM4_ARR = 0x9C; //自动重装值156,约每100微秒产生一次中断 TIM4_CNTR = 0x9C; // TIM4_IER = 0x01; //计数器中断开启 TIM4_EGR = 0x01; //允许产生更新事件 TIM4_CR1 = 0x81; //开启计数器 return; } 定时中断 @far @interrupt void Timer4IRQHandler(void) { TIM4_SR =0x00; //清除更新标志 i++; if(i<10000) return; i=0; PD_ODR = PD_ODR ^ 0x08; //端口设置 return; } 系统时钟使用内部RC振荡器,16M,默认8分频为2M, 请教 大侠,无论我怎么改变TIM4_ARR = 0x9C后面的数字, LED闪烁变化不大,约为亮0.4秒,灭0.4秒 将 if(i<10000) 为 if(i<60000) LED闪烁速度变化相当大,亮约2.6秒,灭约2.6秒 而按手册所讲,为60000时,应该亮6秒,灭6秒。 请问一下,我的问题出在哪, 不动脑筋的复制粘贴党滚远点!
评论
全部评论
我想要个黑金
1、总中断开了吧~~~ enableInterrupts();开总中断(我用的是ST的编译器,不是IAR)
2、TIM4_SR寄存器是否应该是TIM4_SR1

3、把初始化程序这样改一下试试,不用计数器

TIM4_ARR = 0x9c; //定时0.1ms
TIM4->IER = 0x01; //使能溢出中断
TIM4->PSCR= 0x01; //2分频
TIM4->CR1 = 0x01; //enable Timer4
12 0 2017-11-26 0条评论 回复
随便猪册一个
// TIM4测试程序,编译器为IAR,硬件为STM8S003

#include
#include
uint16_t xms;

void t4_init()
{
TIM4_PSCR = 0x03; // 预分频值为8,4uS计数时间
TIM4_ARR = 0xF9; // 自动装载值,4us*(249+1)=1mS更新一次
TIM4_CNTR = 0x00; // 计数器值
TIM4_IER = 0x01; // 允许T4更新中断
TIM4_CR1 = 0x81; // 预装载T4,开计数器
}

void main( void )
{
PD_DDR = 0x08; // PD3设置为输出
PD_CR1 = 0x08; // PD3设置为推挽输出
t4_init(); // TIM4初始化
asm("rim"); // 开总中断
while(1);
}

#pragma vector=25
__interrupt void TIM4_IRQ(void)// T4中断函数,每1mS进入一次
{
TIM4_SR = 0; // 清除中断标志
++xms;
if(xms==1000) // 计数1000mS
{
xms = 0;
PD_ODR_ODR3 = !PD_ODR_ODR3; // 翻转PD3
}
}
20 0 2013-10-31 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论