卡素111 发表于 2026-4-7 16:17:20

AI8H8K64U的PWM怎么用

AI8H8K64U-20管脚的PWM怎么用?程序如下,目标实现PWM3P输出脉宽和频率可调的PWM波做DAC,现在可以实现PWM1P输出但PWM3P没有输出。请问大神怎么改。


#include "AI8H.h"
#include "intrins.h"
#include "IO_init.h"


void main()
{
                IO_init();

    P_SW2 = 0x80;
                PWMA_PS &= ~0x30;                                                //PWM3: PWM3P(P1.4), PWM3N(P1.5)

/*       
    PWMA_CCER1 = 0x00;                        //дCCMRxǰ±ØÐëÏÈÇåÁãCCERx¹Ø±ÕͨµÀ
    PWMA_CCMR1 = 0x60;                        //ÉèÖÃCC1ΪPWMAÊä³öģʽ
    PWMA_CCER1 = 0x01;                        //ʹÄÜCC1ͨµÀ
    PWMA_CCR1 = 2500;                           //ÉèÖÃÕ¼¿Õ±Èʱ¼ä£¬50%
    PWMA_ARR = 11000;                           //ÉèÖÃÖÜÆÚʱ¼ä
    PWMA_ENO = 0x01;                            //ʹÄÜPWM1P¶Ë¿ÚÊä³ö
    PWMA_BKR = 0x80;                            //ʹÄÜÖ÷Êä³ö
    PWMA_CR1 = 0x01;                            //¿ªÊ¼¼ÆÊ±
*/

    PWMA_CCER1 = 0x00;                        //дCCMRxǰ±ØÐëÏÈÇåÁãCCERx¹Ø±ÕͨµÀ
    PWMA_CCMR1 = 0x60;                        //ÉèÖÃCC1ΪPWMÊä³öģʽ1
    PWMA_CCER1 = 0x01;                        //ʹÄÜCC1ͨµÀ
               
    PWMA_CCER2 = 0x00;                        //дCCMRxǰ±ØÐëÏÈÇåÁãCCERx¹Ø±ÕͨµÀ
    PWMA_CCMR1 = 0x60;                        //ÉèÖÃCC1ΪPWMÊä³öģʽ1
    PWMA_CCER2 = 0x01;                        //ʹÄÜCC1ͨµÀ
               
    PWMA_CCR1 = 2500;                           //ÉèÖÃÕ¼¿Õ±Èʱ¼ä£¬50%
    PWMA_ARR = 11000;                           //ÉèÖÃÖÜÆÚʱ¼ä
    PWMA_ENO = 0x11;                            //ʹÄÜPWM3P,PWM1P¶Ë¿ÚÊä³ö
    PWMA_BKR = 0x80;                            //ʹÄÜÖ÷Êä³ö
    PWMA_CR1 = 0x01;                            //¿ªÊ¼¼ÆÊ±
               

                while (1);
}

神农鼎 发表于 2026-4-7 16:27:07

用 AiCube 配置,当 STC8H8K64U-LQFP64

AiCube-ISP, 图形化程序自动生成,【高级PWM-DMA自动产生互补SPWM波形】的代码 - 144MHz-PWM-硬件移相/45路PWM+3路CCP/7组不同周期的PWM/DAC 国芯人工智能技术交流网站 - AI32位8051交流社区

乘风飞扬 发表于 2026-4-7 16:33:58

可参考8H实验箱例程包里面的PWM例子:https://www.stcai.com/syx
    PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMA_CCER2 = 0x00;
    PWMA_CCMR1 = 0x60; //PWM1通道模式配置
    PWMA_CCMR2 = 0x60; //PWM2通道模式配置
    PWMA_CCMR3 = 0x60; //PWM3通道模式配置
    PWMA_CCMR4 = 0x60; //PWM4通道模式配置
    PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    PWMA_CCER2 = 0x55;

    PWMA_CCMR1 |= 0x08; //开启PWMA_CCRx预装载功能(需要CCxE=1才可写)
    PWMA_CCMR2 |= 0x08;
    PWMA_CCMR3 |= 0x08;
    PWMA_CCMR4 |= 0x08;

    PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    PWMA_ARRL = (u8)PWM_PERIOD;

    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO1P; //使能输出
    PWMA_ENO |= ENO1N; //使能输出
    PWMA_ENO |= ENO2P; //使能输出
    PWMA_ENO |= ENO2N; //使能输出
    PWMA_ENO |= ENO3P; //使能输出
    PWMA_ENO |= ENO3N; //使能输出
    PWMA_ENO |= ENO4P; //使能输出
    PWMA_ENO |= ENO4N; //使能输出

    PWMA_PS = 0x00;//高级 PWM 通道输出脚选择位
    PWMA_PS |= PWM1_3; //选择 PWM1_3 通道
    PWMA_PS |= PWM2_3; //选择 PWM2_3 通道
    PWMA_PS |= PWM3_3; //选择 PWM3_3 通道
    PWMA_PS |= PWM4_3; //选择 PWM4_3 通道

    PWMA_BKR = 0x80; //使能主输出
    PWMA_CR1 |= 0x01; //开始计时
页: [1]
查看完整版本: AI8H8K64U的PWM怎么用