找回密码
 立即注册
查看: 479|回复: 8

STC8H8K64U,PWM有144MHz PLL时钟支持吗?有PWM硬件移相吗

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-05-01 08:33:11

1

主题

4

回帖

453

积分

中级会员

积分
453
发表于 2024-5-27 11:21:56 | 显示全部楼层 |阅读模式
STC8H8K64U / STC8H8K32U   PWMA支持144MHz PLL时钟吗?
回复

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-5-27 11:24:25 | 显示全部楼层
不支持
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-5-27 11:25:24 | 显示全部楼层
截图202405271125198410.jpg
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-5-27 11:26:35 | 显示全部楼层
截图202405271125424375.jpg
这个PLL支持PWM的单片机的时钟树
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-5-27 11:27:10 | 显示全部楼层
截图202405271126555590.jpg
支持的单片机也就这些
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2024-5-27 13:04:34 | 显示全部楼层
早期产品没加 比 CPU主频高很多的 PLL-144MHz时钟支持 PWM
===后续全加
截图202405271304038356.jpg
截图202405271304297889.jpg
截图202405271305266410.jpg

早期产品没加 PWM硬件移相来支持 高级16位PWM
===后续全加
截图202405271303137456.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-05-01 08:33:11

1

主题

4

回帖

453

积分

中级会员

积分
453
发表于 2024-5-28 11:16:10 | 显示全部楼层
手头正好有屠龙刀板子,2023/3/10版的,去年用了做CAN总线调试的,上面芯片为STC32G12K128,手册说支持PWM高速模式,用PLL 144MHz时钟源
按手册上例程:
//测试工作频率为 12MHz
//#include "stc8h.h"
#include "stc32g.h" //头文件见下载软件
#include "intrins.h"


#define FOSC 12000000UL
#define HSCK_MCLK 0
#define HSCK_PLL 1
#define HSCK_SEL HSCK_PLL
#define PLL_96M 0
#define PLL_144M 1
#define PLL_SEL PLL_144M
#define CKMS 0x80
#define HSIOCK 0x40
#define MCK2SEL_MSK 0x0c
#define MCK2SEL_SEL1 0x00
#define MCK2SEL_PLL 0x04
#define MCK2SEL_PLLD2 0x08
#define MCK2SEL_IRC48 0x0c
#define MCKSEL_MSK 0x03
#define MCKSEL_HIRC 0x00
#define MCKSEL_XOSC 0x01
#define MCKSEL_X32K 0x02
#define MCKSEL_IRC32K 0x03
#define ENCKM 0x80
#define PCKI_MSK 0x60
#define PCKI_D1 0x00
#define PCKI_D2 0x20
#define PCKI_D4 0x40
#define PCKI_D8 0x60

void delay()
{
        int i;
        for (i=0; i<100; i++);
}
char ReadPWMA(char addr)
{
        char dat;
        while (HSPWMA_ADR & 0x80);//等待前一个异步读写完成
        HSPWMA_ADR = addr | 0x80; //设置间接访问地址,只需要设置原 XFR 地址的低 7 位,HSPWMA_ADR 寄存器的最高位写 1,表示读数据
        while (HSPWMA_ADR & 0x80); //等待当前异步读取完成
dat = HSPWMA_DAT; //读取异步数据
        return dat;
}

void WritePWMA(char addr, char dat)
        {
                while (HSPWMA_ADR & 0x80); //等待前一个异步读写完成
                HSPWMA_DAT = dat; //准备需要写入的数据
                HSPWMA_ADR = addr & 0x7f; //设置间接访问地址,只需要设置原 XFR 地址的低 7 位//HSPWMA_ADR 寄存器的最高位写 0,表示写数据
                }
void main()
{
        EAXFR = 1; //使能访问
        CKCON = 0x00;//设置外部数据总线速度为最快
        WTST = 0x00;
        //选择 PLL 输出时钟
        #if (PLL_SEL == PLL_96M)
        CLKSEL &= ~CKMS; //选择 PLL 的 96M 作为 PLL 的输出时钟
        #elif (PLL_SEL == PLL_144M)
        CLKSEL |= CKMS; //选择 PLL 的 144M 作为 PLL 的输出时钟
        #else
        CLKSEL &= ~CKMS; //默认选择 PLL 的 96M 作为 PLL 的输出时钟
        #endif
        //选择 PLL 输入时钟分频,保证输入时钟为12M
        USBCLK &= ~PCKI_MSK;
        #if (FOSC == 12000000UL)
        USBCLK |= PCKI_D1; //PLL 输入时钟 1 分频
        #elif (FOSC == 24000000UL)
        USBCLK |= PCKI_D2; //PLL 输入时钟 2 分频
        #elif (FOSC == 48000000UL)
        USBCLK |= PCKI_D4; //PLL 输入时钟 4 分频
        #elif (FOSC == 96000000UL)
        USBCLK |= PCKI_D8; //PLL 输入时钟 8 分频
        #else
        USBCLK |= PCKI_D1; //默认 PLL 输入时钟 1 分频
        #endif
        //启动
        USBCLK |= ENCKM; //使能 PLL 倍频
        delay(); //等待 PLL 锁频
        //选择 HSPWM/HSSPI 时钟
        #if (HSCK_SEL == HSCK_MCLK)
        CLKSEL &= ~HSIOCK; //HSPWM/HSSPI 选择主时钟为时钟源
        #elif (HSCK_SEL == HSCK_PLL)
        CLKSEL |= HSIOCK; //HSPWM/HSSPI 选择 PLL 输出时钟为时钟源
        #else
        CLKSEL &= ~HSIOCK; //默认 HSPWM/HSSPI 选择主时钟为时钟源
        #endif
        HSCLKDIV = 0; //HSPWM/HSSPI 时钟源不分频
        HSPWMA_CFG = 0x03; //使能 PWMA 相关寄存器异步访问功能

        //通过异步方式设置 PWMA 的相关寄存器
        WritePWMA((char)&PWMA_CCER1, 0x00);
        WritePWMA((char)&PWMA_CCMR1, 0x00); //CC1 为输出模式
        WritePWMA((char)&PWMA_CCMR1, 0x60); //OC1REF 输出 PWM1(CNT<CCR 时输出有效电平 1)
        WritePWMA((char)&PWMA_CCER1, 0x05); //使能 CC1/CC1N 上的输出功能
        WritePWMA((char)&PWMA_ENO, 0x03); //使能 PWM 信号输出到端口 使能PWM1P PWM1N
        WritePWMA((char)&PWMA_BKR, 0x80); //使能主输出
        WritePWMA((char)&PWMA_CCR1H, 2048 >> 8); //设置输出 PWM 的占空比
        WritePWMA((char)&PWMA_CCR1L, 2048);
//        WritePWMA((char)&PWMA_ARRH, 1000 >> 8); //设置输出 PWM 的周期
//        WritePWMA((char)&PWMA_ARRL, 1000);
        WritePWMA((char)&PWMA_ARRH, 4096 >> 8); //设置输出 PWM 的周期
        WritePWMA((char)&PWMA_ARRL, 4096);
//        WritePWMA((char)&PWMA_DTR, 10); //设置互补对称输出 PWM 的死区
        WritePWMA((char)&PWMA_DTR, 5); //设置互补对称输出 PWM 的死区
        WritePWMA((char)&PWMA_CR1, 0x01); //开始 PWM 计数
        P2M0 = 0;
        P2M1 = 0;
        P3M0 = 0;
        P3M1 = 0;
        P2 = ReadPWMA((char)&PWMA_ARRH); //异步方式读取寄存器
        P3 = ReadPWMA((char)&PWMA_ARRL);
        while (1);
}

下载后测试PWM周期为:46.48kHz左右,上面程序设置的周期为4096. 换算计数时钟:4096*46.48k=190.38208MHz. 不是144MHz。
并且下程序,设置不同的时钟频率,示波器测试PWM周期不变。
不知道是啥情况。

点评

STC32系列全部有 144MHz时钟支持PWM [attachimg]45508[/attachimg] [attachimg]45509[/attachimg]  详情 回复 发表于 2024-5-28 11:37
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-05-01 08:33:11

1

主题

4

回帖

453

积分

中级会员

积分
453
发表于 2024-5-28 11:17:15 | 显示全部楼层
神*** 发表于 2024-5-27 13:04
早期产品没加 比 CPU主频高很多的 PLL-144MHz时钟支持 PWM
===后续全加

感谢回复!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2024-5-28 11:37:08 | 显示全部楼层
zhan*** 发表于 2024-5-28 11:16
手头正好有屠龙刀板子,2023/3/10版的,去年用了做CAN总线调试的,上面芯片为STC32G12K128,手册说支持PWM高 ...

STC32系列全部有 144MHz时钟支持PWM
截图202405281135572185.jpg

截图202405281137052972.jpg

截图202405281137558681.jpg

截图202405281138511623.jpg


截图202405281139361194.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:04 , Processed in 0.165302 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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