请教,STM32555定时器产生脉冲的ETR与外部脉冲计数

stm32基于定时器计量外部脉冲的实现(Gavin)
选用stm32f103c8作主控制器,来计量外部输入的脉冲数.选用外部时钟触发模式(TIM—ETRClockMode2Config),下面介绍具体的实现:
1、设置GPIO,根据硬件电路原理图,配置对应的资源IO引脚。
GPIO_InitTypeDef&GPIO_InitS
GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_0
GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_IN_FLOATING;&
GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;&//50M时钟速度
GPIO_Init(GPIOA,&&GPIO_InitStructure);
注意:(1)stm32f103c8只有TIM1_ETR(PA12,Pin33),和TIM2_CH1_ETR(PA0,Pin10)两个可以用。其它更多管脚的芯片,有更多的可以输入(如100管脚的有4个可以输入的);(2)外部时钟输入与中断无关;(3)stm32f103c8的这个两个应用中,不需要重映射。对于哪些需要重映射,参考数据手册。
2、设置RCC,RCC_ClocksTypeDef&RCC_ClockF
SystemInit();&//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置.
RCC_GetClocksFreq(&RCC_ClockFreq);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,&ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,&ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,&ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,&ENABLE);
3、第三步,设置定时器模式
void&TIM1_Configuration(void)&//只用一个外部脉冲端口
&TIM_TimeBaseInitTypeDef&TIM_TimeBaseS
&//配置TIMER1作为计数器
&TIM_DeInit(TIM1);
&TIM_TimeBaseStructure.TIM_Period&=&0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler&=&0x00;
TIM_TimeBaseStructure.TIM_ClockDivision&=&0x0;
TIM_TimeBaseStructure.TIM_CounterMode&=&TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&&TIM_TimeBaseStructure);&//&Time&base&configuration
TIM_ETRClockMode2Config(TIM1,&TIM_ExtTRGPSC_OFF,&TIM_ExtTRGPolarity_NonInverted,&0);
TIM_SetCounter(TIM1,&0);
TIM_Cmd(TIM1,&ENABLE);
void&TIM2_Configuration(void)&//只用一个外部脉冲端口
&TIM_TimeBaseInitTypeDef&TIM_TimeBaseS
&//配置TIMER2作为计数器
&TIM_DeInit(TIM2);
&TIM_TimeBaseStructure.TIM_Period&=&0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler&=&0x00;
TIM_TimeBaseStructure.TIM_ClockDivision&=&0x0;
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);
4、可以在主函数中读取计数器的值,其它的应用,就看具体的情况了。
u16&COUN1=0;&u16&COUN2=0;
int&main(void)
&系统初始化;
&COUN1=TIM_GetCounter(TIM1);//&COUN1=TIM1-&CNT;&
&COUN2=TIM_GetCounter(TIM2);//&COUN2=TIM2-&CNT;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。timsetcounter tim2 0免费文档下载_文库下载
1亿文档 免费下载
当前位置: > timsetcounter tim2 0
timsetcounter tim2 0
{ 19. 20. 21. 22. 23. 24. 25. } } _delay_us(t * 1000); if (t & 65) { t = 65; TIM_SetCounter(TIM2,0); TIM_SetAutoreload(TIM2,...(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); for(i_Loop = 0; i_Loop & ...(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); for(i_Loop = 0; i_Loop & ...TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0); TIM_SetCounter(TIM2, 0);//把 TIM2 的值设置为 0 TIM_Cmd(...(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); for(i_Loop = 0; i_Loop & ...(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInver ted,0); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); for(i_Loop = 0; i_Loop & ...暂无评价|0人阅读|0次下载|举报文档TIM库函数_电子...TIM_SetCounter 设置 TIMx 计数器寄存器值 TIM_Set.../* Check if the TIM2 Capture Compare 1 ...{ 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. } } g_TimingTick = g_TimingTickOld + if (temp & 1000) { TIM_SetCounter(TIM2, 0)...(num == 0) { TIM_Cmd(TIM2, ENABLE); TIM_SetCounter(TIM2, 0x0000); } else { Ir_data[2*(num-1)] = TIM_GetCounter(TIM2); Ir_data[2*...TIM_SetCounter(TIM1, 0); TIM_Cmd(TIM1, ENABLE); } void TIM2_Configuration(void) //只用一个外部脉冲端口 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStruc...文档分类:
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
您的浏览器不支持进度条
下载文档到电脑,查找使用更方便
还剩?页未读,继续阅读
播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表STM32L15x —— 通用定时器(TIM).pdf.pdf
文档介绍:
Same as STM32F-1
通用定时器(TIM)
TIM ——概述
? 16位计数器
? 自动装载 ITR 1 Trigger/Clock
ITR 2 Trigger
? 向上,向下和中间计数 ITR 3 Controller Output
? 高达4个16位高分辨率捕 ITR 4
获/比较通道
16-Bit Prescaler
? 可配置的通道方向:输入/
输出 Auto Reload REG
? 输出比较+/- 16-Bit Counter
? 输入捕获
? PWM输入捕获
? 同步 pare
? 最多6个IT/DMA请求 pare
? OC 信号管理
? 编码模式
TIM ——计数模式
? 支持三种计数模式:
? 向上计数模式
? 向下计数模式
? 中间计数模式
中间计数向上计数向下计数
TIM ——更新事件
? 更新指预装载寄存器中的数值装载入影子寄存器,根据是否
使能了自动装载功能(ARPE位),更新发生在:
? 每个更新事件(UEV)
? 更新事件的产生:
? 当计数器向上或向下溢出
? 由软件置位TIMx_EGR寄存器的UG位
? 更新事件请求(UEV)可以选择以下两种:
? 仅在计数器向上或向下溢出时产生更新事件请求
? 在计数器发生向上或向下溢出,或软件置位了UG位,或由从模式控制
器发出了更新请求时,产生更新事件请求
TIM ——计数器时钟选择
? 可选择以下时钟源
? 提供的内部时钟TIMxCLK
? 内部触发输入时钟:
? ITR1 / ITR2 / ITR3 / ITR4
TIMxCLK Trigger Controller
? 使用一个定时器作为另一个定时器
的预分频器
? 外部时钟模式1——外部输入引脚
Polarity selection & Edge
? Pin 1: TI1FP1 或 TI1F_ED Detector & Prescaler & Filter
? Pin 2: TI2FP2 TRGO
ITR2 Controller
? 外部时钟模式2——外部触发输入 ITR3
? 由软件控制使能/禁止
? 可配置触发边沿 TI1FP1
? 4位的外部触发过虑
? 外部触发信号的预分频:
TIM —— 4通道的通用定时器(TIM2/3/4)
? TIM2/ 3/ 4使用低速APB总线(APB1)
? 内部时钟最高为 32 MHz ITR 1 Trigger/Clock
? 16位计数器 ITR 2 Trigger
? 向上,向下和中间计数模式 ITR 3 Controller Output
? 自动装载 ITR 4
? 4个16位分辨率的捕获/比较通道
? 可配置通道方向:输入/输出
16-Bit Prescaler
? 输出比较
? 输入捕获 Auto Reload REG
? PWM 输入捕获(下降沿/上升沿/ 下降和上升沿) +/- 16-Bit Counter
? 单脉冲模式
? 主/从模式
? 和外部触发同步
? 触发或门控模式
CH2 pare CH2
? 编码器模式 pare
? 6 个独立的 IRQ/DMA 请求 CH3 CH3
? 每个更新事件
? 每个捕获和比较事件 CH4
? 每个输入触发
TIM —— 2通道的通用定时器(TIM9)
? TIM9使用高速APB总线(APB2)
? 内部时钟最高 32 MHz Trigger/Clock
? 16位计数器
Clock Trigger
? 向上计数模式
ITRx Controller Output
? 自动装载
? 2个16位分辨率的捕获/比较通道
? 可配置的通道方向:输入/ 输出
? 输出比较 16-Bit Prescaler
? 输入捕获 Auto Reload REG
? PWM输入捕获(下降沿/上升沿/ 下降和上升沿)
+ 16-Bit Counter
? 单脉冲模式
? 同步(主/从模式)
? 和外部触发信号同步 CH1 CH1
? 触发或门控模式 GPIO
? 独立的 IRQ 请求 pare
CH2 pare CH2
? 每个更新事件
? 每个捕获/比较事件
? 每个输入触发
TIM —— 1通道的通用定时器(TIM10)
? TIM10使用高速APB总线(APB2) Trigger/Clock
? 内部时钟最高 32 MHz ETR Trigger
? 16位计数器 Controller Output
? 向上计数模式
? 自动装载
? 1个16位分辨率的捕获/比较通道
16-Bit Prescaler
? 可配置的通道方向:输入/输出
? 输出比较
? PWM Auto Reload REG
? 输入捕获(上升沿/下降沿/上升沿和下降沿) + 16-Bit Counter
? 独立的IRQ请求 GPIO
? 每个更新事件 CH1 CH1
? 每个捕获/比较事件 pare
Same as STM32F-1
Measure LSE/LSI/RTC frequency
TIM —— 1通道的通用定时器(TIM11)
? TIM11使用高速APB总线(APB2) Trigger/Clock
? 内部时钟最高 32 MHz LSE ETR Trigger
? 16位计数器 Controller Output
? 向上计数模式
? 自动装载
? 1个16位分辨率的捕获/比较通道
16-Bit Prescaler
? 可配置的通道方向:输入/输出
? 输出比较
? PWM Auto Reload REG
? 输入捕获(上升沿/下降沿/上升沿和下降沿) + 16-Bit Counter
? 独立的IRQ请求 GPIO
? 每个更新事件 CH1 CH1
? 每个捕获/比较事件 pare1
内容来自淘豆网www.taodocs.com转载请标明出处.
文件大小:0 KB
下载次数:sponsored links
STM32 定时器用于外部脉冲计数,修改版,解决3..4库对应的无响应外部脉冲的问题
这里先总结一下各个time对应的gpio
TIMER1 & --& &PA12
TIMER2 & --& &PA0
& TIMER3 & --& &PD2
TIMER4 & --& &PE0
暂时够了,更多的建议参考数据手册
基于库3.4代码,网上参考了很多代码,一直有问题,估计是库版本的问题,引用下边的一片文章,红色文字为本人注释和修改。
STM32 定时器用于外部脉冲计数
&&&& 因为用stm32f103c8作主控制器,来控制小车,小车的转速由两路光电编码盘输入(左右各一路).因此想到外部时钟触发模式(TIM——ETRClockMode2Config)。
&&&& 可以试好好久,发现TIM1不能计数,到网上查了很久,也没有找到相关的文章,开始怀疑TIM1是不是需要特殊设置。经过很久的纠结,终于找到了问题——其实是我自己在GPIO设置的时候,后面的不小心覆盖了前面的了——没想到自己也会犯这么SB的事情。
&&&& 现总结程序如下:
第一步,设置GPIO
GPIO_InitTypeDef GPIO_InitS
/* PA0,PA12-& 左右脉冲输入 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOA, &GPIO_InitStructure);
注意:(1)stm32f103c8只有TIM1_ETR(PA12,Pin33),和TIM2_CH1_ETR(PA0,Pin10)两个可以用。其它更多管脚的芯片,有更多的可以输入(如100管脚的有4个可以输入的);(2)外部时钟输入与中断无关;(3)stm32f103c8的这个两个应用中,不需要重映射。
对于哪些需要重映射,参考数据手册。
第二步:设置RCC
&& RCC_ClocksTypeDef RCC_ClockF
SystemInit();//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置.
RCC_GetClocksFreq(&RCC_ClockFreq);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
第三步,设置定时器模式
void TIM1_Configuration(void) //只用一个外部脉冲端口
TIM_TimeBaseInitTypeDef&& TIM_TimeBaseS
&& //配置TIMER1作为计数器
&& TIM_DeInit(TIM1);
&& TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;//设置预分频可以将外部信号分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // Time base configuration
TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF); //我测试中一直不能用的原因是缺少这句话,缺少后,timer的驱动时钟源默认是RCC,需要更改为外部ETR输入才行。
TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM1, 0);
TIM_Cmd(TIM1, ENABLE);
void TIM2_Configuration(void) //只用一个外部脉冲端口
TIM_TimeBaseInitTypeDef&& TIM_TimeBaseS
&& //配置TIMER2作为计数器
&& TIM_DeInit(TIM2);
&& TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
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);
第四步,可以在主函数中读取计数器的值,其它的应用,就看具体的情况了。
u16 COUN1=0;
u16 COUN2=0;
int main(void)
ChipHalInit();
ChipOutHalInit();
&& COUN1=TIM1-&CNT;
&& COUN2=TIM2-&CNT;
然后就可以用了
当然你可以使能中断,TIM_ARRPreloadConfig(TIM2, ENABLE);
/*预先清除所有中断位*/
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
/* 4个通道和溢出都配置中断*/
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
并且在终端中重装填计数器数据,既可以在计数若干后产生一次中断
void TIM2_IRQHandler(void)
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);&
// TIM_Cmd(TIM2, DISABLE);
TIM2-&CNT=65530; &
仁者见仁吧,以后有机会再深入研究。。不得不说,用了stm32 的api库后,很多寄存器都懒得看了。。。。悲剧啊
源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: (一)系统时钟(SysTick) 设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数: void RCC_Configuration(void)
我的Delphi开发经验谈(本人修改版) 收藏 开发环境--------
Delphi 7是一个很经典的版本,在Win2000/XP下推荐安装Delphi 7来开发软件,在Vista下推荐使用Delphi 2007开发软件.安装好Delphi 7后,应立即安装Delphi 7 Update Pack 1,Delphi 2007则建议尽量安装最新的版本 ...
定时器2+串口发送 USART.c #include &STM32Lib\\stm32f10x.h& /********************************************** **串口配置函数,这里使能了两个串口,其中串口2使用了中断接收模式 ** ********************************** ...
电磁场仿真软件CST原版宏:Parameter Mesh的修改版(自动更新参数取值) 作者:aaron8967 主页:http://aaron8967.blog.51cto.com 说明: 我在学习和使用CST软件的过程中,首先建立了参数化的结构模型,然后想通过改变结构参数的取值,让CST自动对不同的结构进行仿真计算.但是CST自带的宏程序无法完全满足我要求 ...
STM32定时器溢出模式设置 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 源代码1: 说明:定时器采用TIM2,时钟源为内部8M晶振,向上溢出模式.此定时器用在延时函数,最小可以延时1us,故没有采用中断形式定时. 初始化 ...STM32的定时器进行输入脉冲的计数(代码).-嵌入式系统-电子产品世界
|||||||||||
& STM32的定时器进行输入脉冲的计数(代码).
STM32的定时器进行输入脉冲的计数(代码).
STM32的定时器进行输入脉冲的计数(代码).……
标签:,,,,,
分享给小伙伴们:
STM32的定时器进行输入脉冲的计数(代码).
该用户资料分享
下来看下,希望有用
感谢资料。
微信公众号二
微信公众号一

我要回帖

更多关于 stm32定时器脉冲计数 的文章

 

随机推荐