#ifndef _TIMER_H_
#define _TIMER_H_
#include "stm32f10x.h"
#include "type.h"
// LED定时器,按键定时器,重发定时器
#define LED_TIMER TIM1
#define LED_TIMER_DIV 7200
#define LED_TIMER_PERIOD 2500
#define PWM_TIMER TIM2
#define RESEND_TIMER TIM3
#define RESEND_TIMER_DIV 7200
#define RESEND_TIMER_PERIOD 2500
#define KEY_TIMER TIM4
#define KEY_TIMER_DIV 7200
#define KEY_TIMER_PERIOD 200
void TimerNvicConfig(void);
void TimerConfig(TIM_TypeDef *timer, uint16_t div, uint16_t period);
void TimerEnable(TIM_TypeDef *timer);
void TimerDisable(TIM_TypeDef *timer);
#endif /* _TIMER_H_ */
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "timer.h"
/*
* 三个定时器: 1 灯色 2 按键 3 重发
*/
void TimerNvicConfig(void)
{
NVIC_InitTypeDef NVIC_StructInit;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_StructInit.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_StructInit);
NVIC_StructInit.NVIC_IRQChannel = TIM2_IRQn;
NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_StructInit);
NVIC_StructInit.NVIC_IRQChannel = TIM3_IRQn;
NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_StructInit);
NVIC_StructInit.NVIC_IRQChannel = TIM4_IRQn;
NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_StructInit);
}
void TimerConfig(TIM_TypeDef *timer, uint16_t div, uint16_t period)
{
TIM_TimeBaseInitTypeDef TIM_StructInit;
if(LED_TIMER == timer)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
}
else if(RESEND_TIMER == timer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
}
else if(KEY_TIMER == timer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
}
TIM_StructInit.TIM_Period = period;
TIM_StructInit.TIM_Prescaler = div;
TIM_StructInit.TIM_ClockDivision = TIM_CKD_DIV1; /* 数字滤波器采样频率 */
TIM_StructInit.TIM_CounterMode = TIM_CounterMode_Up; /* 向上计数 */
TIM_StructInit.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(timer, &TIM_StructInit);
TIM_ITConfig(timer, TIM_IT_Update, ENABLE); /* 允许中断 */
TIM_ClearFlag(timer, TIM_FLAG_Update); /* 更新定时器会产生更新时间,清除标志位 */
}
void TimerEnable(TIM_TypeDef *timer)
{
TIM_Cmd(timer, ENABLE);
}
void TimerDisable(TIM_TypeDef *timer)
{
TIM_Cmd(timer, DISABLE);
}
上一篇:STM32 —— LIN
下一篇:STM32f103 —— can通信
推荐阅读最新更新时间:2024-11-13 16:07
设计资源 培训 开发板 精华推荐
- SIP79L15AC 三端小电流负电压稳压器典型应用
- 用于两相、±6A 单 VTT 输出的 LTC3634IUFD 降压稳压器的典型应用电路
- 1MHz 至 10MHz 晶体振荡器
- STEVAL-ISA114V1,基于 VIPer06XS 的演示板,5 V/0.8 W 宽范围 30 kHz 降压转换器
- 汽车微处理器电源监控 - 车身电子
- OP213ESZ-REEL精密比较器典型应用
- 使用 Analog Devices 的 LT3091ER 的参考设计
- 具有两个音频源和第二个 I2S 从设备的典型单声道应用电路,用于 TFA9895 具有扬声器增强保护和多频段动态范围压缩器的升压 D 类音频放大器
- 使用 Alpha and Omega Semiconductor 的 AOZ1213 的参考设计
- LTC3531,USB 转 5V 应用
- 了解PI InnoSwitch-CE,答题赢好礼
- 免费申请|Maxim 高性能模拟工具包(内含78个器件)
- 免费体验业界最快编译速度&最好性能 Quartus II v15.0网页版下载有礼!
- 看是德科技5G精彩专题,让你了解更多关于5G的那些事~ 下载赢好礼!
- 下载有礼|ADI 系统方案精选 (总辑)
- 如何加快你的FPGA设计步伐
- 五一活动上线!动动手,一起来场旧物\"劳动\"大改造吧
- 贸泽翻牌挑战赛—一键配齐的乐趣,它不香吗?快来参与贸泽翻牌挑战赛!
- TI E2E中文社区年终回馈,15 块 CC3200-LAUNCHXL 开发板免费申请中……测评赢好礼喽!
- 答题有礼 惊喜尽在恩智浦技术中心!