找回密码
 立即注册
查看: 171|回复: 5

高速PWM ,通道3,组合PWM模式1和2都不行,其他不对称也可以

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-01-23 15:02:30
已绑定手机

2

主题

4

回帖

112

积分

注册会员

积分
112
发表于 2024-12-25 09:08:43 | 显示全部楼层 |阅读模式

高速PWM ,通道3,组合PWM模式1和2都不行,其他不对称也可以。AI8H2K17U

void PWM_Config(void)
{
//高速设置

CLKSEL |= 0x80;						//内部PLL输出时钟选择, |=0x80: 选择PLL 144MHz, &=~0x80: 选择96MHz(默认)
USBCLK  = (USBCLK &~0x60) | (1<<5);	//选择PLL输入时钟分频,保证输入时钟为12M, 0: 1分频(对应12MHz), 1: 2分频(对应24MHz), 2: 4分频(对应48MHz), 3: 8分频(对应96MHz)
USBCLK |= 0x80;						//PLL倍频控制, |=0x80: 使能PLL倍频. &= ~0x80: 禁止PLL倍频
delay();							//等待PLL锁频
CLKSEL |= 0x40;						//高速IO时钟源选择, |=0x40: 选择PLLCLK,  &=~0x40: 选择MCLK(默认)
HSCLKDIV = 0;           //不分频

//pwm设置
HSPWMA_CFG = 0X03; //新增的移相寄存器使用间接定址访问前需要设置新增的使能位(bit4)
WritePWMA((u8)&PWMA_ENO, 0x00); // IO输出禁止
WritePWMA((u8)&PWMA_IER, 0x00); // 禁止中断
WritePWMA((u8)&PWMA_SR1, 0x00); // 清除状态
WritePWMA((u8)&PWMA_SR2, 0x00); // 清除状态

	//通过异步方式设置PWMA的相关寄存器

WritePWMA((u8)&PWMA_PSCRH, 0x00);
WritePWMA((u8)&PWMA_PSCRL, 0x00);
//	WritePWMA((u8)&PWMA_DTR, 72);		// 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,



WritePWMA((u8)&PWMA_CCER1, 0x00);//写 CCMRx 前必须先清零 CCxE 关闭通道
WritePWMA((u8)&PWMA_CCER2, 0x00);

WritePWMA((u8)&PWMA_CCMR1X, 0x00);//通道1:PWM1模式
WritePWMA((u8)&PWMA_CCMR1, 0x60);


WritePWMA((u8)&PWMA_CCMR3X, 0x01);//通道3:组合PWM2模式
WritePWMA((u8)&PWMA_CCMR3, 0x50);

WritePWMA((u8)&PWMA_CCMR4X, 0x00);//通道4:PWM1模式
WritePWMA((u8)&PWMA_CCMR4, 0x60);

WritePWMA((u8)&PWMA_CCER1, 0x55);//配置通道输出使能和极性55 N
WritePWMA((u8)&PWMA_CCER2, 0x55);

PWM_PERIOD = 1000;    //设置周期值

// WritePWMA((u8)&PWMA_ENO, 0x00);//使能输出
WritePWMA((u8)&PWMA_ENO, 0x12);
WritePWMA((u8)&PWMA_BKR, 0x80); //使能主输出
WritePWMA((u8)&PWMA_CR1, 0x01); //使能ARR预装载,开始PWM计
// WritePWMA((u8)&PWMA_EGR, 0x01 ); //设置输出PWM的周期

}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-25 09:35:02 | 显示全部楼层
不行是有哪些异常?
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-01-23 15:02:30
已绑定手机

2

主题

4

回帖

112

积分

注册会员

积分
112
发表于 2024-12-25 09:41:24 | 显示全部楼层
Debu*** 发表于 2024-12-25 09:35
不行是有哪些异常?

组合1 出高,组合2出低,不高速异步的话,这个测试是正常的

点评

高速模式要异步读写寄存器 [attachimg]76496[/attachimg]  详情 回复 发表于 2024-12-25 09:47
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-25 09:47:12 | 显示全部楼层
qfm*** 发表于 2024-12-25 09:41
组合1 出高,组合2出低,不高速异步的话,这个测试是正常的


高速模式要异步读写寄存器
截图202412250946335811.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-01-23 15:02:30
已绑定手机

2

主题

4

回帖

112

积分

注册会员

积分
112
发表于 2024-12-25 09:57:15 | 显示全部楼层
Debu*** 发表于 2024-12-25 09:47
高速模式要异步读写寄存器

不是编译不过啊,是执行结果不对啊

函数有的啊

void WritePWMA( char addr,char dat )
{
    while(HSPWMA_ADR & 0X80);
    HSPWMA_DAT = dat;
    HSPWMA_ADR = addr & 0x7f;
}

点评

看起来没什么问题,我也不知道什么原因了  详情 回复 发表于 2024-12-25 11:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-25 11:21:05 | 显示全部楼层
qfm*** 发表于 2024-12-25 09:57
不是编译不过啊,是执行结果不对啊

函数有的啊

看起来没什么问题,我也不知道什么原因了
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:16 , Processed in 0.135245 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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