历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2019年01月30日 | STM32的ETR引脚计数功能

2019-01-30 来源:eefocus

1. 基本介绍

1.1. 开发环境

开发板:WarShip STM32 BOARD V2.1 

CPU:STM32F103ZET6


1.2. ETR引脚配置

这里写图片描述

由上可知,使用STM32的ETR引脚计脉冲数,需将定时器的时钟源选择为外部时钟模式2 

选定此模式的方法:令TIMx_SMCR寄存器中的ECE=1 

计数器能够在外部触发ETR的每一个上升沿或下降沿计数 


这里写图片描述

例如,要配置在ETR引脚上,每2个上升沿计数一次的向上计数器,使用下列步骤: 

1. 本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000 

2. 设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01 

3. 设置在ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0 

4. 开启外部时钟模式2,置TIMx_SMCR寄存器中的ECE=1 

5. 启动计数器,置TIMx_CR1寄存器中的CEN=1


计数器在每2个ETR上升沿计数一次。 

在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路 


这里写图片描述

TIMx_SMCR寄存器的位定义,参见《STM32中文参考手册_V10.pdf》14.3.3章节


1.3. 引脚对应关系

这里写图片描述


2.源代码

说明: 

1. 将PB5与PD2短接 

2. 使用TIM2定时器在引脚PB5上输出方波,周期为500ms(高500ms低500ms) 

3. 使用TIM3_ETR计脉冲功能对上面的方波上升沿计数


2.1. etr.c

#include "etr.h"

#include "led.h"

void bsp_timer2_init( u16 arr,u16 psc ){


    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 


    TIM_TimeBaseStructure.TIM_Period = arr;     

    TIM_TimeBaseStructure.TIM_Prescaler =psc; 

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 


    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); 


    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

    NVIC_Init(&NVIC_InitStructure);  


    TIM_SetCounter( TIM2,0 );

    TIM_Cmd(TIM2, ENABLE);  


}

void TIM2_IRQHandler(void){    


    if (TIM_GetITStatus(TIM2, TIM_IT_Update)!= RESET){

        LED0=!LED0;//PB5

    }

    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);    

}

void bsp_timer3_init(u16 arr,u16 psc){


    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    GPIO_InitTypeDef  GPIO_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;               

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;            

    GPIO_Init(GPIOD, &GPIO_InitStructure);                  



    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 

    TIM_TimeBaseStructure.TIM_Period = arr; 

    TIM_TimeBaseStructure.TIM_Prescaler = psc; 

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 


#if 0

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 

    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

    NVIC_Init(&NVIC_InitStructure);  

#endif

    TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);

    TIM_SetCounter( TIM3,0 );

    TIM_Cmd(TIM3, ENABLE);               

}

/*

** TIM3中断可以不使用,对ETR计数无影响

** 使用可以通过借助两个LED闪烁情况判断

** ETR是否调试正确,或者直接打印定时器

** 计数寄存器的值也可以,自行选择

*/

void TIM3_IRQHandler(void){


    if (TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET){

        LED1=!LED1;

    }

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update); 

}


2.2. main.c

#include "led.h"

#include "delay.h"

#include "key.h"

#include "sys.h"

#include "lcd.h"

#include "usart.h"

#include "etr.h"


int main(void){  

    delay_init();           

    NVIC_Configuration();    

    uart_init(9600);        

    LED_Init();              

    bsp_timer2_init(4999,7199);//500ms

    bsp_timer3_init(5,0);

    while(1) {       

        printf("Count=%d\n",TIM_GetCounter(TIM3));

        delay_ms(10);

    } 

}


如果通过LED查看则LED0一秒亮一次,LED1则5秒亮一次 

如果通过打印查看则数值从0至5向上循环 

TIM2与TIM3初始化时的自动重装载值与预分频读者可根据自己的需要自行设置

推荐阅读

史海拾趣

Electro Adapter Inc公司的发展小趣事

EA公司非常重视企业文化和团队建设。公司倡导“诚信、创新、协作、共赢”的价值观,鼓励员工勇于创新、敢于担当。为了提升员工的综合素质和团队协作能力,公司定期组织各类培训和学习活动,并为员工提供了广阔的发展空间和良好的福利待遇。在这种积极向上的企业文化氛围下,EA公司形成了一支高效、专业的团队,为公司的发展提供了有力的保障。

ABI Electronics公司的发展小趣事

随着业务的不断发展和产品的不断升级,ABI Electronics公司的品牌影响力也逐渐提升。其产品在市场上获得了良好的口碑和声誉,成为了电子行业内的知名品牌。同时,ABI还积极参与行业内的交流和合作,为行业的发展做出了积极的贡献,进一步提升了其在行业内的地位和影响力。

这五个故事展示了ABI Electronics公司在电子行业里的发展历程,从电路板测试技术的突破,到集成电路测试技术的创新,再到全球市场布局和合作伙伴关系的建立,以及研发实力的持续增强和品牌影响力的提升,都体现了ABI Electronics公司不断进取、不断创新的精神。

芯源半导体(CW)公司的发展小趣事

随着公司产品的逐步成熟,芯源半导体(CW)公司开始寻求与行业内其他企业的合作。经过深入的市场调研和谈判,公司成功与多家知名电子企业建立了战略合作伙伴关系。这些合作伙伴为芯源半导体(CW)公司提供了更多的市场机会和技术支持,使公司得以迅速扩大市场份额,提升品牌影响力。

Elpac公司的发展小趣事

随着业务的不断发展,Elpac公司开始将目光投向国际市场。公司制定了全球化战略,积极开拓海外市场。为了更好地适应不同国家和地区的市场需求,Elpac公司针对不同地区推出了定制化的产品和服务。同时,公司还加强了与国际知名企业的合作,共同研发新技术、新产品。这些举措不仅让Elpac公司的产品在全球市场上得到了广泛认可,也为公司的长远发展奠定了坚实基础。

Esterline Technologies Corporation公司的发展小趣事

随着业务的不断发展,Elpac公司开始将目光投向国际市场。公司制定了全球化战略,积极开拓海外市场。为了更好地适应不同国家和地区的市场需求,Elpac公司针对不同地区推出了定制化的产品和服务。同时,公司还加强了与国际知名企业的合作,共同研发新技术、新产品。这些举措不仅让Elpac公司的产品在全球市场上得到了广泛认可,也为公司的长远发展奠定了坚实基础。

Datapro International Inc公司的发展小趣事

Datapro International Inc公司成立于20世纪90年代初,当时正值电子信息技术飞速发展的时期。公司的创始人是一群充满激情和创新精神的年轻工程师,他们看到了在数据存储和处理方面的巨大潜力。于是,他们决定成立Datapro International Inc公司,致力于开发高效、稳定的数据存储解决方案。

在创立初期,Datapro International Inc公司面临着重重困难,包括资金短缺、技术挑战和市场竞争等。然而,他们凭借坚定的信念和不懈的努力,成功开发出了第一款具有创新性的数据存储产品,该产品凭借其卓越的性能和稳定性迅速赢得了市场的认可。这一成功为Datapro International Inc公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

20元打造经典PC遥控器(3)

做好后,再来看看连线的问题。如果你在板子是用了母头的串口座,那可以直接买一根常用的串口通讯线,一头是公头一头是母头的那种。我自己则是用手头现有的接头自制,更为省钱了。因我的电路板上使用公头的串口插座,所以要用两个母头的线才可以和PC ...…

查看全部问答>

创意十足的[蜡烛]是不是你说了算

USB 精油蜡烛 蜡烛是营造气氛的好东西,但是乱滴的蜡油和引发火灾的可能性,让科科们敬而远之。没关系,现在有兼顾安全与便利的产品出现啦,这款 USB 烛光灯座是浪漫的好选择,采用 USB 或两颗3号电池供电,LED 模拟的烛火相当逼真,更妙的是要熄 ...…

查看全部问答>

【FPGA技术问题】关于区域约束(Area Constraints)

  nArea Constraints是Floorplanner最容易、最有效的应用 n大型设计首选布局工具- Floorplanner p在综合中,为了防止单独的component名称被改变,选择“Keep Hierarchy”参数选项 p设计的每个组成部分可以被约束限定到某一个区域 p ...…

查看全部问答>

求手机X01HT厂商开发包

我们打算在X01HT这款手机上进行软件开发,有谁知道哪里有厂商开发包提供(收费的也可以), 可以通知我,非常感谢!QQ:176609958   邮箱:mchsh1985@126.com …

查看全部问答>

易电源学习心得

题目很简单,易电源很节省PCB空间,真遗憾,忘记截图了…

查看全部问答>

拿到开发板后第一周的心得,提交

很开心能拿到Helper2416的开发板,从拿到开发板初,就准备全身心的投入进去进行相应的学习,要学习就要有个学习的方法不是,咱是摸着石头过河。OK,先进行资料的整理了,先从BBS的贴子入手吧,https://bbs.eeworld.com.cn/thread-441984-1-1.html从 ...…

查看全部问答>

发帖是回复可见好,还是完全公开好?

本人每天都会花点时间逛各种论坛,看帖子,学技术。本人比较低调,基本上不喜欢发帖子,最近在这个电子工程师论坛逛了几次,看了很多帖子,发现,这里面的大部分人都有一个通病,发帖子必须回复能看。本是一个技术交流的论坛,被你们这帮人搞得都是 ...…

查看全部问答>

PIC开发工具折扣价,我可以帮忙代买

现在在上海MICROCHIP年会现场,开发工具折扣价,需要的朋友可以让我带 …

查看全部问答>