输出比较模式
作者:互联网
输出比较模式
介绍:
此项功能是用来控制一个输出波形,或者指示一段给定的时间已经到时。当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:
- 将输出比较模式(TIMx_CCRx中的OCxM位)和输出极性(TIMx_CCER中的CCxP位)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
- 设置中断状态寄存器中的标志位(TIMx_SR中的CCxIF位)。
- 若设置了相应的中断屏蔽(TIMx_DIER中的CCxIF位),则产生一个中断。
- 若设置了相应的使能位(TIMx_DIER中的CCxDE位,TIMx_CR2中的CCDS位选择DMA请求功能),则产生一个DMA请求。
TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。在输出比较模式下,更新事件UEV对OCx输出没有影响。同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一个单脉冲。
输出比较模式的配置步骤:
- 选择计数器时钟
- 将相应的数据写入TIMx_ARR和TIMx_CCRx中
- 如果要产生一个中断请求或者DMA请求,设置CCxIE位或者CCxDE位。
- 选择输出模式,例如当计数器CNT与CCRx匹配时翻转OCx的输出引脚,CCRx预装载未用,开启OCx输出且高电平有效,则必须设置OCxM=011,OCxPE=0,CCxP=0,CCxE=1。
- 设置TIMx_CR1的CEN位启动计数器
TIMx_CCRx能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄存器(OCxPE=0,否则TIMx_CCRx影子寄存器只能在发生下一次更新事件时被更新)。
实验过程:
本次实验采用定时器2的通道1(PA0)进行实验,需要使用示波器查看输出现象,本测试代码的实验现象为,首先输出一个周期为2us、频率为500k的方波,1s后输出有效电平,再过1s后输出无效电平。
#include "stm32f10x.h"
int main(void)
{
//初始化时钟
RCC->APB1ENR|=1<<0; //使能定时器2时钟
RCC->APB2ENR|=1<<2; //使能GPIOA时钟
//使能相应IO口
GPIOA->CRL&=0xFFFFFFF0; //清除A0
GPIOA->CRL|=0x0000000B; //复用推挽输出
//初始化TIM2
TIM2->ARR = 72; //72*1/72us
TIM2->CCMR1&=~(3<<0); //CC1S CC1通道输出
TIM2->CCMR1&=~(1<<3); //OC1PE 禁止预装载功能
TIM2->CCER&=~(1<<1); //CC1P 高电平有效
TIM2->CCER|=1<<0; //CC1E 使能OC1输出
TIM2->CR1|=1<<0; //CEN 使能定时器
//翻转模式
TIM2->CCMR1&=~(7<<4);
TIM2->CCMR1|=3<<4; //OC1M 翻转电平
delay_ms(1000);
//匹配时设置通道为有效电平
TIM2->CCMR1&=~(7<<4);
TIM2->CCMR1|=1<<4; //OC1M 匹配时设置通道为有效电平
delay_ms(1000);
//匹配时设置通道为无效电平
TIM2->CCMR1&=~(7<<4);
TIM2->CCMR1|=2<<4; //OC1M 匹配时设置通道为无效电平
delay_ms(1000);
return 0;
}
标签:输出,TIMx,模式,电平,寄存器,CCRx,比较,OCxM 来源: https://blog.csdn.net/wuyanboplus/article/details/121037372