打印
[信息]

OCX和OCXREF究竟是什么关系

[复制链接]
825|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
asmine|  楼主 | 2022-2-25 15:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 asmine 于 2022-2-25 15:53 编辑

这里借用原子的一个总结,
感觉功底很扎实,膜拜一下!


在《STM32参考手册》V10的第266页,图123和图124之间有这么一句话:输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。
        然后,我们在266页还可以看到图125的通道输出部分框图,如下图所示:



从图中可以看出,OCxREF其实就是OCx输出的中间状态,这里最后那个输出使能电路比较好理解,其实就是通过CCxE来控制的一个开关。我们要是能使出PWM之类的波形,则必须使能CCxE位的。但是CC1P这里不是很好理解,尤其是这个图,看起来怪怪的,像个加法器。我们再从《参考手册》的第292页找到这个图:



上图告诉我们CCxP是用来控制极性的,默认设置(复位后)为0,也就是高电平有效,而如果设置该位,则为低电平有效。通过实验我发现,这里的有效电平,其实就是在PWM输出的有效电平(匹配时的电平),比如我设置PWM某个时候的比较值为0,此时PWM会输出100%占空比的有效电平,此时,我们可以看到OCx输出是一个固定的电平,这个电平,其实就是你设置的CC1P的状态。当设置OCxP的值为0的时候,100%占空比输出是高电平,当设置OCxP为1的时候,100%占空比输出是低电平。从而控制了输出极性。
        在开发板的实验8上稍作修改得到仿真代码,仅仅修改了main函数,如下:
//Mini STM32开发板扩展实例 7
//PWM输出 实验
//正点原子@ALIENTEK
//2010.12.25

int main(void)
{   
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化
uart_init(72,9600);  //串口初始化
LED_Init();      //初始化与LED连接的硬件接口
WM_Init(90,0);  //不分频。PWM频率=72000/900=8Khz
    //可以通过注释:TIM3->CCER|=1<<5;这句,来观看结果,此结果完全软件仿真即可看到。
//在波形观察里面新建一个PORTA.7的信号,就能看到修改TIM3->CCER第5位的值产生的结果了。
while(1)
{
  TIM3->CCER|=1<<5;   //低电平有效      
   delay_ms(10);         
  LED0_PWM_VAL=45;   
   delay_ms(10);
   LED0_PWM_VAL=0;  
  delay_ms(10);
  LED0_PWM_VAL=45;   
  delay_ms(10);
   LED0_PWM_VAL=0;   
  TIM3->CCER&=~(1<<5);//高电平有效      
   delay_ms(10);         
  LED0_PWM_VAL=45;   
   delay_ms(10);
   LED0_PWM_VAL=0;  
  delay_ms(10);
  LED0_PWM_VAL=45;   
  delay_ms(10);
   LED0_PWM_VAL=0;
}
}

仿真结果如下:









使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

720

帖子

2

粉丝