找回密码
 立即注册
查看: 382|回复: 19

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

[复制链接]
已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 10:33:47 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-11-22 12:20 编辑

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

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

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 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
}

重载值很小了,为何定时器间隔还是这么大呢?
截图202411221035009007.jpg
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 10:38:26 | 显示全部楼层
由于24M,或者22.1184M,工作时功耗还是比较高,想用内部32k系统时钟工作,主要目的是想采集外部脉宽。外部脉宽大约500-800us的脉宽。精度有100us也够用。
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 10:42:58 | 显示全部楼层
        TIM_InitStructure.TIM_Value     = 65536UL - 1;//(MAIN_Fosc / 10000);                //中断频率, 1000次/秒
设置成这样也不行,定时器间隔也要达到1.5ms。328HZ   这个定时间隔无法采集到外部500-800us的脉冲间隔。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-11-22 11:14:09 来自手机 | 显示全部楼层
32.768不能作为主时钟吧。这个可以看单片机的时钟部分原理图。

点评

32K可以作为主时钟  发表于 2024-11-22 12:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-11-22 11:14:33 | 显示全部楼层
第一个是内部的32K并不精准,,
第二个是随单片机的供电电压和当前的温度影响,手册里有图,,

以上造成的误差你觉得仍然没问题,那么就可以用,在环境变化很小的情况下,也还行
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 11:16:26 | 显示全部楼层
不是的,我的问题是32k内部时钟,定时器的最小中断间隔,应该是30us多吧,不会是1.5ms  这是我的疑问。不是误差的问题,误差32k-35k这都没问题。
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 11:17:48 | 显示全部楼层
本帖最后由 prxkuqfr 于 2024-11-22 11:19 编辑
so*** 发表于 2024-11-22 11:14
32.768不能作为主时钟吧。这个可以看单片机的时钟部分原理图。

多谢,我去看看。
截图202411221119301115.jpg
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 2024-11-22 11:20:19 | 显示全部楼层
图上看,是可以作为系统时钟的,而且输出到P54口,也可以看到有35k输出,说明内部32k时钟开始工作了。
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

18

回帖

58

积分

注册会员

积分
58
发表于 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));  //等待时钟稳定
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:30 , Processed in 0.154974 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表