stm32如何使用stm32 计数器模式

如何利用stm32的中断和计数器即上升沿下降沿捕获电平时长
> 如何利用stm32的中断和计数器即上升沿下降沿捕获电平时长
如何利用stm32的中断和计数器即上升沿下降沿捕获电平时长
/*! @file********************************************************************************模块名
: 红外解码文件文件名
: IR_REMOTE.c相关文件
: IR_REMOTE.h文件实现功能 : 定时器红外解码作者
: 李本文引用地址:版本
:--------------------------------------------------------------------------------硬件平台
: STM32F107软件开发平台 : iar--------------------------------------------------------------------------------修改记录
创建***************************************************************************************************************************************************************///该类遥控器的引导码为4MS 高电平 4MS低电平,bit1为2ms H,bit0为0.5ms L#include "IRM_Remote.h"#include static u8 user_code[3]={0};//用户码static u8 lead_flg=0;//引导码状态变量static u8 ir_//定时器电平时间计数量static u8 high_cnt=0;//24位static u8 REM_FLG=0;//接收一个码标志位static u8 Remote_Scan();/*************************************************************名称: Remote_Key()功能:遥控码值转换输出参数:返回键值 重新编码作者:v******************************************************************/u8 Remote_Key(){u16 keyvalue=0;u8 ret=0;//Remote_Scan();if(REM_FLG==1){REM_FLG=0;keyvalue=user_code[1]*256+user_code[2];switch(keyvalue){
case IR_1:ret = 1;case IR_2:ret = 2;case IR_3:ret = 3;case IR_4:ret = 4;case IR_5:ret = 5;case IR_6:ret = 6;case IR_7:ret = 7;case IR_8:ret = 8;case IR_9:ret = 9;case IR_10:ret = 10;case IR_11:ret = 11;case IR_12:ret = 12;case IR_13:ret = 13;case IR_14:ret = 14;case IR_15:ret = 15;case IR_16:ret = 16;case IR_17:ret = 17; case IR_18:ret = 18;case IR_19:ret = 19;case IR_20:ret = 20;case IR_21:ret = 21;case IR_22:ret = 22;case IR_23:ret = 23;case IR_24:ret = 24;case IR_25:ret = 25;case IR_26:ret = 26;case IR_27:ret = 27;case IR_28:ret = 28;case IR_29:ret = 29;case IR_30:ret = 30;case IR_31:ret = 31;case IR_32:ret = 32;case IR_33:ret = 33;case IR_34:ret = 34;case IR_35:ret = 35;case IR_36:ret = 36;case IR_37:ret = 37;default:ret=0;}}}
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一& 求教,关于STM32F103芯片计数器的问题。
管理员:?????人数:6661小组积分:72169简介:欢迎进入STM32小组,学习讨论相关技术、交换资料、交流学习经验和设计心得。QQ群:小组公告福利:免费申请STM32F0308-DISCO开发套件(Discovery kit with STM32F030R8 MCU) 活动马上开始,只需2分钟即可申请。申请地址:??|????|??
需要确认注册邮箱后才能下载,
楼主??[其他]?
求教,关于STM32F103芯片计数器的问题。
6年会员勋章目前未领取。领取条件:?凡是注册时间六年以上的活跃用户即可领取该勋章。
积分:821分
总积分:1645分
发表于 14:38
??? ??? 我使用的是F103? 64管脚128k的芯片分别把8M的矩形波和较低频率的波S1(假设为10KHZ)分别接到TIM3定时器的ETR管脚上和CH1上。即外部时钟模式2+触发模式,利用CH1上的波形来触发计8M波形的个数。我发现当S1频率较低时计数没有问题,当S1频率较高时如超过25K时,计数器显示不稳定,相隔两次误差较大。??? 我想问一下这个可能是哪里出了问题。??? 还有在使用给芯片时,使用TIME2的第三通道进行计数器清零模式计数时,发现捕获不能能清零,而通道1和2就可以,是否通道3的结构和1、2不一样,还是我在设置SFR时出现了什么错误。
1楼??[其他]?
Re:求教,关于STM32F103芯片计数器的问题。
6年会员勋章目前未领取。领取条件:?凡是注册时间六年以上的活跃用户即可领取该勋章。
总积分:129分
发表于 11:36
估计计数寄存器溢出了
--- 现有 2个主题,共 1页,目前第 1页 ---??
点击,立即回复。
EDN China官方微信
扫一扫关注,获取电子新知,设计灵感
IC厂商小组
在线研讨会
赞助商链接
2016 EDN China -- Use of this website is subject to its terms of use.
京ICP备号-4 |
京公网安备37 |
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!网站已改版,请使用新地址访问:
stm32-Frequency-meter 使用 通用计数器做的一个简易频率计,可以算出脉冲宽度还有其占空比 SCM 单片机开发 252万源代码下载- www.pudn.com
&文件名称: stm32-Frequency-meter& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 1142 KB
&&上传时间:
&&下载次数: 422
&&提 供 者:
&详细说明:使用stm32通用计数器做的一个简易频率计,可以算出脉冲宽度还有其占空比-Done using a general-purpose counter stm32 simple frequency counter, you can calculate the pulse width as well as its duty cycle
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&stm32通用计数器频率计\HARDWARE\ADC\adc.c&&.....................\........\...\adc.h&&.....................\........\DMA\dma.c&&.....................\........\...\dma.h&&.....................\........\EXTI\exti.c&&.....................\........\....\exti.h&&.....................\........\KEY\key.c&&.....................\........\...\key.h&&.....................\........\LCD\FONT.H&&.....................\........\...\ILI93xx.c&&.....................\........\...\LCD.h&&.....................\........\.ED\led.c&&.....................\........\...\led.h&&.....................\........\OLED\FONT.H&&.....................\........\....\oled.c&&.....................\........\....\oled.h&&.....................\........\RTC\rtc.c&&.....................\........\...\rtc.h&&.....................\........\TIMER\timer.c&&.....................\........\.....\timer.h&&.....................\........\WDG\wdg.c&&.....................\........\...\wdg.h&&.....................\........\.KUP\wkup.c&&.....................\........\....\wkup.h&&.....................\SYSTEM\delay\delay.c&&.....................\......\.....\delay.h&&.....................\......\README.TXT&&.....................\......\sys\sys.c&&.....................\......\...\sys.h&&.....................\......\usart\usart.c&&.....................\......\.....\usart.h&&.....................\USER\adc.crf&&.....................\....\adc.d&&.....................\....\adc.o&&.....................\....\delay.crf&&.....................\....\delay.d&&.....................\....\delay.o&&.....................\....\ili93xx.crf&&.....................\....\ili93xx.d&&.....................\....\ili93xx.o&&.....................\....\key.crf&&.....................\....\key.d&&.....................\....\key.o&&.....................\....\led.crf&&.....................\....\led.d&&.....................\....\led.o&&.....................\....\rtc.crf&&.....................\....\rtc.d&&.....................\....\rtc.o&&.....................\....\STM32F10x.lst&&.....................\....\STM32F10x.o&&.....................\....\STM32F10x.s&&.....................\....\sys.crf&&.....................\....\sys.d&&.....................\....\sys.o&&.....................\....\TEST.axf&&.....................\....\test.c&&.....................\....\test.crf&&.....................\....\test.d&&.....................\....\TEST.hex&&.....................\....\TEST.htm&&.....................\....\TEST.lnp&&.....................\....\TEST.map&&.....................\....\test.o&&.....................\....\TEST.plg&&.....................\....\TEST.sct&&.....................\....\TEST.tra&&.....................\....\TEST.Uv2.bak&&.....................\....\TEST.uvopt&&.....................\....\TEST.uvproj&&.....................\....\TEST_Target 1.dep&&.....................\....\TEST_uvopt.bak&&.....................\....\TEST_uvproj.bak&&.....................\....\timer.crf&&.....................\....\timer.d&&.....................\....\timer.o&&.....................\....\usart.crf&&.....................\....\usart.d&&.....................\....\usart.o&&.....................\....\wdg.crf&&.....................\....\wdg.d&&.....................\....\wdg.o&&.....................\....\wkup.crf&&.....................\....\wkup.d&&.....................\....\wkup.o&&.....................\HARDWARE\ADC&&.....................\........\DMA&&.....................\........\EXTI&&.....................\........\KEY&&.....................\........\LCD&&.....................\........\LED&&.....................\........\OLED&&.....................\........\RTC&&.....................\........\TIMER&&.....................\........\WDG&&.....................\........\WKUP&&.....................\SYSTEM\delay&&.....................\......\sys&&.....................\......\usart&&.....................\HARDWARE
&[]:纯粹是垃圾&[]:和说明完全不符
&近期下载过的用户:
&&&&&&&&&&[]
&相关搜索:
&&&&&&&&&&
&输入关键字,在本站252万海量源码库中尽情搜索:
&[] - 自己编写的stm32讲义,非常适合初学者了解stm32处理器及其精华
&[] - stm32定时器,同一定时器产生不同频率
&[] - AVR的ADC模拟电压采样例程,10Bit采样精度。
&[] - 此程序使用stm32实现了频率计的功能,当频率比较低时,测量结果十分准确。高频时,略有误差,但是不能侧得的频率过高。
&[] - stm32 DAC 双通道 DAC 程序 通道1(PA4)输出200HZ正弦波,通道2(PA5)输出100HZ正弦波,两个通道可独立设置输出频率,及输出波形,本程序在STM32F103RCT6测试通过 仅供参考
&[] - 频率计制作资料,完整的文件,送给需要的朋友(PCB,烧写文件都有)
&[] - 高精度单片机频率计的设计
两种实现方法,proteus仿真、硬件调试都通过,原理图,程序,报告都有
&[] - stm32入门篇之通用定时器彻底研究
TIMER-1:定时器上溢,中断中取反LED
TIMER-2:强置输出
TIMER-3:输出比较
TIMER-4:PWM输出
TIMER-7:单脉冲方式
TIMER-5:输入捕获模式
TIMER-6:PWM输入
TIMER-8: TIMER2作为
&[] - 真正实现了高级定时器和普通定时器的输入捕获,分别捕获一个脉冲,脉冲由51单片机产生,可自己调节精度
&[] - stm32实现高精度频率测定,共两种方法
捕获法(可精确到0.001Hz)
定时器中断法(可精确到0.1Hz)请教:各位前备,如何用定时计数器的溢出作为TRGO
【悬赏问答】 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 6881|回复: 6
请教:各位前备,如何用定时计数器的溢出作为TRGO
【悬赏问答】
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 77, 距离下一级还需 -27 积分
我要用测量定时器仪脉冲周期从而计算频率,计数器的时钟在72M时使用一个定时器捕获,只能测量长910us的脉冲周期, 我需要测量的脉冲宽度最大时为20MS,所以一个定时器不够用,所以我想用定时器(TIM2)作为主从模式, 当脉冲宽度超过910US时(计数器溢出)里用这溢出触发输出TRGO, 然后定时器(TIM3)作为从定时器, TIM3采用外部时钟ITR1(TIM2的TRGO)作为时钟,
现在的问题是脉冲宽度低于910US时 TIM3定时器也在计数。
定时器配置函数如下:
请前辈指导下。
void TIM_Configuration(void)
/* 定义 TIM_ICInit 初始化结构体 TIM_ICInitStructure */
TIM_ICInitTypeDef
TIM_ICInitS
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS
/*计数器基本配置*/
TIM_TimeBaseStructure.TIM_Period = 65535; //
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
选择 TIM2 第2通道
捕获输入上升沿
TIM输入2与IC2相连
TIM 捕获在捕获输入上每探测到一个边沿执行一次
选择输入比较滤波器0x0
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //选则通道2,
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_R//上升沿触发
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //引脚对应关系
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //不分屏
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
//使用PWM输入模式
/* 选择TIM2输入触发源: TIM 经滤波定时器输入 2
TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);//IC2为触发源
/* 选择从机模式:复位模式 */
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); //
/* 开启主从模式模式 */
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
//生成更新事件
TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular);
//更新事件输出触发//
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
配置 从定时器, 外部时钟,(TIM2的溢出更新事件输出
用于转速脉冲的扩展计数。当转速低于1100转时
/*tim3 为从模式
外部时钟 TIM2 的TRG0 */
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TIM_TimeBaseStructure.TIM_Period = 65535; //
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);//ITR1触发源(定时器TIM2的TRO
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_External1); //从模式外部时钟模式1
/* 使能 TIM2
TIM3计数器 */
TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM3, ENABLE);
开启TIM2的CC2 中断*/
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 77, 距离下一级还需 -27 积分
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
顶一下, 望前辈们指导下,试过时钟分频,&&可是误差比较大,
在线时间11 小时
该用户从未签到主题帖子精华
初级会员, 积分 185, 距离下一级还需 15 积分
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
我觉得你用两个定时器,误差肯定是大的。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 0, 距离下一级还需 50 积分
回复:请教:各位前备,如何用定时计数器的溢出作为TRGO
顶楼主 我要遇到这个问题 你解决了吗 能了2天了 吃不好睡不着的 都快疯掉了,你有没有试过那种计数器 ,就是用一个定时器当溢出中断时标志位+1
& & & & if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
& & & & & & & & TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
& & & & & & & & ifalg++;
& & & & if(TIM_GetITStatus(TIM4,
TIM_FLAG_CC2) != RESET)
& & & & TIM_ClearITPendingBit(TIM4, TIM_FLAG_CC2);
& & & & & & & & PWM_count.ut_PWM_Period = TIM_GetCapture2(TIM4);
& & & & & & & & itemp=
& & & & & & & & ifalg=0;
但是我这样不知道是什么原因
程序一直在溢出中断中出不来 ,清标志位不管用 ,清不了 我能加你QQMa 我的事
在线时间13 小时
该用户从未签到主题帖子精华
初级会员, 积分 194, 距离下一级还需 6 积分
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
【悬赏问答】
可以用两个定时器接力计数的,以前调过,可是忘了例程放哪了,找到了再贴上来
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间17 小时
该用户从未签到主题帖子精华
中级会员, 积分 261, 距离下一级还需 239 积分
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
【悬赏问答】
你这样子使用的话 要把定时器进行同步才行&&要不肯定有很大误差,
单个定时器 你不用定时器溢出 模式&&用 捕获比较 模式 的精度 会高一点的
因为那样是自动装载 不用你软件处理
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 3, 距离下一级还需 47 积分
回复:请教:各位前备,如何用定时计数器的溢出作为TRGO
【悬赏问答】
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by

我要回帖

更多关于 stm32f10x 计数器 的文章

 

随机推荐