qfmir 发表于 2024-12-25 09:08:43

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

<p>高速PWM ,通道3,组合PWM模式1和2都不行,其他不对称也可以。AI8H2K17U</p>
<p>void PWM_Config(void)<br />
{<br />
//高速设置</p>
<pre><code>CLKSEL |= 0x80;                                                //内部PLL输出时钟选择, |=0x80: 选择PLL 144MHz, &amp;=~0x80: 选择96MHz(默认)
USBCLK= (USBCLK &amp;~0x60) | (1&lt;&lt;5);        //选择PLL输入时钟分频,保证输入时钟为12M, 0: 1分频(对应12MHz), 1: 2分频(对应24MHz), 2: 4分频(对应48MHz), 3: 8分频(对应96MHz)
USBCLK |= 0x80;                                                //PLL倍频控制, |=0x80: 使能PLL倍频. &amp;= ~0x80: 禁止PLL倍频
delay();                                                        //等待PLL锁频
CLKSEL |= 0x40;                                                //高速IO时钟源选择, |=0x40: 选择PLLCLK,&amp;=~0x40: 选择MCLK(默认)
HSCLKDIV = 0;         //不分频
</code></pre>
<p>//pwm设置<br />
HSPWMA_CFG = 0X03;//新增的移相寄存器使用间接定址访问前需要设置新增的使能位(bit4)<br />
WritePWMA((u8)&amp;PWMA_ENO, 0x00);                // IO输出禁止<br />
WritePWMA((u8)&amp;PWMA_IER, 0x00);                // 禁止中断<br />
WritePWMA((u8)&amp;PWMA_SR1, 0x00);                // 清除状态<br />
WritePWMA((u8)&amp;PWMA_SR2, 0x00);                // 清除状态</p>
<pre><code>        //通过异步方式设置PWMA的相关寄存器

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



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

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


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

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

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

PWM_PERIOD = 1000;    //设置周期值
</code></pre>
<p>// WritePWMA((u8)&amp;PWMA_ENO, 0x00);//使能输出<br />
WritePWMA((u8)&amp;PWMA_ENO, 0x12);<br />
WritePWMA((u8)&amp;PWMA_BKR, 0x80);   //使能主输出<br />
WritePWMA((u8)&amp;PWMA_CR1, 0x01);   //使能ARR预装载,开始PWM计<br />
//           WritePWMA((u8)&amp;PWMA_EGR, 0x01 );//设置输出PWM的周期</p>
<p>}</p>

DebugLab 发表于 2024-12-25 09:35:02

不行是有哪些异常?

qfmir 发表于 2024-12-25 09:41:24

DebugLab 发表于 2024-12-25 09:35
不行是有哪些异常?

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

DebugLab 发表于 2024-12-25 09:47:12

qfmir 发表于 2024-12-25 09:41
组合1 出高,组合2出低,不高速异步的话,这个测试是正常的


高速模式要异步读写寄存器

qfmir 发表于 2024-12-25 09:57:15

DebugLab 发表于 2024-12-25 09:47
高速模式要异步读写寄存器

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

函数有的啊

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

DebugLab 发表于 2024-12-25 11:21:05

qfmir 发表于 2024-12-25 09:57
不是编译不过啊,是执行结果不对啊

函数有的啊


看起来没什么问题,我也不知道什么原因了
页: [1]
查看完整版本: 高速PWM ,通道3,组合PWM模式1和2都不行,其他不对称也可以