寄存器实现
tim6.h
#ifndef __TIM6_H
#define __TIM6_H
#include "stm32f10x.h"void TIM6_Init(void);#endiftim.c
#include "tim6.h"
#include "led.h"
void TIM6_Init(void)
{
// 1. 开启时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
// 2. 设置预分频值7199,做7200分频,得到 10000Hz
TIM6->PSC = 7199;
// 3. 设置自动重装载值9999,表示计数10000次产生一个UEV
TIM6->ARR = 9999;
// 4. 更新中断使能
TIM6->DIER |= TIM_DIER_UIE;
// 5. NVIC配置
NVIC_SetPriorityGrouping(3);
NVIC_SetPriority(TIM6_IRQn, 2);
NVIC_EnableIRQ(TIM6_IRQn);
// 6. 开启定时器
TIM6->CR1 |= TIM_CR1_CEN;
}
// 中断服务程序
void TIM6_IRQHandler(void)
{
// 清除中断标志位
TIM6->SR &= ~TIM_SR_UIF;
// 翻转LED2
LED_Toggle(LED2);
}main.c
#include "usart.h"
#include "led.h"
#include "tim6.h"
int main(void)
{
// 初始化
USART_Init();
LED_Init();
TIM6_Init();
while(1)
{
}
}HAL库实现
CubeMX设置
SYS,RCC,Clock Configuration都照常设置
TIM6设置

PA1设置

代码
tic.c
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
// 定时器6产生中断。任何一个定时器产生中断都会进入到这个方法中,所以需要判断下定时器实例
if (htim->Instance == TIM6)
{
// 翻转LEDB
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
}
}
/* USER CODE END 1 */
main.c
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM6_Init();
// 启动定时器6
HAL_TIM_Base_Start_IT(&htim6);
while (1)
{
}
}