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

AI8H4K32TL的PWM3N发不出PWM波形

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-12 10:34:29

13

主题

19

回帖

213

积分

中级会员

积分
213
发表于 2024-9-3 09:04:36 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-9-3 09:19 编辑

用AI8H4K32TL的PWM3N发不出PWM波形 (P2.5口) 程序如下,请大家看看那里不对

#include "STC8H.h"
#include "pwm.h"
void led_pwm_init(void)
{
                P_SW2 |= 0x80;      

        
                PWMA_PSCR = 23;                 //预分频 24MZ/(23+1) = 1MHz
        
    PWMA_ENO  = 0x00;
    PWMA_ENO |= ENO3N; //使能输出PWM3N                        
        
    PWMA_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道                     
    PWMA_CCMR3 = 0x68; //PWM1 模式1输出 开启预装载功能
    PWMA_CCER2 = 0x01; //高电平有效 开启捕获比较输出  使能CC3通道
//  PWMA_CCER1 = 0x03; //低电平有效                        
        
    PWMA_PS  = 0x00;   //功能脚切换                       
    PWMA_PS |= PWM3_2; //P:P2.4  N:P2.5                       
  
                PWMA_ARR  = 2000;
    PWMA_CCR3 = 1000;              
        
          PWMA_BKR  = 0x80;  //使能主输出                       
    PWMA_CR1 |= 0x01;  //使能定时器工作                  
}

//void led_pwm_init(void)
//{
//                P_SW2 |= 0x80;      

//                P1M0 &= 0xFE;
//          P1M1 &= 0xFE;
//        
//                PWMA_PSCR = 23;                //预分频 24MZ/(23+1) = 1MHz
//        
//    PWMA_ENO  = 0x00;
//    PWMA_ENO |= ENO1P;//使能输出                        
//        
//    PWMA_CCER1 = 0x00;                        
//    PWMA_CCMR1 = 0x68;//PWM1 模式1输出
//    PWMA_CCER1 = 0x01;//高电平有效
////  PWMA_CCER1 = 0x03;//低电平有效                        
//        
//    PWMA_PS  = 0x00;                        
//    PWMA_PS |= PWM1_1;                       
//  
//                PWMA_ARR  = LED_DEFAULT_PWM_CYC;
//    PWMA_CCR1 = 1000;              
//        
//          PWMA_BKR  = 0x80;                        
//    PWMA_CR1 |= 0x01;                     
//}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

//    P_SW2 = 0x80;
//    PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
//    PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式  PWM模式1
//    PWMA_CCER1 = 0x01;                          //使能CC1通道
//    PWMA_CCR1 = 100;                            //设置占空比时间
//    PWMA_ARR = 500;                             //设置周期时间
//    PWMA_ENO = 0x01;                            //使能PWM1P端口输出
//    PWMA_BKR = 0x80;                            //使能主输出
//    PWMA_CR1 = 0x01;                            //开始计时
    led_pwm_init();

    while (1);
}



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-12 10:34:29

13

主题

19

回帖

213

积分

中级会员

积分
213
发表于 2024-9-3 09:06:51 | 显示全部楼层
上面的程序头文件 PWM.H程序
#ifndef __PWM_H__
#define __PWM_H__

typedef unsigned int uint16_t;

#define   LED_DEFAULT_PWM_CYC                  2000
#define   LED_DEFAULT_DUTY_0                    0
#define   BUZZER_DEFAULT_PWM_CYC   500

#define PWM1_1      0x00//P:P1.0  N:P1.1
#define PWM1_2      0x01//P:P2.0  N:P2.1
#define PWM1_3      0x02//P:P6.0  N:P6.1

#define PWM2_1      0x00//P:P1.2  N:P1.3<->P:P5.4
#define PWM2_2      0x04//P:P2.2  N:P2.3
#define PWM2_3      0x08//P:P6.2  N:P6.3

#define PWM3_1      0x00//P:P1.4  N:P1.5
#define PWM3_2      0x10//P:P2.4  N:P2.5
#define PWM3_3      0x20//P:P6.4  N:P6.5

#define PWM4_1      0x00//P:P1.6  N:P1.7
#define PWM4_2      0x40//P:P2.6  N:P2.7
#define PWM4_3      0x80//P:P6.6  N:P6.7
#define PWM4_4      0xC0//P:P3.4  N:P3.3

#define ENO1P       0x01
#define ENO1N       0x02
#define ENO2P       0x04
#define ENO2N       0x08
#define ENO3P       0x10
#define ENO3N       0x20
#define ENO4P       0x40
#define ENO4N       0x80


#define PWM5_1                        0x00//P2.0
#define PWM5_2                        0x01//P1.7
#define PWM5_3                        0x02//P0.0
#define PWM5_4                        0x03//P7.4

#define PWM6_1                        0x00//P2.1
#define PWM6_2                        0x04//P5.4
#define PWM6_3                        0x08//P0.1
#define PWM6_4                        0x0C//P7.5

#define PWM7_1                        0x00//P2.2
#define PWM7_2                        0x10//P3.3
#define PWM7_3                        0x20//P0.2
#define PWM7_4                        0x30//P7.6

#define PWM8_1                        0x00//P2.3
#define PWM8_2                        0x40//P3.4
#define PWM8_3                        0x80//P0.3
#define PWM8_4                        0xC0//P7.7

#define ENO5P       0x01
#define ENO6P       0x04
#define ENO7P       0x10
#define ENO8P       0x40

extern void led_pwm_init(void);
extern void buzzer_pwm_init(void);
extern void set_led_pwm_duty(uint16_t  duty,uint16_t cyc);
extern void set_buzzer_pwm_duty(uint16_t  duty, uint16_t cyc);
#endif
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-06-17 09:09:48
已绑定手机

79

主题

5131

回帖

9132

积分

超级版主

DebugLab

积分
9132
发表于 2024-9-3 09:29:14 | 显示全部楼层


使能PWMxx端口输出放在后面

截图202409030928411642.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 2024-9-3 09:32:48 | 显示全部楼层
PWM3N使能是在PWMA_CCER2的bit2
所以应该设置 PWMA_CCER2 = 0x04;
截图202409030930006196.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-12 10:34:29

13

主题

19

回帖

213

积分

中级会员

积分
213
发表于 2024-9-5 16:46:34 | 显示全部楼层
谢谢帮助,已经可以了。看了STC官方程序,有个疑问,
PWM初始化程序为什么没有设置预分频寄存器PWMx_PSCR的值,
频率计算公式中要用预分频寄存器的值。
不设置怎么知道频率呢?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 15:06 , Processed in 0.177690 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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