/*******************************************************************************
File name: bsp_driver_GeneralTim .c
Description: 定时器2与定时器3驱动层
Author: Kerlly
Version: v1.0
Date: 20220614
History: 20220614:v1.0:初版
*******************************************************************************/
#include "bsp_driver_GeneralTim.h"
#include "bsp_led.h"
#include "./usart/bsp_usart.h"
extern volatile uint32_t s_time_count1;
extern volatile uint32_t s_time_count2;
extern volatile uint8_t s_timer50ms_flag;
extern volatile uint8_t s_timer1000ms_flag;
/*******************************************************************************
Function:BSP_GeneralTim2_Init
Description: GeneralTim2初始化,通用定时器2
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_GeneralTim2_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 设置中断组为0
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ;//全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;// 设置抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(GENERAL_TIM_CLK, ENABLE);// 开启定时器时钟,即内部时钟CK_INT=72M
TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;// 自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler; // 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 重复计数器的值
TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);// 初始化定时器
TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
TIM_ITConfig(GENERAL_TIM,TIM_IT_Update,ENABLE);
}
/*******************************************************************************
Function:BSP_GeneralTim3_Init
Description: GeneralTim3初始化,通用定时器3
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_GeneralTim3_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 设置中断组为0
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn ;//全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 设置抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 开启定时器时钟,即内部时钟CK_INT=72M
TIM_TimeBaseStructure.TIM_Period= (1000-1);// 自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler= 71; // 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 重复计数器的值
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 初始化定时器
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
}
/*******************************************************************************
Function: Driver_GeneralTim2_Cmd
Description:使能TIM2外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim2_Enable(void)
{
TIM_Cmd(GENERAL_TIM, ENABLE);
}
/*******************************************************************************
Function: Driver_GeneralTim2_Cmd
Description:失能TIM2外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim2_Disable(void)
{
TIM_Cmd(GENERAL_TIM,DISABLE);
}
/*******************************************************************************
Function: Driver_GeneralTim3_Cmd
Description:使能TIM3外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim3_Enable(void)
{
TIM_Cmd(TIM3, ENABLE);
}
/*******************************************************************************
Function: Driver_GeneralTim3_Cmd
Description:失能TIM3外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim3_Disable(void)
{
TIM_Cmd(TIM3,DISABLE);
}
/*******************************************************************************
Function: TIM2_IRQHandler
Description:定时器2中断服务函数,初始化中断向量表
Input: 无
Output: 无
Return: 0 = 成功,1 = 失败
*******************************************************************************/
void TIM2_IRQHandler(void)
{
if ( TIM_GetITStatus( GENERAL_TIM, TIM_IT_Update) != RESET )
{
if (s_time_count1 > 49)
{
s_time_count1 = 0;
//LED1_TOGGLE;
}
s_time_count1 ++;
TIM_ClearITPendingBit(GENERAL_TIM , TIM_FLAG_Update);
}
}
/*******************************************************************************
Function: TIM3_IRQHandler
Description:定时器3中断服务函数,初始化中断向量表
Input: 无
Output: 无
Return: 0 = 成功,1 = 失败
*******************************************************************************/
void TIM3_IRQHandler(void)
{
if ( TIM_GetITStatus( TIM3, TIM_IT_Update) != RESET )
{
if (s_time_count2 > 999)
{
s_time_count2 = 0;
//s_timer50ms_flag;
printf("滴滴滴\r\n");
}
s_time_count2 ++;
TIM_ClearITPendingBit( TIM3 , TIM_FLAG_Update);
}
}
/*********************************************END OF FILE**********************/
/*******************************************************************************
Copyright: 2022, LANSO HONLY
File name: bsp_driver_GeneralTim .h
Description: 底层定时器2与定时器3驱动层
Author: Kerlly
Version: v1.0
Date: 20220614
History: 20220614:v1.0:初版
*******************************************************************************/
#ifndef __BSP_GENERALTIME_H
#define __BSP_GENERALTIME_H
#include "stm32f10x.h"
/**************通用定时器TIM参数定义,只限TIM2、3、4、5************/
#define GENERAL_TIM2 1
#define GENERAL_TIM3 0
#define GENERAL_TIM4 0
#define GENERAL_TIM5 0
#if GENERAL_TIM2
#define GENERAL_TIM TIM2
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM2
#define GENERAL_TIM_Period (1000-1)
#define GENERAL_TIM_Prescaler 71
#define GENERAL_TIM_IRQ TIM2_IRQn
#elif GENERAL_TIM3
#define GENERAL_TIM TIM3
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM3
#define GENERAL_TIM_Period (1000-1)
#define GENERAL_TIM_Prescaler 71
#define GENERAL_TIM_IRQ TIM3_IRQn
#define GENERAL_TIM3_IRQHandler TIM3_IRQHandler
#elif GENERAL_TIM4
#define GENERAL_TIM TIM4
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM4
#define GENERAL_TIM_Period (1000-1)
#define GENERAL_TIM_Prescaler 71
#define GENERAL_TIM_IRQ TIM4_IRQn
#define GENERAL_TIM_IRQHandler TIM4_IRQHandler
#elif GENERAL_TIM5
#define GENERAL_TIM TIM5
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM5
#define GENERAL_TIM_Period (1000-1)
#define GENERAL_TIM_Prescaler 71
#define GENERAL_TIM_IRQ TIM5_IRQn
#define GENERAL_TIM_IRQHandler TIM5_IRQHandler
#endif
/**************************函数声明********************************/
/*******************************************************************************
Function:BSP_GeneralTim2_Init
Description: GeneralTim2初始化,通用定时器2
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_GeneralTim2_Init(void);
/*******************************************************************************
Function:BSP_GeneralTim3_Init
Description: GeneralTim3初始化,通用定时器3
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_GeneralTim3_Init(void);
/*******************************************************************************
Function: Driver_GeneralTim2_Enable
Description:使能TIM2外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim2_Enable(void);
/*******************************************************************************
Function: Driver_GeneralTim2_Disable
Description:失能TIM2外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim2_Disable(void);
/*******************************************************************************
Function: Driver_GeneralTim3_Enable
Description:使能TIM3外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim3_Enable(void);
/*******************************************************************************
Function: Driver_GeneralTim3_Disable
Description:失能TIM3外设
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void Driver_GeneralTim3_Disable(void);
#endif /* __BSP_GENERALTIME_H */
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_driver_GeneralTim.h"
#include "./usart/bsp_usart.h"
uint32_t s_time_count1 = 0; // ms 计时变量
uint32_t s_time_count2 = 0;
int main(void)
{
/* led 端口配置 */
LED_GPIO_Config();
USART_Config();
BSP_GeneralTim2_Init();
BSP_GeneralTim3_Init();
Driver_GeneralTim2_Enable();
//Driver_GeneralTim2_Disable();
Driver_GeneralTim3_Enable();
//Driver_GeneralTim3_Disable();
while(1)
{
// printf("滴滴滴\r\n");
LED1_TOGGLE
}
}
/*********************************************END OF FILE**********************/