发新帖本帖赏金 1.00元(功能说明)我要提问
12
返回列表
打印
[技术讨论]

为什么STC8H系列时钟输出频率不对?

[复制链接]
楼主: henangongda123
手机看帖
扫描二维码
随时随地手机跟帖
21
henangongda123|  楼主 | 2022-11-6 14:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
上面是8G1K08A芯片,无论写不写CLKDIV寄存器,T0定时1ms都不对,大约是760us,一直存在这个0.76魔鬼般的比例系数!!!!!!包括硬件PWM输出也是,设置的500Hz,实际输出大约650Hz,比例系数是500/0.76左右!AD转换结果也是,草,都没法调试了。。。

使用特权

评论回复
22
henangongda123|  楼主 | 2022-11-6 16:43 | 只看该作者
测试记录了一些数据,感觉好奇怪!

使用特权

评论回复
23
henangongda123|  楼主 | 2022-11-6 16:47 | 只看该作者
也是醉了,只有CLKDIV=0x03、IRC=30MHz的时候,主频是对的,硬件PWM输出频率(周期2ms)、T0定时时间(1ms)都对了(不完全对,非常接近,示波器观察的),这是什么奇葩操作啊

使用特权

评论回复
24
coody| | 2022-11-7 11:19 | 只看该作者
henangongda123 发表于 2022-11-6 11:51
仔细又看了一下手册,感觉STC的手册关于这部分描述的也是有点矛盾,一方面强调有4个寄存器程序不能随意修改 ...

STC的手册关于这部分描述并不矛盾。
一方面强调有4个寄存器程序不能随意修改,是因为你下载选择的频率,内部会处理好。

另一方面给出的示例确实有可以修改CLKDIV寄存器,那是你确定要执行修改频率,就像你的操作,一旦修改,就不是下载时的频率了。

使用特权

评论回复
25
lyjian| | 2022-11-7 12:42 | 只看该作者
henangongda123 发表于 2022-11-6 16:43
测试记录了一些数据,感觉好奇怪!

这种问题不用怀疑芯片,找自己软件问题

使用特权

评论回复
26
henangongda123|  楼主 | 2022-11-7 13:08 | 只看该作者
lyjian 发表于 2022-11-7 12:42
这种问题不用怀疑芯片,找自己软件问题

有说是ISP下载软件问题,换了版本 也不行 我软件有啥怀疑的??就一个官方例程定时1ms,示波器显示就是800us!

使用特权

评论回复
27
kissdb| | 2023-3-8 10:00 | 只看该作者
本帖最后由 kissdb 于 2023-3-8 10:05 编辑

stc的时钟我一直都是用的内部震荡,没出现这种问题,特意找了8H3K来测试一下
MAIN_Fosc 是11059200,串口波特率是9600,Time 1 1mS进中断一次,1000次为1s,1s发送一次串口数据.
void main()
{
    Timer1_init(MAIN_Fosc / 1000);
    UART1_config(MAIN_Fosc, Baudrate, 2, interrupt_enable);   
    EA = 1;
    while (1)
    {
        if (Flag_Sec == 1)
        {
            Flag_Sec = 0;      
            Uart1Send(0x12);   
        }

void Time1_isr() interrupt 3
{
    ++interrupt_cnt;
    if (interrupt_cnt >= 1000)
    {
        interrupt_cnt = 0;
        Flag_Sec = 1;
    }   
}
试了100秒,应该用947减865相差82ms,与下载时的频率调节误差0.087%相差很小,没什么问题

1678240741786.png (29.57 KB )

1678240741786.png

1678240581620.png (26.35 KB )

1678240581620.png

1678240559897.png (32.6 KB )

1678240559897.png

使用特权

评论回复
28
kissdb| | 2023-3-10 09:02 | 只看该作者
今天又试了一下PWM输出,时钟频率设为24MHZ,使用的通道PWM5_3,PWMB_ARR设置为500,需要输出频率为1kHz,根据频率计算公式,PWMB_PSCR应该是46.9,设置为47,下载后输出波形确实是1kHz,


void Init_PWM5()
{
    P_SW2 |= 0x80;
    PWMB_CCER1 &= 0xF0; // 写CCMRx前必须先清零CCERx关闭通道
    PWMB_CCMR1 = 0x60;  // 设置CC5为PWMA输出模式
    PWMB_CCER1 |= 0x01; // 使能CC5通道
    PWMB_PS |= 0x02;    // 端口切换PWM5_3,P0.0
    PWMB_ENO |= 0X01;   // 使能PWM5端口输出
   // PWMB_ENO &= ~0X01; // 禁止PWM5端口输出
    PWMB_PSCR = 47;    // 时钟分频
    PWMB_ARR = 500;    // 设置周期时间
    PWMB_CCR5 = 100;   // 设置占空比时间
    PWMB_BKR = 0x80;   // 使能主输出
    PWMB_CR1 = 0x01;   // 开始计时
}







使用特权

评论回复
29
William1994| | 2023-3-11 07:37 | 只看该作者
是不是你下载器上用来校准频率的串口芯片坏了?
你换个下载器就好了。

使用特权

评论回复
30
天意无罪| | 2023-3-11 10:07 | 只看该作者
楼主这现象确实奇葩,在哪里买的片子?会不会买的芯片有问题啊?

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则