果果爱吃土豆 发表于 2024-11-26 11:05:51

PWM设置默认高低电平不生效,PWMChannelCtrl(),芯片采用8A8K64D4

本帖最后由 DebugLab 于 2024-11-26 12:03 编辑


使用芯片:8A8K64D4
我在初始化P6.3和P1.4引脚的pwm的时候,设置P6.3的默认电平是1,P1.4的默认电平是0,但是烧录程序之后使用示波器测试这个两个引脚的pwm方波是相同的,没有180°改变

#include "PWM.h"

//配置GPIO
void GPIO_pwm_config(void) {
//    P6M0 &= ~0x07; P6M1 &= ~0x07; // 配置 P6.0, P6.1, P6.2 为准双向(输出信息)
    P6M0 |= 0x07; P6M1 |= 0x07; // 配置 P6.0, P6.1, P6.2 为推挽(输出信息)
//    P60 = 0; //WS-T-PWM-OUT
//    P61 = 0; //WS-L-PWM-OUT
//    P62 = 0; //WS-ZZ-PWM-OUT
   
//    P7M0 &= ~0x30; P7M1 &= ~0x30; //设置24V使能GD4-EN(P7.4)和12V使能GD3-EN(P7.5)的使能准双向
    P7M0 |= 0x30; P7M1 &= ~0x30;//设置成推挽,不知道11/22程序抽什么风,使用准双向不能驱动启用12V的使能
    P75 = 0;
    P74 = 0;
   
    //P6.3 GD2-EN (R30)
    P6M0 |= 0x08; P6M1 &= ~0x08;//推挽

   
    //P1.4(WS-JC-PWM-EN)
    P1M0 |= 0x10; P1M1 &= ~0x10; //推挽

}


/******************** PWM15配置 ********************/
void PWM15_config(void)
{
    PWM15_InitTypeDef    PWM15_InitStructure;    //PWM结构体
    PWM15_InitStructure.PWM_Enable    = ENABLE;   //PWM使能,ENABLE, DISABLE
    PWM15_InitStructure.PWM_Period    = 18749;   //PERIOD ≤ 65535(16 位计数器限制)
    PWM15_InitStructure.PWM_Clock_Sel = PWM_CLK_SYS;    //时钟源选择,PWM_CLK_SYS, PWM_CLK_TM2
    PWM15_InitStructure.PWM_Clock_PS= 6;          //系统时钟分频参数(PS+1分频),0~15 8
    PWM15_InitStructure.PWM_CInt      = DISABLE;    //计数器归零中断使能,ENABLE, DISABLE
    PWM15_InitStructure.PWM_Counter   = ENABLE;    //计数器使能,ENABLE, DISABLE
    PWM15_Init(&PWM15_InitStructure);
   
    //P6.3(GD2-EN)的PWM配置
    PWM15Duty(PWM15_3,18749 / 2, 18749);      //P6.3占空比,50% 1Hz
    //PWM通道控制寄存器设置(P6.3是通道3)
    PWMChannelCtrl(PWM15_3,ENABLE,PWM15_SW_P6,1,DISABLE,DISABLE,DISABLE);    //PWM_ID, 输出使能, 输出通道, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断

    // P1.4(WS-JC-PWM-EN)的PWM配置(1Hz)
    PWM15Duty(PWM15_4, 18749 / 2, 18749); // P1.4的占空比,50%1Hz
    // PWM通道控制寄存器设置(P1.4是通道4)
    PWMChannelCtrl(PWM15_4, ENABLE, PWM15_SW_P1,0, DISABLE, DISABLE, DISABLE);

}

//初始化pwm
void PWM_init(){
    GPIO_pwm_config();
    PWM15_config();
}


王昱顺 发表于 2024-11-26 11:32:49

您好,初始电平仅仅是作用于PWM未输出前的电平,并不能反转相位。
您可以尝试将PWM15Duty内的两个反转点值进行对换。
例如:
PWM15Duty(PWM15_4, 10, 100);//正相
PWM15Duty(PWM15_4, 100, 10);//反相

果果爱吃土豆 发表于 2024-11-26 11:58:34

王昱顺 发表于 2024-11-26 11:32
您好,初始电平仅仅是作用于PWM未输出前的电平,并不能反转相位。
您可以尝试将PWM15Duty内的两个反转点值 ...

好的,非常感谢
页: [1]
查看完整版本: PWM设置默认高低电平不生效,PWMChannelCtrl(),芯片采用8A8K64D4