找回密码
 立即注册
查看: 616|回复: 4

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

[复制链接]

3

主题

14

回帖

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);
                }
}


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

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

使用道具 举报 送花

3

主题

14

回帖

54

积分

注册会员

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

使用道具 举报 送花

2

主题

6

回帖

41

积分

新手上路

积分
41
发表于 2024-10-10 14:58:26 | 显示全部楼层
后来找到原因了吗,我这边好像也是类似的情况,设置PWMB_RCR的值之后,要等到下一次更新事件产生之后才起作用,导致脉冲数量对应不上,不知道咋解决
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:47 , Processed in 0.130743 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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