1、TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数 例如 :时钟频率=72/(时钟预分频+1)。
2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时时间)累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到)。
3、TIM_TimeBaseStructure.TIM_CounterMode=TIM1_CounterMode_Up; //定时器模式向上计数。
4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值。
5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2。
6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断溢出中断。
7、 TIM_Cmd(TIM2, ENABLE);//打开定时器或者:
TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999,72M/
(35999+1)/2=1Hz 1秒中断溢出一次。
8、 TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000 ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒。
通用定时器实现简单定时功能
以TIME3为例作为说明,简单定时器的配置如下:
void TIM3_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM3); //复位TIM2定时器
/* TIM2 clock enable [TIM2定时器允许]*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* TIM2 configuration */
TIM_TimeBaseStructure.TIM_Period = 49; // 0.05s定时
TIM_TimeBaseStructure.TIM_Prescaler = 35999; // 分频36000
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数方向向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
/* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
/* TIM2 enable counter [允许tim2计数]*/
TIM_Cmd(TIM3, ENABLE);
}
通用定时器实现外部脉冲计数功能(对外部时间计数)
以TIME2为例作为说明,提供一个小程序以供参考(只提供主程序,不提供其它的基础配置):
int main(void)
{
#ifdef DEBUG
debug();
#endif
int i_Loop;
int n_Counter;
RCC_Configuration(); // System Clocks Configuration
NVIC_Configuration(); // NVIC configuration
GPIO_Configuration(); // Configure the GPIO ports
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_Clock = USART_Clock_Disable;
USART_InitStructure.USART_CPOL = USART_CPOL_Low;
USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
/* Configure the USARTx */
USART_Init(USART1, &USART_InitStructure);
/* Enable the USARTx */
USART_Cmd(USART1, ENABLE)
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2, ENABLE);
for(i_Loop = 0; i_Loop < 1000; i_Loop ++)
{
GPIO_SetBits(GPIOC, GPIO_Pin_6);
Delay(100);
GPIO_ResetBits(GPIOC, GPIO_Pin_6);
Delay(100);
}
n_Counter = TIM_GetCounter(TIM2);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
printf("检测到的脉冲个数为:%d\n",n_Counter);
while (1) {
}
}
上一篇:STM32的BOOT(模式)
下一篇:stm32 重定义printf导致无法跳到main函数问题
推荐阅读最新更新时间:2024-03-16 15:15
设计资源 培训 开发板 精华推荐
- TI 样片免费申请,晒样片赢好礼☞2
- Wi-Fi智能战队征集令,Open1081免费试用进行中...
- 有奖直播|基于Source-down技术的全新英飞凌MOSFET,有效提升功率密度,肉眼可见
- 直播已结束【TI MSPM0应用详解:个人电子、楼宇自动化和医疗】
- 艾睿电子直播:聚焦“TI FPD-Link III 汽车芯片组” ,汽车视频传输理想解决方案
- EEWORLD跨年芯币竞价——示波器、开发板、技术图书等你拿
- EEWORLD月度问答榜(第3期)
- ADI有奖直播:基准电压源产品技术及应用选择 7月25日上午10:00-11:30 不容错过~
- 似兰斯馨,一个老电子工程师的点滴足迹
- 助力雅特力成长,说说你与雅特力的故事