gaoyang9992006 发表于 2024-10-16 22:32:35

8G1K08A的PWM可以只选择一个引脚使用吗,其他用于普通IO或者其他功能

本帖最后由 DebugLab 于 2024-10-16 23:09 编辑



手册上这个意思是一次设置,一下把四个引脚的功能都限定死了吗?
没办法只让一个IO使用PWM吗,其他IO作为其他用处比如ADC,或者普通的IO。

王昱顺 发表于 2024-10-16 22:51:44

可以像你所述这样使用的
只需设置不需要的pca模块对应的ccapmx为0即可
例如pca0不想输出pwm,想要作为其他功能使用,可以设置CCAPM0=0x00;
意思是pca0模块无操作,即不占用io其他功能

邮箱 发表于 2024-10-16 22:54:53

可以设置一个

soma 发表于 2024-10-16 23:58:39

这个只有8pin,应该可以但有口做pwm

xxkj2010 发表于 2024-10-17 08:17:42

应该可以的。

gaoyang9992006 发表于 2024-10-17 08:46:46

王昱顺 发表于 2024-10-16 22:51
可以像你所述这样使用的
只需设置不需要的pca模块对应的ccapmx为0即可
例如pca0不想输出pwm,想要作为其他 ...

非常感谢,我一会儿再认真看看手册。手册这方面写的不明显,我再找找。感谢

gaoyang9992006 发表于 2024-10-17 08:52:49


应该从这里设置,一会儿我试试,希望官方能提供一些这种示例。示例中都是同时开启的。好多应用只需要一个。其他IO还要用,建议给8引脚的单片机提供一套专用的示例。

梁工 发表于 2024-10-17 09:47:19

当然可以。
没有用到的PCA,就不要初始化,CCAPMn=0x00; 即可禁止某一路PCA,其对应的引脚无PCA功能,可以用做其余的功能。

gaoyang9992006 发表于 2024-10-17 16:18:55

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com-----------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序            */
/*---------------------------------------------------------------------*/

#include        "config.h"
#include        "STC8G_PCA.h"
#include        "STC8G_H_GPIO.h"
#include        "STC8G_H_Delay.h"
#include        "STC8G_H_Switch.h"

/*************   功能说明   ***************

本例程基于STC8G1K08-20PIN进行编写测试,STC8G系列芯片可通用参考.

输出3路变化的PWM信号, 类似"呼吸灯"的驱动.
PWM0为8位PWM.
PWM1为7位PWM.
PWM2为10位PWM.

下载时, 选择时钟 24MHz (用户可在"config.h"修改频率).

******************************************/

/*************        本地常量声明        **************/


/*************        本地变量声明        **************/

int16        pwm2;
bit        B_PWM2_Dir;        //方向, 0为+, 1为-.



/*************        本地函数声明        **************/


/*************外部函数和变量声明 *****************/


/******************** IO口配置 ********************/
void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                //结构定义

        GPIO_InitStructure.Pin= GPIO_Pin_5;                //P55
        GPIO_InitStructure.Mode = GPIO_PullUp;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);        //初始化
}

/******************** PCA配置 ********************/
void        PCA_config(void)
{
        PCA_InitTypeDef                PCA_InitStructure;

        PCA_InitStructure.PCA_Clock    = PCA_Clock_1T;                //PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
        PCA_InitStructure.PCA_RUN      = DISABLE;                        //ENABLE, DISABLE
        PCA_Init(PCA_Counter,&PCA_InitStructure);                        //设置公用Counter

        PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_10bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
        PCA_InitStructure.PCA_Value    = 32 << 8;                        //对于PWM,高8位为PWM占空比
        PCA_Init(PCA2,&PCA_InitStructure);

        NVIC_PCA_Init(PCA_Counter,PCA_Mode_PWM,Priority_0);
        NVIC_PCA_Init(PCA2,PCA_Mode_PWM,Priority_0);
        PCA_SW(0x02);       
        CR = 1;                                                        //启动PCA
}


/******************** task A **************************/
void main(void)
{
                EAXSFR();                /* 扩展寄存器访问使能 */
    GPIO_config();
    PCA_config();
    pwm2 = 512;
    B_PWM2_Dir = 0;

    UpdatePcaPwm(PCA2,pwm2);
//EA = 1;
       
    while (1)
    {
      delay_ms(5);

      if(B_PWM2_Dir)
      {
            if(--pwm2 <= 1)                B_PWM2_Dir = 0;        //10位PWM
      }
      else if(++pwm2 >= 1024)        B_PWM2_Dir = 1;        //10位PWM
      UpdatePcaPwm(PCA2,pwm2);
    }
}



阿白凌坤 发表于 2025-4-18 19:52:26

做不了低频么?最大分频只到12
页: [1] 2
查看完整版本: 8G1K08A的PWM可以只选择一个引脚使用吗,其他用于普通IO或者其他功能