芯片:STC32G144K246
用图形化AiCube设置PWM倍频,具体如图:
这样设置后的PWM频率应该能达到156MHz的,但实测PWM脉冲依然大约是10us(相当于频率48MHz)
这与默认的主频差不多,默认情况下如图:
不知道问题出在哪里。请高手指点,谢谢!
附部分代码:
倍频下的时钟设置:
- ////////////////////////////////////////
- // 时钟初始化函数
- // 入口参数: 无
- // 函数返回: 无
- ////////////////////////////////////////
- void CLK_Init(void)
- {
- CLK_I2S1CLK_Divider(1); //设置I2S1时钟预分频系数
- CLK_I2S2CLK_Divider(1); //设置I2S2时钟预分频系数
- CLK_SPI1CLK_Divider(1); //设置SPI1时钟预分频系数
- CLK_SPI2CLK_Divider(1); //设置SPI2时钟预分频系数
- CLK_SPI3CLK_Divider(1); //设置SPI3时钟预分频系数
- CLK_PWMACLK_Divider(1); //设置PWMA时钟预分频系数
- CLK_PWMBCLK_Divider(1); //设置PWMB时钟预分频系数
- CLK_PWMCCLK_Divider(1); //设置PWMC时钟预分频系数
- CLK_PWMDCLK_Divider(1); //设置PWMD时钟预分频系数
- CLK_PWMECLK_Divider(1); //设置PWME时钟预分频系数
- CLK_PWMFCLK_Divider(1); //设置PWMF时钟预分频系数
- CLK_TFPUCLK_Divider(1); //设置TFPU时钟预分频系数
-
- CLK_SYSCLK_Divider(10); //切换主时钟前先将系统时钟降频
-
- HIRC_48M(); //选择内部预置的频率
-
- CLK_MCLK_HIRC(); //选择内部高精度HIRC作为主时钟
- CLK_MCLK2_BYPASS(); //旁路MCLK2,直接使用MCLK选择
-
- CLK_HPLL1_BASECLK(); //选择内部基本时钟BASECLK作为HPLL1输入时钟
- CLK_HPLL1_PreDivider(8); //设置HPLL1的输入时钟预分频系数(分频后的频率必须为6MHz左右)
- CLK_HPLL1_Lock312MHz(); //选择HPLL1的锁频目标频率
- CLK_HPLL1_Enable(); //启动HPLL1
- delay_ms(1); //等待PLL锁频
-
- CLK_SYSCLK_Divider(1); //设置系统时钟分频系数
-
- CLK_HSI2SCK_HPLL1D2(); //选择HPLL1的输出2分频时钟作为高速I2S时钟源
- CLK_HSIOCK_HPLL1D2(); //选择HPLL1的输出2分频时钟作为高速外设时钟源
-
- //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
- // 在此添加用户初始化代码
- //<<AICUBE_USER_CLOCK_INITIAL_END>>
- }
复制代码 PWMA初始化代码:
- void PWMA_Init(void)
- {
- PWMA_C5SwitchP46(); //设置PWMA通道5数据端口: PWMA5P (P4.6)
-
- HSPWMA_Disable(); //关闭高速模式,使用同步方式进行初始化
- PWMA_InternalClockMode(); //选择内部时钟模式
- PWMA_SetClockDivider(0); //设置16位预分频
- PWMA_SetReload16(999); //设置16位重载值
- PWMA_BufferARR(); //使能重载值寄存器预装载功能
- PWMA_SetCounter(0); //初始化计数值
-
- PWMA_CC5PEnable(); //打开通道
- PWM_UpdateDuty(PWMA_CH5, 500); //设置通道的PWM占空比
- PWMA_OC5REFPWMMode1(); //设置通道输出参考信号为PWM模式1信号
- PWMA_BufferCCR5(); //使能CCRn预装载功能
- PWMA_CC5PInverted(); //设置正极通道输出低电平有效
- PWMA_EnablePWM5POutput(); //使能正极通道输出
-
- PWMA_EnableMainOutput(); //使能PWM主输出
-
- PWMA_Run(); //PWMA开始运行
-
- //<<AICUBE_USER_PWM0_INITIAL_BEGIN>>
- // 在此添加用户初始化代码
- //<<AICUBE_USER_PWM0_INITIAL_END>>
- }
复制代码
|