找回密码
 立即注册
查看: 57|回复: 5

请教:用图形化AiCube设置PWM倍频无效

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:922
  • 最近打卡:2026-07-05 12:08:13

127

主题

2082

回帖

4853

积分

论坛元老

积分
4853
发表于 6 天前 | 显示全部楼层 |阅读模式
芯片:STC32G144K246

用图形化AiCube设置PWM倍频,具体如图:
02.jpg

这样设置后的PWM频率应该能达到156MHz的,但实测PWM脉冲依然大约是10us(相当于频率48MHz)
03.jpg

这与默认的主频差不多,默认情况下如图:
01.jpg

不知道问题出在哪里。请高手指点,谢谢!
附部分代码:
倍频下的时钟设置:
  1. ////////////////////////////////////////
  2. // 时钟初始化函数
  3. // 入口参数: 无
  4. // 函数返回: 无
  5. ////////////////////////////////////////
  6. void CLK_Init(void)
  7. {
  8.     CLK_I2S1CLK_Divider(1);             //设置I2S1时钟预分频系数
  9.     CLK_I2S2CLK_Divider(1);             //设置I2S2时钟预分频系数
  10.     CLK_SPI1CLK_Divider(1);             //设置SPI1时钟预分频系数
  11.     CLK_SPI2CLK_Divider(1);             //设置SPI2时钟预分频系数
  12.     CLK_SPI3CLK_Divider(1);             //设置SPI3时钟预分频系数
  13.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  14.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  15.     CLK_PWMCCLK_Divider(1);             //设置PWMC时钟预分频系数
  16.     CLK_PWMDCLK_Divider(1);             //设置PWMD时钟预分频系数
  17.     CLK_PWMECLK_Divider(1);             //设置PWME时钟预分频系数
  18.     CLK_PWMFCLK_Divider(1);             //设置PWMF时钟预分频系数
  19.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  20.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  21.     HIRC_48M();                         //选择内部预置的频率
  22.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  23.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  24.     CLK_HPLL1_BASECLK();                //选择内部基本时钟BASECLK作为HPLL1输入时钟
  25.     CLK_HPLL1_PreDivider(8);            //设置HPLL1的输入时钟预分频系数(分频后的频率必须为6MHz左右)
  26.     CLK_HPLL1_Lock312MHz();             //选择HPLL1的锁频目标频率
  27.     CLK_HPLL1_Enable();                 //启动HPLL1
  28.     delay_ms(1);                        //等待PLL锁频
  29.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  30.     CLK_HSI2SCK_HPLL1D2();              //选择HPLL1的输出2分频时钟作为高速I2S时钟源
  31.     CLK_HSIOCK_HPLL1D2();               //选择HPLL1的输出2分频时钟作为高速外设时钟源
  32.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  33.     // 在此添加用户初始化代码  
  34.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  35. }
复制代码
PWMA初始化代码:

  1. void PWMA_Init(void)
  2. {
  3.     PWMA_C5SwitchP46();                 //设置PWMA通道5数据端口: PWMA5P (P4.6)
  4.     HSPWMA_Disable();                   //关闭高速模式,使用同步方式进行初始化
  5.     PWMA_InternalClockMode();           //选择内部时钟模式
  6.     PWMA_SetClockDivider(0);            //设置16位预分频
  7.     PWMA_SetReload16(999);              //设置16位重载值
  8.     PWMA_BufferARR();                   //使能重载值寄存器预装载功能
  9.     PWMA_SetCounter(0);                 //初始化计数值
  10.     PWMA_CC5PEnable();                  //打开通道
  11.     PWM_UpdateDuty(PWMA_CH5, 500);      //设置通道的PWM占空比
  12.     PWMA_OC5REFPWMMode1();              //设置通道输出参考信号为PWM模式1信号
  13.     PWMA_BufferCCR5();                  //使能CCRn预装载功能
  14.     PWMA_CC5PInverted();                //设置正极通道输出低电平有效
  15.     PWMA_EnablePWM5POutput();           //使能正极通道输出
  16.     PWMA_EnableMainOutput();            //使能PWM主输出
  17.     PWMA_Run();                         //PWMA开始运行
  18.     //<<AICUBE_USER_PWM0_INITIAL_BEGIN>>
  19.     // 在此添加用户初始化代码  
  20.     //<<AICUBE_USER_PWM0_INITIAL_END>>
  21. }
复制代码



回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:137
  • 最近打卡:2026-07-03 10:17:21

39

主题

518

回帖

3253

积分

超级版主

积分
3253
发表于 6 天前 | 显示全部楼层

截图202606291341035138.jpg
截图202606291341307133.jpg
截图202606291341586125.jpg
截图202606291337072134.jpg
电话:0513-55012946 QQ:2195591714  微信:  19952583740
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:922
  • 最近打卡:2026-07-05 12:08:13

127

主题

2082

回帖

4853

积分

论坛元老

积分
4853
发表于 6 天前 | 显示全部楼层

成功了,谢谢!
04.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:922
  • 最近打卡:2026-07-05 12:08:13

127

主题

2082

回帖

4853

积分

论坛元老

积分
4853
发表于 6 天前 | 显示全部楼层
请教一下,PWMA_CR1    |= 0x01;  //使能计数器
然后等待计数完毕是否可以用:while(PWMA_CR1 &0x01); ?
也就是说,PWM计数完毕后PWMA_CR1 BIT0位是否会自动复位?

点评

将程序或程序的链接直接放到 【AI助手】中问 [attachimg]142476[/attachimg]  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:299
  • 最近打卡:2026-07-04 00:01:55
已绑定手机

66

主题

808

回帖

3037

积分

论坛元老

DIY玩家

积分
3037
发表于 6 天前 | 显示全部楼层
xxkj*** 发表于 2026-6-29 14:41
请教一下,PWMA_CR1    |= 0x01;  //使能计数器
然后等待计数完毕是否可以用:while(PWMA_CR1 &0x01); ?
也 ...

高速外设的设计
更可能倾向于自动置位
有的寄存器还可以位操作
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 6 天前 | 显示全部楼层
xxkj*** 发表于 2026-6-29 14:41
请教一下,PWMA_CR1    |= 0x01;  //使能计数器
然后等待计数完毕是否可以用:while(PWMA_CR1 &0x01); ?
也 ...

将程序或程序的链接直接放到 【AI助手】中问
截图202606291710274135.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 14:04 , Processed in 0.079452 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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