你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求教:STM8L151F2,TIM4分频的问题

[复制链接]
广东啊鹏 提问时间:2016-11-15 17:26 /
我使用STM8L151F2,使用16MHz的内部高速时钟HSI,没有分频;然后对TIM4使用了128分频,填充值为125,我本来想它会1ms中断一次,然后再中断程序中每计数500次(0.5秒)切换一下指示灯。
但在开发板上却发现要增加100倍才达到我想要的效果,对照参考手册翻来覆去都实在找不到问题出在那里,请帮忙看看是哪里搞错了,谢谢!

void Init_TIM4(void)
{
    CLK_ICKCR |=0x01;      //打开内部高速时钟HSI(16MHz);
    CLK_SWR =0x01;      //系统时钟源使用内部高速时钟HSI;0x01=HSI,0x02=LSI,0x04=HSE,0x08=LSE其余保留
    CLK_CKDIVR=0x00;    //系统不分频,使之工作在16MHz的频率下(0=1,1=2,2=4,3=8,4=16)


    CLK_PCKENR1 |= 0x04;        //让TIM4链接上系统时钟。

    //定时器TIM4的初始化,首先将TIM4相关的寄存器全部复位
    TIM4_CR1 = 0x00;      //控制寄存器1
    TIM4_CR2 = 0x00;     //控制寄存器2
    TIM4_SMCR = 0x00;   //从模式控制寄存器
    TIM4_IER = 0x00;    //中断使能寄存器
    TIM4_CNTR = 0x00;   //计数寄存器
    TIM4_PSCR = 0x00;    //分频值寄存器
    TIM4_ARR = 0xFF;    //重装填值寄存器,手册上写的复位值是0xFF,
    TIM4_SR1 = 0x00;    //状态寄存器


   //对TIM4进行设置
    TIM4_PSCR = 0x07;   //对系统时钟进行128分频,当前系统使用16MHz,经128分频后得128KHz(8us/触发)
    TIM4_ARR = 125;     //125次触发×8us=1000us=1ms。就是说1ms产生1次中断
    TIM4_EGR = 0x01;    //TG =0,UG =1; 选择中断类型
    TIM4_IER |= 0x01;   //打开中断
    TIM4_CR1 |= 0x01;   //打开定时器;

}
#pragma vector=TIM4_UIF_vector   //TIM4的中断函数
__interrupt void TIM4_UIF(void)
{
  TIM4_count ++;
  // if(TIM4_count >= 500){       //一开始以为会1ms中断一次,500次中断得500ms,但实际效果是指示灯常亮
  if(TIM4_count >= 50000){      //现在改为五万次中断动作1次,才实现0.5秒指示灯动作一次。
    PB_ODR ^=0x02;                 //指示灯的引脚反相,实现开关灯。
    TIM4_count =0;
  }
  TIM4_SR1 = 0x01;       //清除TIM4的中断标志,以防重复进入
}


谢谢!

收藏 1 评论12 发布时间:2016-11-15 17:26

举报

12个回答
广东啊鹏 回答时间:2016-11-15 17:30:45
另外,我现在的TIM4跟USART1会冲突。
现象是这样的:

CLK_PCKENR1 |= 0x04;        //让TIM4链接上系统时钟。我加上这行代码后,TIM4有中断,指示灯能闪,但USART1不工作。

如果我屏蔽这行代码,串口能工作,TIM4就不工作了,指示灯不闪。不知道有没有碰到过这个问题?
peter001 回答时间:2016-11-20 11:07:54
顶一下,
无薪税绵 回答时间:2016-11-21 08:16:27
建议楼主查一下PDF,TIM4和USART1是不是共用了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

z258121131 回答时间:2016-11-21 09:14:52
帮顶                     
哈佛祖安智 回答时间:2016-11-21 09:56:04
sting 回答时间:2016-11-21 10:41:47
自动重装载寄存器(TIMx_ARR)
预分频寄存器 (TIMx_PSCR)
傻傻分不清楚

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xuezhimeng2010 回答时间:2016-11-21 10:46:33
检查下时钟分频,PCLK1和tim用的不是同一个时钟;
对于你的usart,如果你时钟频率不对了,肯定时串口输出乱码或者不输出。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

sabaka 回答时间:2016-11-21 11:10:30
  配置貌似没错,要不你在程序运行起来之后读一次 PSCR 和ARR寄存器的值看看是否正确?
peter001 回答时间:2016-11-21 15:49:44
我今天用f103的tim4,中断进的也不太对
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版