初次使用STM32F103,请问TIM2做计数器该如何配置
2014-11-24 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517189
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
第一次使用STM32,定时器使用太复杂了,看了半天的库使用手册也没看懂,所以请各位路过的朋友帮忙。
我想用最简单的办法,就是在void SysTick_Handler(void)中计数到1秒(定时现已正常),然后读取TIM2的计数值,读完后清零,使其重新开始计数,不考虑溢出的问题,TIM2作脉冲计数器,脉冲信号连接到PA0引脚,就是TIM2的时钟输入引脚,经示波器测量信号正常,但就是不知道调用哪个函数读取计数值,如何清零。
配置代码如下,请帮我看看有没有错误:
// PA0配置为浮空输入,捕获脉冲信号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOA, &GPIO_InitStructure);
// TIMER2 作为转速脉冲计数器初始化
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM2 clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 基础设置
TIM_TimeBaseStructure.TIM_Period = 0xffff; //计数值,0.5秒内的数据
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频,此值+1为分频的除数
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0);
TIM_SelectInputTrigger(TIM2, TIM_TS_ETRF);
//使能预装载
TIM_ARRPreloadConfig(TIM2, ENABLE);
//预先清除所有中断位
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
//配置中断
// TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
// 允许TIM2定时器开始计数
TIM_Cmd(TIM2, ENABLE);
}
我想用最简单的办法,就是在void SysTick_Handler(void)中计数到1秒(定时现已正常),然后读取TIM2的计数值,读完后清零,使其重新开始计数,不考虑溢出的问题,TIM2作脉冲计数器,脉冲信号连接到PA0引脚,就是TIM2的时钟输入引脚,经示波器测量信号正常,但就是不知道调用哪个函数读取计数值,如何清零。
配置代码如下,请帮我看看有没有错误:
// PA0配置为浮空输入,捕获脉冲信号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOA, &GPIO_InitStructure);
// TIMER2 作为转速脉冲计数器初始化
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM2 clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 基础设置
TIM_TimeBaseStructure.TIM_Period = 0xffff; //计数值,0.5秒内的数据
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频,此值+1为分频的除数
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0);
TIM_SelectInputTrigger(TIM2, TIM_TS_ETRF);
//使能预装载
TIM_ARRPreloadConfig(TIM2, ENABLE);
//预先清除所有中断位
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
//配置中断
// TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
// 允许TIM2定时器开始计数
TIM_Cmd(TIM2, ENABLE);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |