找回密码
 立即注册
查看: 48|回复: 3

PWM 纯硬件控制脉冲个数,多次发送,顺序的问题

[复制链接]

该用户从未签到

2

主题

15

回帖

54

积分

注册会员

积分
54
发表于 2024-4-21 20:41:27 | 显示全部楼层 |阅读模式
4PWM.jpg
初学,刚刚接触PWM功能,参考STC8H8K64U-DEMO-CODE里面的,
26-高级PWM输出-周期可调-脉冲计数,
改了一点,不调占空比,
按顺序,连续发送4次固定脉冲,5个,10个,15个,20个脉冲(中间间隔6ms),
延迟15ms后,再发送,一直循环,
现在的问题是,发送的脉冲数是对的,但是,发送出去的顺序不对,变成了:20个,5个,10个,15个,
麻烦各位大佬有时间帮忙看看,这是什么原因?

void delay_ms(u16 ms)
{
         u16 i;
         do{
                        i = MAIN_Fosc / 10000;
                        while(--i);
         }while(--ms);
}
/************* 发送脉冲函数 **************/
void TxPulse(u8 rep)
{
    if(rep == 0) return;
    rep -= 1;
    PWMA_RCR = rep;    //重复计数寄存器,计数 rep 个脉冲后产生更新事件
    PWMA_CR1 |= 0x89;  //使能ARR预装载,单脉冲模式,开始计时
}
/************* 更新PWM周期占空比.**************/
void UpdatePwm(void)
{
    PWMA_ARR = Period;
    PWMA_CCR1 = (Period >> 1); //设置占空比时间: Period/2
}
void main(void)
{
    P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
    PWM1_Flag = 0;
    Counter = 0;
    Period = 0x1000;

    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO1P; //使能输出

    PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMA_CCMR1 = 0x68; //设置 PWM1 模式1 输出
    PWMA_CCER1 = 0x03; //使能 CC1E 通道, 低电平有效

    PWMA_PS = 0x00;    //高级 PWM 通道输出脚选择位
    PWMA_PS |= PWM1_2; //选择 PWM1_2 通道

    UpdatePwm();
    PWMA_BKR = 0x80;   //使能主输出
    P40 = 0;    //给LED供电
    EA = 1;     //打开总中断
    delay_ms(50);
    while (1)
               {
                                TxPulse(5);    //输出5个脉冲
                                delay_ms(6);
                                TxPulse(10);    //输出10个脉冲
                                delay_ms(6);
                                TxPulse(15);    //输出15个脉冲
                                delay_ms(6);
                                TxPulse(20);    //输出20个脉冲
                                delay_ms(15);
                }
}


回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-4-24 09:28
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    569

    回帖

    1854

    积分

    超级版主

    积分
    1854
    QQ
    发表于 2024-4-22 10:18:25 | 显示全部楼层
    强大的PWM,要去看教学视频 https://www.stcaimcu.com/forum.p ... &extra=page%3D1
    截图202404221018172413.jpg
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2934

    回帖

    6617

    积分

    超级版主

    积分
    6617
    发表于 2024-4-22 17:02:22 | 显示全部楼层
    楼主可以参考官方的例子:
    STC8H系列、STC32系列 高级PWM 重复计数器应用 例子
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7325
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    15

    回帖

    54

    积分

    注册会员

    积分
    54
     楼主| 发表于 2024-4-22 19:16:23 | 显示全部楼层
    好的,我再看看,谢谢。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-5-5 09:51 , Processed in 0.060186 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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