历史上的今天
今天是:2024年12月07日(星期六)
2020年12月07日 | STM32f103 —— timer
2020-12-07 来源:elecfans
#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
史海拾趣
|
傅立叶变换(F.T.)对每个电子工程师来说应该都不陌生,但我们不应该只是记住一个 的公式,其背后的物理意义才是掌握和自如运用各种变换的核心。 寒假前老师把我们叫过去给了个入门讲座。他特地 ...… 查看全部问答> |
|
我想在wince 注册表中设置系统时间并且生成NK,这样档NK重新烧写后,显示为设置的值,而不是一个随机的值。 请问什么键可以更改系统时间?… 查看全部问答> |
|
谁能给我发个netsvwrap.msi安装包 谢谢 微软已经不提供下载了 急用 38572681@163.com 谁能给我发个netsvwrap.msi安装包 谢谢 微软已经不提供下载了 急用 38572681@163.com… 查看全部问答> |
|
现今 嵌入式开发中C代码确实比C++ 代码有明显或较大的效率上的优势么 ? 嵌入式开发中C代码确实比C++ 代码有明显或较大的效率上的优势么 ? 硬件发展的今天 两者之间的区别究竟多大呢? 真的不用C++么? 谢谢!… 查看全部问答> |
|
高手麻烦赐教,我有几个SOT23封装的管子,不知道型号是什么的,我把这几个管子的光刻发上来,麻烦有谁知道的回复,谢谢了WZE、WZS、WZP、3VW、WTZ、9EW、3NW这7个管子我量不像是三极管,倒是像稳压管 本文来自电子工程师之家:http://www.eehome.cn/ ...… 查看全部问答> |
|
我想用STM32F103ZE的TIM2定时器做基本的定时器用,产生4ms左右的中断。定时器的初始化程序如下: void TIM2_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /* Time base con ...… 查看全部问答> |
|
串口0中的 TXD RXD 连在一起可以通讯吗? 现在碰到一个问题:单片机通过串口与外部进行通讯,但是外部器件的发送接收端是用一个IO口的,所以,单片机中的TXD RXD脚要连在一起,发送数据的时候通过 TXD发出,接收数据的时候通过RXD接收,这样可以吗 ...… 查看全部问答> |
|
想编写一个p1.1输出方波为100ms(t1做中断)的程序,用汇编我调试好了,但是c却没反应!不知道哪里出错了 #include<reg51.h> sbit p0=P1^0;void main() { TMOD=0X10; TH1=0X3C; TL1=0XB0 ...… 查看全部问答> |




