找回密码
 立即注册
查看: 3110|回复: 30

用STC8G1K08 16pin的单片机PCA输出PWM问题在线等

[复制链接]

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
发表于 2023-3-10 15:33:18 | 显示全部楼层 |阅读模式
用STC8G1K08   16pin的单片机PCA输出PWM,用的是库函数的程序,代码量一大,就会出错!!!
回复 送花

使用道具 举报

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 15:35:00 | 显示全部楼层
// static unsigned int TABLEAD_BUF[3][4];
  unsigned int timer_ms;       
       
        GPIO_config();
  ADC_config();
//  UART_config();
//        Timer_config();
  PCA_config();
        PWMn_Update(2,30);
        EA = 1;
       
        PTCSET = 1;  //¸øÈÈÃôµç×è²É¼¯¹©µç

这是初始化部分

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 15:35:56 | 显示全部楼层
/******************** 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_IoUse    = PCA_P12_P11_P10_P37;        //PCA_P12_P11_P10_P37, PCA_P34_P35_P36_P37, PCA_P24_P25_P26_P27
        PCA_InitStructure.PCA_Interrupt_Mode = DISABLE;                //ENABLE, DISABLE
        PCA_InitStructure.PCA_Priority = Priority_0;                        //Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3
        PCA_InitStructure.PCA_RUN      = DISABLE;                                //ENABLE, DISABLE
        PCA_Init(PCA_Counter,&PCA_InitStructure);                        //ÉèÖù«ÓÃCounter

        PCA_InitStructure.PCA_Mode     = PCA_Mode_HighPulseOutput;                //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
        PCA_InitStructure.PCA_PWM_Wide = 0;                                        //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
        PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;                //PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
        PCA_InitStructure.PCA_Value    = 65535;                        //¶ÔÓÚÈí¼þ¶¨Ê±, ΪƥÅä±È½ÏÖµ
        PCA_Init(PCA2,&PCA_InitStructure);
}这是PCA配置

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 15:36:44 | 显示全部楼层
Program Size: data=112.3 xdata=256 code=5120      这是目前代码  已经开始出错

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 15:37:40 | 显示全部楼层
PWMn_Update(2,30);    我设置的是初始化的时候一个固定的输出,结果额外出来很多的高电平输出

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 16:55:18 | 显示全部楼层
                Nref = Get_ADCResult(15);        //¶ÁÄÚ²¿»ù×¼µçѹ, ¶Á15ͨµÀ
////                delay();

    TempOkFlg = OverTempString();  //ζȹý¸ß¼ì²â
    delay();
                VccAdNum  = Get_ADCResult(7);  //¼ì²âµçÔ´µçѹ
                VccAdNum = (u32)1190 * (u32)VccAdNum / Nref;                        //Ux = Vref * Nx / Nref. Vref = 1190mV(Uxµ¥Î»Îªmv£¬¼´µ±Ç°µçѹ)   
                if(VccAdNum>VOLTAGEMAX || VccAdNum<VOLTAGEMIN) VccErrorFlg=1;
   
////                delay();
//    KeyFlg1 = key1();
////    delay();
//    KeyFlg2 = key2();

////                delay();
////               
    OutAdNum  = Get_ADCResult(12);  //¼ì²âÊä³öµçѹ
                OutAdNum = (u32)1190 * (u32)OutAdNum / Nref;                        //Ux = Vref * Nx / Nref. Vref = 1190mV(Uxµ¥Î»Îªmv£¬¼´µ±Ç°µçѹ)
    if(OutOkFlg==1) { OutAdTime++; }else{OutAdTime=0;}
//    if((OutAdTime>=5)&&(OutAdNum<500))  {OutCurrentErrorFlg=1;}       
                if((OutAdTime>=5)&&((fun(VccAdNum,OutAdNum))>VCCOUTADMAX))   { OutCurrentErrorFlg=1; }                       
//                sendusart1("D",OutAdTime);

程序通过基准电压检测AD,好像是屏蔽AD检测就好一些,不屏蔽就会出错

该用户从未签到

2

主题

28

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2023-3-10 16:55:45 | 显示全部楼层
快来大神帮忙解答一下,愁死人!!!

该用户从未签到

45

主题

2895

回帖

6506

积分

超级版主

积分
6506
发表于 2023-3-10 17:39:02 | 显示全部楼层
MCU的外设都是相互独立的,跟代码大小无关,只要中断忙得过来,内存没有溢出,堆栈没有溢出。
  • TA的每日心情
    开心
    12 小时前
  • 签到天数: 149 天

    [LV.7]常住居民III

    17

    主题

    369

    回帖

    1267

    积分

    荣誉版主

    积分
    1267
    发表于 2023-3-10 18:59:50 | 显示全部楼层
    data的使用量控制在100以内,将一些变量定义到xdata中。

    点评

    非STC32G系列,data+idata在200以内一般不用担心堆栈溢出,data超过128个会报错,idata的变量定义,加idata即可。数组尽量放在xdata。  详情 回复 发表于 2023-3-10 23:19

    该用户从未签到

    45

    主题

    2895

    回帖

    6506

    积分

    超级版主

    积分
    6506
    发表于 2023-3-10 23:19:14 | 显示全部楼层
    社区闲人 发表于 2023-3-10 18:59
    data的使用量控制在100以内,将一些变量定义到xdata中。

    非STC32G系列,data+idata在200以内一般不用担心堆栈溢出,data超过128个会报错,idata的变量定义,加idata即可。数组尽量放在xdata。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-24 16:20 , Processed in 0.096772 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表