赞
踩
Driver_TIM5.c
通用定时器的通道1和2可以做时钟源
#include "Driver_TIM5.h" void Driver_TIM5_Init(void) { /* 1. 开启时钟*/ /* 1.1 定时器5的时钟 */ RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; /* 1.2 GPIO的时钟 PA */ RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; /* 2. 设置GPIO的复用推挽输出 PA1 CNF=10 MODE=11*/ GPIOA->CRL |= (GPIO_CRL_CNF1_1 | GPIO_CRL_MODE1); GPIOA->CRL &= ~GPIO_CRL_CNF1_0; /* 3. 定时器配置 */ /* 3.1 预分频器的配置 */ TIM5->PSC = 720 - 1; /* 3.2 自动重装载寄存器的配置 */ TIM5->ARR = 100 - 1; /* 3.3 计数器的计数方向 0=向上 1=向下*/ TIM5->CR1 &= ~TIM_CR1_DIR; /* 3.4 配置通道2的捕获比较寄存器 */ TIM5->CCR2 = 50; /* 3.5 把通道2配置为输出 CCMR1_CC2S=00 */ TIM5->CCMR1 &= ~TIM_CCMR1_CC2S; /* 3.6 配置通道的输出比较模式 CCMR1_OC2M=110 */ TIM5->CCMR1 |= TIM_CCMR1_OC2M_2; TIM5->CCMR1 |= TIM_CCMR1_OC2M_1; TIM5->CCMR1 &= ~TIM_CCMR1_OC2M_0; /* 3.7 使能通道2 CCER_CC2E=1 */ TIM5->CCER |= TIM_CCER_CC2E; /* 3.8 设置通道的极性 0=高电平有效 1=低电平有效 */ TIM5->CCER &= ~TIM_CCER_CC2P; //TIM2->DIER |= TIM_DIER_UIE; // 使能更新中断 //NVIC_EnableIRQ(TIM2_IRQn); // 使能NVIC中的TIM2中断 } /*void TIM2_IRQHandler(void) { if (TIM2->SR & TIM_SR_UIF) { // 检查更新中断标志位 TIM2->SR &= ~TIM_SR_UIF; // 清除更新中断标志位 // 在这里处理更新事件,例如刷新LED状态 GPIOA->ODR ^= GPIO_ODR_OD5; // 切换LED状态 } }*/ void Driver_TIM5_Start(void) { /* 使能计数器 */ TIM5->CR1 |= TIM_CR1_CEN; } void Driver_TIM5_Stop(void) { /* 失能计数器 */ TIM5->CR1 &= ~TIM_CR1_CEN; } void Driver_TIM5_SetDutyCycle(uint8_t dutyCycle) { TIM5->CCR2 = dutyCycle; }
Driver_TIM5.h
#ifndef __DRIVER_TIM5_H #define __DRIVER_TIM5_H #include "stm32f10x.h" void Driver_TIM5_Init(void); void Driver_TIM5_Start(void); void Driver_TIM5_Stop(void); void Driver_TIM5_SetDutyCycle(uint8_t dutyCycle); #endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。