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

求教: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版