打印
[STM8]

STM8S TIM1做1ms定时器

[复制链接]
11159|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 2014-2-6 01:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
时基
TIM1_TimeBaseInit(128, TIM1_COUNTERMODE_UP, 125, 0);//T = (1/16Mhz)*128[分频比]*125 = 1000us

手册里面计数器的时钟频率为:
fCK_CNT=fCK_PSC/(PSCR[15:0]+1)

那岂不是:
TIM1_TimeBaseInit(127, TIM1_COUNTERMODE_UP, 125, 0);
?

但是无论哪种都得不到很准确的1MS延时。以为是2M有问题,换一下网上的16M没问题的

换成TIM1_TimeBaseInit(16, TIM1_COUNTERMODE_UP, 1000, 0);

用数码管显示出来用秒表对比发现上面三种数码管显示的10S计时都不精准。是不是我中断里写错了?

初始化:
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);

中断里:
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
        static uint16_t i,j;  
        if(++i>=1000)
                    {
          i=0;
          GPIO_Write(GPIOD, Display_Yang[j]);
          if(++j>=10)j=0;//数码管显示0-9       
        }
        TIM1_ClearFlag(TIM1_FLAG_UPDATE);
}


问题1:TIM1时钟频率怎么算的?
问题2:CLK_CKDIVR位4:3和位2:0.都要初始化还是?TIM1时钟频率基于HSIDIV还是CPUDIV?
问题3:如上所述,本来想用2M做一个1MS延时,发现都不对。怎么做?
沙发
mmuuss586| | 2014-2-6 07:53 | 只看该作者
看芯片资料

使用特权

评论回复
板凳
mmuuss586| | 2014-2-6 07:55 | 只看该作者
延时1ms改成0.5ms中断,而不是0.5us中断

使用特权

评论回复
地板
qhtflsw|  楼主 | 2014-2-17 08:52 | 只看该作者
stm8s文件夹 中的 TAGS.txt 和TAGS_Filelist.txt能不能删除?这是什么文件,好像一般都没有的。怎么弄出来的

使用特权

评论回复
5
qhtflsw|  楼主 | 2014-2-20 14:04 | 只看该作者
<stdin>:17:0: error: unterminated #ifndef
<stdin>:118:1: error: unterminated comment
类似这样的错误找不到位置,编译不报错0 error(s), 0 warning(s)。但是看起来不舒服,想找出来。感觉也没错。查了一下。是有 #ifndef
,不知道怎么解决

使用特权

评论回复
6
brocket| | 2014-2-20 22:15 | 只看该作者
我也遇到了这样的问题,中断处理程序中代码太多会影响定时,甚至多一行自加语句都不行。

使用特权

评论回复
7
qhtflsw|  楼主 | 2014-3-3 15:34 | 只看该作者
已经通过示波器观察,设置好。时基那里确实不对。还是要看数据手册。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

164

帖子

4

粉丝