STM32复习笔记(十八) —— 高级定时器(输出比较)

STM32复习笔记(十八) —— 高级定时器(输出比较)

1.配置步骤

1)选择计数器时钟 (内部,外部,预分频器)
2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中
3)可设置中断,TIMx_DIER
4)选择输出模式,TIMx_CCMRx and TIMx_CCER
5)启动计数器,TIMx_CR1

2.本例程软件设计思路

使用 TIM1 输出比较,从 TIM1_CH1 通道输出占空比为30% PWM 波

3.代码编写

于 main.c 中编写代码

#include "stm32f10x.h"
#include "dr_usart.h"

void TIM1_CH1_GPIO_Config(void)
{
	/* 开启 GPIOA 时钟, TIM1_CH1 对应IO口为 PA8 */
	RCC->APB2ENR |= ((uint16_t)0x01 << 2);
	
	/* 开启 AFIO 时钟 */
	RCC->APB2ENR |= ((uint16_t)0x01 << 0);
	
	/* 配置 PA8 为复用推挽输出,10MHz */
	GPIOA->CRH &= ~((uint32_t)0x0F << 0);
	GPIOA->CRH |=  ((uint32_t)0x09 << 0);
	
	/* 复用 PA8 到 TIM1 */
	AFIO->MAPR &= ~((uint32_t)0x03 << 6);
	AFIO->MAPR |=  ((uint32_t)0x01 << 6);
}

void TIM1_Config(void)
{
	/* 开启 TIM1 时钟,挂载于 APB2 总线 */
	RCC->APB2ENR |= ((uint32_t)0x01 << 11);
	
	/* 向上计数 */
	TIM1->CR1 &= ~((uint16_t)0x07 << 4);
	
	/* 时钟分频因子 */
	TIM1->CR1 &= ~((uint16_t)0x03 << 8);
	
	/* 重装载值 9999+1 */
	TIM1->ARR = ((uint16_t)9999);
	
	/* 预分频器值 71+1 */
	TIM1->PSC = ((uint16_t)71);
	
	/* 重复计数器值 0 */
	TIM1->RCR = ((uint16_t)0);
	
	/* --------- --------- --------- --------- --------- --------- --------- - */
	
	/* 清除 CC1E,禁止输出 */
	TIM1->CCER &= ~((uint16_t)0x01 << 0);
	
	/* 清除 CCMR1 输出模式配置 */
	TIM1->CCMR1 &= ~((uint16_t)0xFF << 0);
	
	/* PWM 模式1 */
	TIM1->CCMR1 |= ((uint16_t)0x06 << 4);
	
	/* 输出高电平有效 */
	TIM1->CCER &= ~((uint16_t)0x01 << 1);
	
	/* 输出使能 */
	TIM1->CCER |= ((uint16_t)0x01 << 0);
	
	/* 输出比较寄存器值 3000 */
	TIM1->CCR1 = ((uint16_t)3000);
	
	/* 主输出使能 */
	TIM1->BDTR |= ((uint16_t)0x01 << 15);
	
	/* 开始计数 */
	TIM1->CR1 |= ((uint16_t)0x01 << 0);
}

int main(void)
{
	/* --------- (81 = 30 + 51) --------- --------- --------- --------- ------ */
	
	User_Init(); /* 中断优先级分组 (16级抢占优先级) and 配置串口1打印调试信息 */
	
	delay_(1);   /* 粗略延时 (约为ms级), 置于此处, 便于使用时复制调用 */
	
	/* --------- 换行基准 --------- --------- --------- --------- --------- -- */
	
	/* 配置 GPIOA GPIO_Pin_8 */
	TIM1_CH1_GPIO_Config();

	/* 配置 TIM1 */
	TIM1_Config();
	
	while(1);
}

点击编译,如无错误可进入仿真界面
SSS018.001
打开逻辑分析仪 (添加 PA8)
STM32复习笔记(十八) —— 高级定时器(输出比较)_第1张图片
STM32复习笔记(十八) —— 高级定时器(输出比较)_第2张图片
点击运行
STM32复习笔记(十八) —— 高级定时器(输出比较)_第3张图片
经验证,程序运行结果与预想一致

你可能感兴趣的:(stm32)