prxkuqfr 发表于 2024-11-22 10:33:47

Ai8g1k08 单片机 内部32K 时,定时器最小中断间隔

本帖最后由 DebugLab 于 2024-11-22 12:20 编辑

最近在做低功耗项目
1 .Ai8g1k08 单片机内部32K 时,定时器最小中断间隔328HZ,

意味着中断间隔都有1.5MS多了。
2.在p54端口可以看到35K的输出,但是并不是50%的脉冲

prxkuqfr 发表于 2024-11-22 10:35:42

///************************ 定时器配置 ****************************/
void        Timer_config(u8 e)
{
        TIM_InitTypeDef                TIM_InitStructure;                                                //结构定义
        TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
        TIM_InitStructure.TIM_Priority    = Priority_0;                        //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
        TIM_InitStructure.TIM_Interrupt = ENABLE;                                        //中断是否允许,   ENABLE或DISABLE
        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源,   TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
        TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
        TIM_InitStructure.TIM_Value   = 65536UL - 10;//(MAIN_Fosc / 10000);                //中断频率, 1000次/秒
       
//       TL1= 0xFE;
// TH0= 0xFF;
        TIM_InitStructure.TIM_Run       = e;                                        //是否初始化后启动定时器, ENABLE或DISABLE
        Timer_Inilize(Timer0,&TIM_InitStructure);                                        //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
}

重载值很小了,为何定时器间隔还是这么大呢?

prxkuqfr 发表于 2024-11-22 10:38:26

由于24M,或者22.1184M,工作时功耗还是比较高,想用内部32k系统时钟工作,主要目的是想采集外部脉宽。外部脉宽大约500-800us的脉宽。精度有100us也够用。

prxkuqfr 发表于 2024-11-22 10:42:58

        TIM_InitStructure.TIM_Value   = 65536UL - 1;//(MAIN_Fosc / 10000);                //中断频率, 1000次/秒
设置成这样也不行,定时器间隔也要达到1.5ms。328HZ   这个定时间隔无法采集到外部500-800us的脉冲间隔。

soma 发表于 2024-11-22 11:14:09

32.768不能作为主时钟吧。这个可以看单片机的时钟部分原理图。

_奶咖君_ 发表于 2024-11-22 11:14:33

第一个是内部的32K并不精准,,
第二个是随单片机的供电电压和当前的温度影响,手册里有图,,

以上造成的误差你觉得仍然没问题,那么就可以用,在环境变化很小的情况下,也还行

prxkuqfr 发表于 2024-11-22 11:16:26

不是的,我的问题是32k内部时钟,定时器的最小中断间隔,应该是30us多吧,不会是1.5ms这是我的疑问。不是误差的问题,误差32k-35k这都没问题。

prxkuqfr 发表于 2024-11-22 11:17:48

本帖最后由 prxkuqfr 于 2024-11-22 11:19 编辑

soma 发表于 2024-11-22 11:14
32.768不能作为主时钟吧。这个可以看单片机的时钟部分原理图。
多谢,我去看看。

prxkuqfr 发表于 2024-11-22 11:20:19

图上看,是可以作为系统时钟的,而且输出到P54口,也可以看到有35k输出,说明内部32k时钟开始工作了。

prxkuqfr 发表于 2024-11-22 11:23:46

/*
        内部32K
*/       
       
          MCLKOCR=0x00;// 不分频,不输出到IO口主时钟分频,且输出到IO口       
    P_SW2 = 0x80;       //需要访问特殊寄存器,需要先置1
    IRC32KCR = 0x80;    //启动内部32K IRC
    CLKSEL = 0x03;      //选择内部32K
          CLKDIV = 0x00;            //时钟不分频
    while (!(IRC32KCR & 1));//等待时钟稳定
页: [1] 2
查看完整版本: Ai8g1k08 单片机 内部32K 时,定时器最小中断间隔