打印
[APM32F1]

【求助】APM32F103CBT6的定时器1配置出的时间跟预想相差很多

[复制链接]
1044|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
秋染半叶红|  楼主 | 2024-4-20 13:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原本想使用定时器1 定时一个溢出时间为1ms的计时
下面是我的定时器1初始化参数
TMR_BaseConfig_T baseConfig;
            /* TMR1 Configure */
    baseConfig.clockDivision = TMR_CLOCK_DIV_1;
    baseConfig.countMode = TMR_COUNTER_MODE_UP;
    baseConfig.division = 8;
    baseConfig.period = 1000;
    TMR_ConfigTimeBase(TMR1, &baseConfig);

在中断函数中选择了一个输出脚进行电平翻转
示波器测量到的频率是 1KHz
反推回去计算:1000 * 1000 * (8 + 1) = 9000000 计算出才为9M的定时器1输入频率
查了一下数据手册和仿真时候的寄存器数值
系统时钟选的是PLL,原理图上接入XTAL-IN 和 XTAL-OUT 引脚的晶振为8MHz,经过9倍倍频之后输入AHB,AHB也没有分频直接给到的APB1 和 APB2。APB1的输入时钟寄存器是2分频,我通过使用与定时器1配置相同的配置去配置定时器2,一样在中断函数中翻转同一个输出脚,示波器测量得到的频率是4KHz,反推计算:4000 * 1000 * (8 + 1) = 36000000 计算为36MHz,符合寄存器设定中的系统时钟72MHz 2分频之后的数值,仿真时查看 RCM_CFG 寄存器中 APB1PSC的值为0x04,APB2PSC的值为0x03,PLLMULCFG的值为0x07,我尝试过将APB2PSC的值修改为0x04但是输出和0x03相同,只有改为0x05时输出频率会再次减少一半从1KHz变为500Hz,现在找不出是什么原因导致定时器1的时钟不是所设定的72M
球球了,帮帮孩子把

使用特权

评论回复
沙发
zhouyu1528| | 2024-4-21 23:22 | 只看该作者
    检查时钟配置:首先,请确保系统时钟配置正确。您已经查看了寄存器的值,但还需要确认PLL配置、AHB、APB1和APB2的分频比例是否正确。

    查看PLL配置:检查PLL的配置,包括输入时钟频率、倍频因子和分频因子。确保这些参数正确设置以得到期望的系统时钟频率。

    确认定时器时钟源:定时器的时钟源通常来自APB1或APB2时钟。确保定时器1的时钟源配置正确,即使您已经在APB1上设置了2分频。

    检查时钟稳定性:尽管您已经检查了晶振和PLL的配置,但还需要确保时钟稳定性。偶尔晶振可能会不稳定或者存在其他干扰源。

    寄存器配置验证:确保您的寄存器配置在代码中正确。有时候,由于寄存器设置的顺序或者其他因素,可能会导致配置未能按照预期生效。

    使用调试工具:如果可能的话,使用调试工具来观察时钟信号和寄存器的实际配置情况,以帮助进一步诊断问题。

使用特权

评论回复
板凳
极海代理| | 2024-4-22 16:23 | 只看该作者
我这边是极海的FAE,方便加个微信吗15821666760

使用特权

评论回复
地板
秋染半叶红|  楼主 | 2024-4-23 11:49 | 只看该作者
zhouyu1528 发表于 2024-4-21 23:22
检查时钟配置:首先,请确保系统时钟配置正确。您已经查看了寄存器的值,但还需要确认PLL配置、AHB、AP ...

我查看过系统初始化的函数,配置的72M,时钟选择是PLL,倍频9倍,原理图上的外部时钟输入是8M,RCM寄存器里面的值也在仿真时确认过都是正确的,但就是这个定时器1的输入频率不对

使用特权

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

本版积分规则

2

主题

3

帖子

0

粉丝