STM32之寄存器操作基本定时器

配置过程:

  1. 使能基本定时器的时钟;
  2. 设置自动装载值,APRE=0,TIMx_ARR寄存器没有缓冲;
  3. 设置预分频器系数;
  4. 清除中断标志位;
  5. 配置中断优先级并且使能该中断;
  6. 允许TIMx产生更新中断;
  7. 启动定时器;

basic_timer.h文件

#ifndef __BASIC_TIMER_H
#define __BASIC_TIMER_H

#include "stm32f10x.h"

#define My_BASIC_TIM                  TIM6
#define My_RCC_TIM6_EN     (uint32_t)0x00000010
#define My_BASIC_UIF       (uint32_t)0x00000001           // Update Interrupt Flag
#define My_BSIC_UIE        (uint32_t)0x00000001           // Update Interrupt Enable
#define My_BASIC_CEN       (uint32_t)0x00000001           // Counter Enable

void Base_Timer_Config(uint16_t arr, uint16_t psc);
	
#endif

basic_timer.c文件

#include "basic_timer.h"

/** 函数功能:基本定时器的初始配置
  * arr:计数周期
  * psc:定时器的分频系数 Fck_cnt = Fck_psc/psc
  */
void Base_Timer_Config(uint16_t arr, uint16_t psc)
{
	/* 定时器时钟使能 */
	RCC->APB1ENR |= My_RCC_TIM6_EN;
	
	/* 设置自动装载值 = arr */
	My_BASIC_TIM->ARR = arr-1;
	
	/* 设置预分频系数 = psc*/
	My_BASIC_TIM->PSC = psc-1;
	
	/* 清除中断标志位 */
	My_BASIC_TIM->SR &= ~My_BASIC_UIF;
	
	/* TIM6抢占优先级 = 0,响应优先级 = 0*/
	NVIC->IP[TIM6_IRQn] = (uint8_t)0x00; 
	
	/* 使能TIM6的中断 */
	NVIC->ISER[TIM6_IRQn >> 0x05] = (uint32_t)0x01 << (TIM6_IRQn & (uint8_t)0x1F);

	/* 使能基本定时器中断 */
	My_BASIC_TIM->DIER |= My_BSIC_UIE;
	
	/* 开启定时器 */
	My_BASIC_TIM->CR1 |= My_BASIC_CEN;
}

备注:头文件及源文件再修改一下,便可兼容TIM7。
参考资料:
1.野火STM32教程;
2.STM32中文参考手册;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值