初次使用STM32F103,请问TIM2做计数器该如何配置

 我来答
huanglenzhi
2014-11-24 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数: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);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式