其他分享
首页 > 其他分享> > 输出比较模式

输出比较模式

作者:互联网

输出比较模式

介绍:

此项功能是用来控制一个输出波形,或者指示一段给定的时间已经到时。当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:

TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。在输出比较模式下,更新事件UEV对OCx输出没有影响。同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一个单脉冲。

输出比较模式的配置步骤:
  1. 选择计数器时钟
  2. 将相应的数据写入TIMx_ARR和TIMx_CCRx中
  3. 如果要产生一个中断请求或者DMA请求,设置CCxIE位或者CCxDE位。
  4. 选择输出模式,例如当计数器CNT与CCRx匹配时翻转OCx的输出引脚,CCRx预装载未用,开启OCx输出且高电平有效,则必须设置OCxM=011,OCxPE=0,CCxP=0,CCxE=1。
  5. 设置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