56 lines
2.1 KiB
C
56 lines
2.1 KiB
C
#include "bsp_timer.h"
|
||
#include "stm32f10x_tim.h"
|
||
#include "stm32f10x_rcc.h"
|
||
#include "misc.h"
|
||
#include "stm32f10x.h"
|
||
|
||
#define BSP_TIMER_USER_SYSTICK_TYPE (TIM2)
|
||
#define BSP_TIMER_USER_SYSTICK_RCC (RCC_APB1Periph_TIM2)
|
||
#define BSP_TIMER_USER_SYSTICK_IRQN (TIM2_IRQn)
|
||
#define BSP_TINER_USER_SYSTICK_PRESCALER (72 - 1)
|
||
#define BSP_TINER_USER_SYSTICK_PERIOD (1000u)
|
||
|
||
|
||
|
||
static void bsp_timer_2_init(void)
|
||
{
|
||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||
NVIC_InitTypeDef NVIC_InitStructure;
|
||
|
||
/* 1. 初始化时钟 */
|
||
RCC_APB1PeriphClockCmd(BSP_TIMER_USER_SYSTICK_RCC, ENABLE);
|
||
/* 2. 初始化定时器参数,设置自动重装值,分频系数,计数方式等 */
|
||
TIM_TimeBaseStructure.TIM_Period = BSP_TINER_USER_SYSTICK_PERIOD;
|
||
TIM_TimeBaseStructure.TIM_Prescaler =BSP_TINER_USER_SYSTICK_PRESCALER;
|
||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||
TIM_TimeBaseInit(BSP_TIMER_USER_SYSTICK_TYPE, &TIM_TimeBaseStructure);
|
||
/* 3. 设置 TIM3_DIER 允许更新中断 */
|
||
TIM_ITConfig(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update, ENABLE);
|
||
/* 4. TIM3 中断优先级设置。 */
|
||
|
||
NVIC_InitStructure.NVIC_IRQChannel = BSP_TIMER_USER_SYSTICK_IRQN; //TIM3 中断
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
|
||
NVIC_Init(&NVIC_InitStructure); //初始化 NVIC 寄存器
|
||
/* 5. 使能定时器2 */
|
||
TIM_Cmd(BSP_TIMER_USER_SYSTICK_TYPE, ENABLE);
|
||
}
|
||
|
||
// /* 6. 编写中断服务函数 */
|
||
// void bsp_timer_user_systick_isr_process(void) //TIM3 中断
|
||
// {
|
||
// if (TIM_GetITStatus(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update) != RESET)
|
||
// {
|
||
// // 硬件置了1,需要软件来清0
|
||
// TIM_ClearITPendingBit(BSP_TIMER_USER_SYSTICK_TYPE, TIM_IT_Update);
|
||
// /* add your code here */
|
||
|
||
// }
|
||
// }
|
||
void bsp_timer_init(void)
|
||
{
|
||
bsp_timer_2_init();
|
||
}
|