stm32f10x基本定时器驱动
来源:互联网 发布:windows mstsc 编辑:程序博客网 时间:2024/06/05 16:27
/****************************************************************************** Copyright (C), 2001-2011, DCN Co., Ltd. ****************************************************************************** File Name : sys_tim.c Version : Initial Draft Author : Hui.Liu Created : 2015/4/21 Last Modified : Description : sys_tim.c Function List : History : 1.Date : 2015/4/21 Author : Hui.Liu Modification: Created file******************************************************************************/#include "stm32f10x.h"#include "sys_tim.h"#define ENTER_INTERRUPT()#define EXIT_INTERRUPT()typedef struct{TIM_TypeDef *tim;uint32_t RCC_Clk;uint16_t IRQn;uint8_t PreemptionPriority;uint8_t SubPriority;} TIM_STRUCT;void (*TIM_Interrupt[4])(void) ={(void *)0,(void *)0,(void *)0,(void *)0,};const TIM_STRUCT TIMx[4] ={TIM1, RCC_APB2Periph_TIM1, TIM1_UP_IRQn, TIM1_PreemptionPriority, TIM1_SubPriority,TIM2, RCC_APB1Periph_TIM2, TIM2_IRQn, TIM2_PreemptionPriority, TIM2_SubPriority,TIM3, RCC_APB1Periph_TIM3, TIM3_IRQn, TIM3_PreemptionPriority, TIM3_SubPriority,TIM4, RCC_APB1Periph_TIM4, TIM4_IRQn, TIM4_PreemptionPriority, TIM4_SubPriority,};void sys_timInit(TIM_ENUM TIM_x, uint16_t Prescaler, uint16_t Period, void(*CallBack)(void)){TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;if(TIMx[TIM_x].tim == TIM1){RCC_APB2PeriphClockCmd(TIMx[TIM_x].RCC_Clk, ENABLE);}else{RCC_APB1PeriphClockCmd(TIMx[TIM_x].RCC_Clk, ENABLE);}TIM_TimeBaseInitStruct.TIM_Prescaler = Prescaler ? Prescaler - 1 : 0;TIM_TimeBaseInitStruct.TIM_Period = Period ? Period - 1 : 0;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIMx[TIM_x].tim, &TIM_TimeBaseInitStruct);NVIC_InitStruct.NVIC_IRQChannel = TIMx[TIM_x].IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = TIMx[TIM_x].PreemptionPriority;NVIC_InitStruct.NVIC_IRQChannelSubPriority = TIMx[TIM_x].SubPriority;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);TIM_Interrupt[TIM_x] = CallBack;TIM_ITConfig(TIMx[TIM_x].tim , TIM_IT_Update, ENABLE);TIM_Cmd(TIMx[TIM_x].tim, DISABLE);}void sys_timOpen(TIM_ENUM TIM_x){TIM_ClearFlag(TIMx[TIM_x].tim, TIM_IT_Update);TIM_Cmd(TIMx[TIM_x].tim, ENABLE);}void sys_timClose(TIM_ENUM TIM_x){TIM_Cmd(TIMx[TIM_x].tim, DISABLE);}void TIM_UpdateHandler(TIM_ENUM TIM_x){if(TIM_GetITStatus(TIMx[TIM_x].tim, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIMx[TIM_x].tim, TIM_IT_Update);if(TIM_Interrupt[TIM_x] != (void *)0){(*TIM_Interrupt[TIM_x])();}}}#ifdef TIM_1_ENABLEvoid TIM1_UP_IRQHandler(void){ENTER_INTERRUPT();TIM_UpdateHandler(TIM_1);EXIT_INTERRUPT();}#endif#ifdef TIM_2_ENABLEvoid TIM2_IRQHandler(void){ENTER_INTERRUPT();TIM_UpdateHandler(TIM_2);EXIT_INTERRUPT();}#endif#ifdef TIM_3_ENABLEvoid TIM3_IRQHandler(void){ENTER_INTERRUPT();TIM_UpdateHandler(TIM_3);EXIT_INTERRUPT();}#endif#ifdef TIM_4_ENABLEvoid TIM4_IRQHandler(void){ENTER_INTERRUPT();TIM_UpdateHandler(TIM_4);EXIT_INTERRUPT();}#endif
<pre name="code" class="cpp">/****************************************************************************** Copyright (C), 2001-2011, DCN Co., Ltd. ****************************************************************************** File Name : sys_tim.h Version : Initial Draft Author : Hui.Liu Created : 2015/4/21 Last Modified : Description : sys_tim.c header file Function List : History : 1.Date : 2015/4/21 Author : Hui.Liu Modification: Created file******************************************************************************/#ifndef __SYS_TIM_H__#define __SYS_TIM_H__/*示例:void LED1(void){ LED_1 = !LED_1;}int main(void){ sys_timInit(TIM_4, 72, 1000, LED1); sys_timOpen(TIM_4); while(1) { }return 0;}*/typedef enum{ TIM_1 = 0, TIM_2, TIM_3, TIM_4,}TIM_ENUM;/*TIM 使能配置*///#define TIM_1_ENABLE//#define TIM_2_ENABLE//#define TIM_3_ENABLE#define TIM_4_ENABLE/*TIM 优先级配置*/#define TIM1_PreemptionPriority (uint8_t)1#define TIM1_SubPriority (uint8_t)1#define TIM2_PreemptionPriority (uint8_t)1#define TIM2_SubPriority (uint8_t)1#define TIM3_PreemptionPriority (uint8_t)1#define TIM3_SubPriority (uint8_t)1#define TIM4_PreemptionPriority (uint8_t)1#define TIM4_SubPriority (uint8_t)1void sys_timInit(TIM_ENUM TIM_x, uint16_t Prescaler, uint16_t Period, void(*CallBack)(void));void sys_timOpen(TIM_ENUM TIM_x);void sys_timClose(TIM_ENUM TIM_x);#endif
0 0
- stm32f10x基本定时器驱动
- STM32F10x 学习笔记10(基本定时器)
- STM32F10x 学习笔记之基本定时器
- STM32F10x 学习笔记10(基本定时器)
- STM32F10x的定时器使用
- STM32F10X便利的定时器C++驱动设计(基于基础库)
- [STM32F10x] 利用定时器测量脉冲宽度
- STM32F10x 学习笔记 2 (SysTick 定时器)
- STM32F10x 学习笔记之SysTick 定时器
- 浅谈STM32F10X芯片SysTick系统时钟定时器
- stm32f10x
- 基于stm32f10x Systick定时器编写延时函数的讲解
- STM32定时器学习---基本定时器
- 2410定时器驱动实现
- game-定时器驱动行走
- 驱动编程之定时器
- 字符设备驱动--定时器
- 字符设备驱动-定时器
- 使用AppCan实现分享网站功能
- session深入解读
- JavaScript - 获取系统当前时间
- Java-BigDecimal 分析
- 做OSG开发出现error C2653: “osgViewer”: 不是类或命名空间名称
- stm32f10x基本定时器驱动
- Android 开源框架之 Android-async-http 源码解读
- OpenCV读入图像检测人脸
- BroadcastReceiver(广播接收者)
- HighCharts使用
- json遇到关键字处理方法与jsoncofig配置使用方法
- Too many arguments to function call, expected 0, have 5
- 雅阁错题笔记之c++模板|预处理命令1
- 就哈发酒疯哈就罚款