我要发布
仪器网/ 仪器社区/ 计时器/ 关于STM8定时器4的问题,无论怎么设置初值,计时器好像没有...

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

懿_Kindred    2013-10-30    计时器    浏览 397 次

定时器初始化程序 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秒。
请问一下,我的问题出在哪,

不动脑筋的复制粘贴党滚远点!

精彩问答
我想要个黑金 发布日期:2017-11-26
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
全部评论
随便猪册一个 发布日期:2013-10-31
// 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
}
}
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控