ya123456 发表于 2024-7-31 17:36:43

STC8G1K17 用的是TSSOP20的芯片PCA功能,导致有异常情况

本帖最后由 ya123456 于 2024-8-1 08:01 编辑

STC8G1K17 用的是TSSOP20的芯片PCA功能,导致有异常情况。使用的了PCA1 PCA2两个功能引脚,没有用到ECI功能引脚(用做不用的IO口),使用中不正常,无法使用P3.4普通IO口。如果把PCA功能删了,就能正常使用P3.4引脚。请问各位大侠有没有遇到这种情况。
初始化是这样,没有对P3.4的ECI功能初始化。

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

        GPIO_InitStructure.Pin= GPIO_Pin_6 | GPIO_Pin_7;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
        GPIO_InitStructure.Mode = GPIO_PullUp;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P3,&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_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
        PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
        PCA_Init(PCA1,&PCA_InitStructure);

        PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
        PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
        PCA_Init(PCA2,&PCA_InitStructure);
       
        NVIC_PCA_Init(PCA_Counter,DISABLE,Priority_0);
NVIC_PCA_Init(PCA1,PCA_Mode_PWM,Priority_0);                //PWM
NVIC_PCA_Init(PCA2,PCA_Mode_PWM,Priority_0);                //PWM

        PCA_SW(PCA_P34_P35_P36_P37);        //PCA_P12_P11_P10_P37,PCA_P34_P35_P36_P37,PCA_P24_P25_P26_P27
        CR = 1;                                                        //启动PCA
       

pwm2 = 128;
B_PWM0_Dir = 0;
        B_PWM0_Dir = 0;UpdatePcaPwm(PCA1,pwm2);//对比度
        B_PWM0_Dir = 0;UpdatePcaPwm(PCA2,pwm2);       //背光

}
//================================================================================================

DebugLab 发表于 2024-8-1 00:06:02

检查CPS2、CPS1、CPS0的设置

ya123456 发表于 2024-8-1 08:13:19

本帖最后由 ya123456 于 2024-8-1 08:14 编辑

DebugLab 发表于 2024-8-1 00:06
检查CPS2、CPS1、CPS0的设置
我的参考例程用的是STC8G-STC8H-LIB-DEMO-CODE-20240429版本中的“22-PCA0输出PWM-PAC1捕获-PAC2定时-STC8G”,PCA1 PCA2两个PWM模式引脚。
//==============================================================================================
/******************** PCA IO口配置 ********************/
void      PCA_GPIO_config(void)
{
      GPIO_InitTypeDef      GPIO_InitStructure;                //结构定义

      GPIO_InitStructure.Pin= GPIO_Pin_6 | GPIO_Pin_7;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
      GPIO_InitStructure.Mode = GPIO_PullUp;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
      GPIO_Inilize(GPIO_P3,&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_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
      PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
      PCA_Init(PCA1,&PCA_InitStructure);

      PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
      PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
      PCA_Init(PCA2,&PCA_InitStructure);
      
      NVIC_PCA_Init(PCA_Counter,DISABLE,Priority_0);
NVIC_PCA_Init(PCA1,PCA_Mode_PWM,Priority_0);                //PWM
NVIC_PCA_Init(PCA2,PCA_Mode_PWM,Priority_0);                //PWM

      PCA_SW(PCA_P34_P35_P36_P37);      //PCA_P12_P11_P10_P37,PCA_P34_P35_P36_P37,PCA_P24_P25_P26_P27
      CR = 1;                                                      //启动PCA
      

pwm2 = 128;
B_PWM0_Dir = 0;
      B_PWM0_Dir = 0;UpdatePcaPwm(PCA1,pwm2);//对比度
      B_PWM0_Dir = 0;UpdatePcaPwm(PCA2,pwm2);         //背光

}

ya123456 发表于 2024-8-1 11:30:48

使用STC8G1K17(TSSOP20)芯片的PCA功能做PWM输出,没有使用ECI功能但是有异常

STC8G1K17 用的是TSSOP20的芯片PCA功能,有异常情况。使用的了PCA1(P3.6)、 PCA2(P3.7)两个功能引脚,没有用到ECI(P3.4)功能引脚(做普通的IO口使用),使用中不正常,无法使用P3.4普通IO口。如果把PCA功能删了,就能正常使用P3.4引脚。请问各位大侠有没有遇到这种情况。
参考例程用的是STC8G-STC8H-LIB-DEMO-CODE-20240429版本中的“22-PCA0输出PWM-PAC1捕获-PAC2定时-STC8G”,PCA1 PCA2两个端口都使用PWM模式。


初始化是这样,没有对P3.4的ECI功能初始化。

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

      GPIO_InitStructure.Pin= GPIO_Pin_6 | GPIO_Pin_7;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
      GPIO_InitStructure.Mode = GPIO_PullUp;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
      GPIO_Inilize(GPIO_P3,&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_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
      PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
      PCA_Init(PCA1,&PCA_InitStructure);

      PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
      PCA_InitStructure.PCA_Value    = 128 << 8;                        //对于PWM,高8位为PWM占空比
      PCA_Init(PCA2,&PCA_InitStructure);
      
      NVIC_PCA_Init(PCA_Counter,DISABLE,Priority_0);
NVIC_PCA_Init(PCA1,PCA_Mode_PWM,Priority_0);                //PWM
NVIC_PCA_Init(PCA2,PCA_Mode_PWM,Priority_0);                //PWM

      PCA_SW(PCA_P34_P35_P36_P37);      //PCA_P12_P11_P10_P37,PCA_P34_P35_P36_P37,PCA_P24_P25_P26_P27
      CR = 1;                                                      //启动PCA
      

pwm2 = 128;
B_PWM0_Dir = 0;
      B_PWM0_Dir = 0;UpdatePcaPwm(PCA1,pwm2);//对比度
      B_PWM0_Dir = 0;UpdatePcaPwm(PCA2,pwm2);         //背光

}
//=====================================================================



乘风飞扬 发表于 2024-8-1 14:31:37

P3.4的IO口模式设置了吗?

ya123456 发表于 2024-8-1 15:54:05

本帖最后由 ya123456 于 2024-8-2 07:59 编辑

乘风飞扬 发表于 2024-8-1 14:31
P3.4的IO口模式设置了吗?终于解决了,原来是IO定义有问题,PCA没有问题。
页: [1]
查看完整版本: STC8G1K17 用的是TSSOP20的芯片PCA功能,导致有异常情况