我是靠谱客的博主 忧心香水,最近开发中收集的这篇文章主要介绍STM32系列TIMER互补输出详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注:以STM32F334为例。

1.断路功能:

两个断路通道。一个断路通道收集系统级故障(时钟失效和奇偶校验错误等)和应用故障(来自输入引脚和内置比较器),可以在死区持续时间后将输出强制为预定义的电平(有效或无效)。断路 2 通道只包括应用故障,能够将输出强制为无效状态。

2.互补输出和死区插入:

互补信号 OCx 和 OCxN 通过以下多个控制位的组合进行激活:TIMx_CCER 寄存器中的 CCxE 和 CCxNE 位以及 TIMx_BDTR 和 TIMx_CR2 寄存器中的 MOE、OISx、OISxN、 OSSI 和 OSSR 位。

相关位介绍:

                                                                                                                                                        

MOE:主输出使能 (Main output enable)

只要断路输入(BRK 或 BRK2)为有效状态,此位便由硬件异步清零。此位由软件置 1,也可根据 AOE 位状态自动置 1(AOE为自动输出使能位)。此位仅对配置为输出的通道有效。

0:响应断路事件(2 个)。禁止 OC 和 OCN 输出。响应断路事件或向 MOE 写入 0 时:OC 和 OCN 输出被禁止或被强制为空闲状态,具体取决于 OSSI 位。

1:如果 OC 和 OCN 输出的相应使能位(TIMx_CCER 寄存器中的 CCxE 和 CCxNE 位)均置 1,则使能 OC 和 OCN 输出。

                                                                                                                                                        

OSSR:运行模式下的关闭状态选择 (Off-state selection for Run mode)

此位在 MOE=1 时作用于配置为输出模式且具有互补输出的通道。如果定时器中没有互补输出,则不存在 OSSR。

0:处于无效状态时,禁止 OC/OCN 输出(定时器释放输出控制,由强制高阻态的 GPIO 逻辑接管)。

1:处于无效状态时,一旦 CCxE=1 或 CCxNE=1,便使能 OC/OCN 输出并将其设为无效电平(输出仍由定时器控制)。

注: 编程了 LOCK(TIMx_BDTR 寄存器中的 LOCK 位)级别 2 后,此位即无法修改。

                                                                                                                                                        

OSSI:空闲模式下的关闭状态选择 (Off-state selection for Idle mode)

当由于断路事件或软件写操作而使 MOE=0 时,此位作用于配置为输出的通道。

0:处于无效状态时,禁止 OC/OCN 输出(定时器释放输出控制,由强制高阻态的 GPIO 逻辑接管)。

1:处于无效状态时,首先将 OC/OCN 输出强制为其无效电平,然后在死区后将其强制为空闲电平。定时器始终控制输出。

注: 编程了 LOCK(TIMx_BDTR 寄存器中的 LOCK 位)级别 2 后,此位即无法修改。

                                                                                                                                                        

CCxP:捕获/比较x输出极性 (Capture/Compare output polarity)

CCx 通道配置为输出时:

0:OCx 高电平有效

1:OCx 低电平有效

                                                                                                                                                        

CCxNP:捕获/比较x互补输出极性 (Capture/Compare complementary output polarity)

CCx 通道配置为输出时:

0:OCxN 高电平有效。

1:OCxN 低电平有效。

                                                                                                                                                        

CCxE:捕获/比较x输出使能 (Capture/Compare output enable)

CCx  通道配置为输出时:

0:关闭——OCx 未激活。OC1 电平是 MOE、OSSI、OSSR、OISx、OISxN 和 CCxNE 位的函数。

1:开启——OCx 信号输出到相应的输出引脚上,具体取决于 MOE、OSSI、OSSR、OISx、OISxN 和 CCxNE 位。

                                                                                                                                                        

CCxNE:捕获/比较x互补输出使能 (Capture/Compare complementary output enable)

0:关闭——OCxN 未激活。OC1N 电平是 MOE、OSSI、OSSR、OISx、OISxN 和 CCxE位的函数。

1:开启——在相应输出引脚上输出 OC1N 信号,具体取决于 MOE、OSSI、OSSR、OISx、OISxN 和 CCxE 位。

                                                                                                                                                        

CCxP:捕获/比较x输出极性 (Capture/Compare output polarity)

CCx 通道配置为输出:

0:OCx 高电平有效

1:OCx 低电平有效

                                                                                                                                                        

CCxNP:捕获/比较x互补输出极性 (Capture/Compare complementary output polarity)

CCx 通道配置为输出:

0:OCxN 高电平有效。

1:OCxN 低电平有效。

                                                                                                                                                        

3.部分测试结果:

程序流程:配置输出(MOE=1),再制造BRKIN引脚输入事件(MOE=0)。

OISx:TIM_OCIdleState_Set;

OISxN:TIM_OCIdleState_Reset;

Channel0(白色):TIM1_CH1输出

Channel1(棕色):TIM1_CH1N输出

Channel2(红色):TIM1_CH2输出

Channel3(橙色):TIM1_CH2N输出

Channel4(黄色):TIM1_CH3输出

Channel5(绿色):TIM1_CH3N输出

注:经过测试,STM32F334中GPIO初始化后默认输出高电平。

图1 CCxE=1, CCxEN=1, OSSI=1, OSSR=1, CCxP=0, CCxNP=0

图2 CCxE=1, CCxEN=0, OSSI=0, OSSR=0, CCxP=0, CCxNP=0

图3 CCxE=1, CCxEN=0, OSSI=1, OSSR=1, CCxP=0, CCxNP=0

图4 CCxE=1, CCxEN=0, OSSI=1, OSSR=1, CCxP=1, CCxNP=1

图5 CCxE=0, CCxEN=0

图6 CCxE=1, CCxEN=1, OSSI=0, OSSR=0, CCxP=0, CCxNP=0

4.个人总结:

  • 两个状态:

空闲状态→MOE=0→break事件后异步清零或软件清零

运行状态→MOE=1

  • 输出使能(CCxE,CCxNE):

情况1:(CCxE,CCxNE)=  (0,1)或(1,0)或(1,1),允许输出。

其中10代表的通道 在空闲模式下的状态选择由OSSI决定;

其中0代表的通道 在运行模式下关闭状态选择由OSSR决定;

情况2:(CCxE,CCxNE)=  (0,0) ,禁止输出

该情况下,IO输出由GPIO逻辑接管

最后

以上就是忧心香水为你收集整理的STM32系列TIMER互补输出详解的全部内容,希望文章能够帮你解决STM32系列TIMER互补输出详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部