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

求助帖

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

积分
285
发表于 2023-11-22 15:22:52 | 显示全部楼层 |阅读模式


根据官方例程修改了输出引脚——P10 P11 但是烧录后无法正常输出,因此疑惑是什么地方配置错误  



#define FOSC        12000000UL

#define PWM_PSC     (120-1)                     //定义PWM时钟预分频系数
#define PWM_PERIOD  2000                        //定义PWM周期值
                                                //(频率=FOSC/(PWM_PSC+1)/PWM_PERIOD=50Hz)
#define PWM_DUTY    50                         //定义PWM的占空比值
                                                //(占空比=PWM_DUTY/PWM_PERIOD*100%=25%)

void PWM_Init()
{
    PWMA_PSCR = PWM_PSC;                        //配置预分频系数

    PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCxE关闭通道
    PWMA_CCER2 = 0x00;

    PWMA_CCMR1 = 0x60;                          //通道模式配置PWM模式1
    PWMA_CCMR2 = 0x30;                          //通道模式配置输出比较模式
    PWMA_CCMR3 = 0x30;                          //通道模式配置输出比较模式

    PWMA_CCER1 = 0x55;                          //配置通道1,2,3输出使能和极性
    PWMA_CCER2 = 0x05;

    PWMA_ARR = PWM_PERIOD;                      //设置周期时间

    PWMA_ENO = 0x3f;                            //使能PWM输出
    PWMA_PS = 0x00;                             //高级PWM通道输出脚选择P2.0-P2.5
          

    PWMA_CCR1 = PWM_DUTY;                       //设置占空比时间
    PWMA_CCR2 = PWM_PERIOD/3;                   //设置OC2起始翻转位
    PWMA_CCR3 = PWM_PERIOD/3*2;                 //设置OC3起始翻转位

    PWMA_IER = 0x0d;                            //使能OC2/OC3比较中断,更新中断

    PWMA_BRK = 0x80;                            //使能主输出
    PWMA_CR1 |= 0x01;                           //开始计时
}

void main()
{
    Io_Init();
    PWM_Init();

    EA = 1;                                     //打开总中断

    while (1);
}

void PWMA_ISR() interrupt 26
{
    if (PWMA_SR1 & 0x01)
    {
        PWMA_CCR2 = PWM_PERIOD/3;               //设置占空比时间
        PWMA_CCR3 = PWM_PERIOD/3*2;             //设置占空比时间
        PWMA_SR1 &= ~0x01;
    }
    else if (PWMA_SR1 & 0x04)
    {
        PWMA_CCR2 = (PWM_PERIOD/3+PWM_DUTY);    //设置0C2结束翻转位
        PWMA_SR1 &= ~0x04;
    }
    else if (PWMA_SR1 & 0x08)
    {
        PWMA_CCR3 = (PWM_PERIOD/3*2+PWM_DUTY);  //设置0C3结束翻转位
        PWMA_SR1 &= ~0x08;
    }
    else
    {
        PWMA_SR1 = 0;
    }
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2023-11-22 18:03:45 | 显示全部楼层
你描述下,要实现啥功能,看大家如有现成的程序,直接发上来给你参考
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

积分
285
发表于 2023-11-23 08:30:12 | 显示全部楼层
我最终想要实现的是输出两路 相位差180的 频率 占空比可调节的pwm 。由于第一次用STC所以只能先从输出两路pwm做起
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

积分
285
发表于 2023-11-23 09:01:24 | 显示全部楼层
神*** 发表于 2023-11-22 18:03
你描述下,要实现啥功能,看大家如有现成的程序,直接发上来给你参考

还有一点我不太懂,比如 pwm比较输出模式下  频率=时钟/(ARR*PSC)  改变频率就设置ARR 和 PSC 的值,但是这个时钟是要自己配置还是系统配置文件中已经配置好了,只需要用户自己配置 ARR 和 PSC即可。

点评

默认系统时钟 通过PSC 设置分频  详情 回复 发表于 2023-11-23 11:50
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-11-23 11:50:45 | 显示全部楼层
Hons*** 发表于 2023-11-23 09:01
还有一点我不太懂,比如 pwm比较输出模式下  频率=时钟/(ARR*PSC)  改变频率就设置ARR 和 PSC 的值,但是 ...

默认系统时钟   通过PSC 设置分频
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 14:52 , Processed in 0.174523 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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