历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2021年08月23日 | stm32定时器的妙用

2021-08-23 来源:eefocus

一、初步了解定时器

stm32定时器时钟图如下:
image.png?imageView2/2/w/550
定时器2-7:普通定时器
定时器1、8:高级定时器
image.png?imageView2/2/w/550
image.png?imageView2/2/w/550

二、使用定时器

以下,我使用定时器7(以下TIM7)去实现计算获取一条指令的运行时间。


1.TIM7初始化

以下初始化函数中


入口参数:TIMx:TIM7,arr:重载值,psc分频值

函数功能:TIM7的定时配置

返回参数:无

说明:和timer7只具有更新中断功能


void Timer7_Init(TIM_TypeDef * TIMx, unsigned short arr, unsigned short psc)

{

  TIM_TimeBaseInitTypeDef timer_initstruct;

  NVIC_InitTypeDef nvic_initstruct;


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);


  nvic_initstruct.NVIC_IRQChannel = TIM7_IRQn;


  timer_initstruct.TIM_CounterMode = TIM_CounterMode_Up;

  timer_initstruct.TIM_Period = arr;

  timer_initstruct.TIM_Prescaler = psc;


  TIM_TimeBaseInit(TIMx, &timer_initstruct);


  TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE);                    //使能更新中断


  nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;

  nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 1;

  nvic_initstruct.NVIC_IRQChannelSubPriority = 1;

  NVIC_Init(&nvic_initstruct);

  TIM_Cmd(TIMx, ENABLE); //使能定时器

}


2.中断服务函数

产生更新中断时进入


void TIM7_IRQHandler(void)

{

    if(TIM_GetITStatus(TIM7, TIM_IT_Update) == SET)

    {

        TIM_ClearITPendingBit(TIM7, TIM_IT_Update);


        timer_info.timer7Out++;

    }

}


其中timer_info为结构体,存放更新次数变量(也可以用静态变量)


typedef struct

{

    unsigned char timer7Out;

} TIM_INFO;

extern TIM_INFO timer_info;

TIM_INFO timer_info = {0};


3.使用例程

调用初始化函数 Timer6_7_Init(TIM7, 49999, 71);//1us计数一次,50ms中断一次

关闭定时器,清零计数 TIM_Cmd(TIM7, DISABLE); TIM_SetCounter(TIM7, 0);

在指令之前打开定时器,指令完成之后关闭定时器

计算时间,通过中断次数、计数器剩余值判断。

清零


以下代码为计算usart1发送"hello word!"的时间


#include "stm32f10x.h"


#include "delay.h"

#include "usart.h"

#include "timer.h"


void Hardware_Init(void)

{


    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断控制器分组设置


    Delay_Init();            //Systick初始化,用于普通的延时

    Usart1_Init(9600);        //初始化串口1,波特率9600

    Timer6_7_Init(TIM7, 49999, 71);    //1us计数一次,50ms中断一次

    TIM_Cmd(TIM7, DISABLE);        //关闭定时器

    TIM_SetCounter(TIM7, 0);        //清零计数器

}



int main(void)

{

    unsigned int time = 0;

    Hardware_Init();                                    //硬件初始化


    while(1)

    {

        TIM_Cmd(TIM7, ENABLE);                            //使能定时器计时

        UsartPrintf(USART1, "rnhello word!!nrn");

        TIM_Cmd(TIM7, DISABLE);                            //关闭定时器


        time = timer_info.timer7Out * 50000;            //测算时间-中断次数*中断周期

        time += TIM_GetCounter(TIM7);                    //获取当前中断前的剩余值

        TIM_SetCounter(TIM7, 0);                        //清零

        timer_info.timer7Out = 0;

        UsartPrintf(USART1, "发送时间: %d微秒rn", time);

        DelayMs(2500);

    }

}

image.png?imageView2/2/w/550

推荐阅读

史海拾趣

EVER-WAY公司的发展小趣事

在电子行业,技术创新是企业发展的关键。EVER-WAY公司深知这一点,因此在技术研发方面投入了大量资源。公司成立了专门的研发团队,不断引进先进的生产设备和技术人才,致力于开发具有自主知识产权的电子产品。经过多年的努力,EVER-WAY公司成功推出了一系列高性能、高可靠性的电子元器件产品,获得了国内外客户的广泛认可。这些技术创新的突破不仅提升了公司的核心竞争力,也为公司带来了丰厚的经济回报。

Arctic Silicon Devices公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Arctic Silicon Devices深知这一点,因此非常重视品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产、测试、包装等各个环节都进行严格把控。同时,公司还加强了对供应商的管理和评估,确保原材料的质量稳定可靠。这些措施使得Arctic Silicon Devices的产品在市场上赢得了良好的口碑和信誉。

DESCO公司的发展小趣事

随着防静电产品市场的不断扩大,DESCO公司开始着手进行市场拓展和品牌塑造。公司通过参加国际展会、举办技术研讨会等方式,积极向全球客户展示其防静电产品的技术优势和应用前景。同时,DESCO还加大了品牌宣传力度,提高了品牌知名度和美誉度。这些举措为公司在全球范围内赢得了大量忠实客户,市场份额持续增长。

港源(GANGYUAN)公司的发展小趣事

DESCO公司成立于XX年代初,创始人[XXXXX]先生凭借其深厚的电子工程背景和敏锐的市场洞察力,决定投身于防静电产品的研发与生产。在创业初期,公司面临资金紧张、技术壁垒高等诸多困难,但[XXXXX]先生坚持技术创新,带领团队攻克了一个又一个技术难关,成功研发出首款高性能防静电垫,为公司的后续发展奠定了坚实基础。

Asia Pacific Microsystems Inc公司的发展小趣事

APM在追求经济效益的同时,也积极履行社会责任,关注可持续发展。公司严格遵守环保法规,采用环保材料和生产工艺,减少对环境的影响。此外,APM还积极参与公益事业,通过捐赠和技术支持等方式回馈社会。这些举措不仅提升了公司的社会形象,也为其在电子行业中赢得了更多合作伙伴和客户的支持。

这五个故事展示了Asia Pacific Microsystems Inc公司在电子行业发展中面临的挑战、机遇以及所取得的成就。通过这些故事,我们可以看到APM是如何通过技术创新、市场拓展、产业链整合以及履行社会责任等方式,逐渐在电子行业中崭露头角的。

Horn公司的发展小趣事

随着汽车、通用工程、液压/气动、珠宝和医疗设备等行业对高精度切削工具需求的增长,Horn公司不断加大研发投入。公司成功开发出超硬切削材料如单晶金刚石(MCD)、多晶金刚石(PCD)和立方氮化硼(PCBN),这些材料的应用极大地提高了切削效率和加工精度。Horn公司的技术创新不仅满足了市场对高质量刀具的需求,还推动了整个切削工具行业的进步。

问答坊 | AI 解惑

招聘高级硬件开发工程师

招聘高级硬件开发工程师 本公司提供良好发展机会和平台 我公司是一家主营一卡通智能管理系统、智能卡机具、热工仪表三大类产品,集研发、生产、销售、工程安装维护等全套工程实施,具有雄厚技术、销售实力的民营企业。 公司于2003年11月取得ISO9 ...…

查看全部问答>

如何计算硬盘的录像时间?

在监控系统工程中,针对不同的格式,不知如何去选择硬盘的容量和录像的时间? 实际上这个问题涉及到几个方面,一是视频信号本身的大小,二是压缩后的大小。 现在监控系统通常是用CIF或者D1的分辨率,其象素值如下:       & ...…

查看全部问答>

Android 3.0系统曝光 最低配置1GHz CPU

福布斯》网站于周三发布文章称,在各大公司重点开发诸如iPhone 4、Droid X和Evo 4等新一代智能手机的同时,有事实表明,无线行业领域内的部分大公司也被与高端智能手机大相径庭的低价智能手机市场蕴藏的潜力所吸引。这不,高通、诺基亚和宏达电都开 ...…

查看全部问答>

WinCE中用IImage如何旋转JPG图片

我现在按照以下代码做,该代码没有添加“图片旋转功能”那三行时是可以加载一幅jpb图片到用户区(VC++2005,WinMobile 6.0中文模拟器环境): void CImagingDemoDlg::OnBnClickedRotate() {     // TODO: 在此添加控件通知处理程序代码 &nb ...…

查看全部问答>

困惑已久的地址问题

刚上手WINCE,做一个CAMERA方面的驱动,主要是将inputbuffer中的数据通过驱动转换为outputbuffer,而且inputbu和outputbu都需要和应用程序交互,中间就有一些地址的映射转换。现在是被这些地址搞糊涂了。向各位大侠请教:    首先程序里 ...…

查看全部问答>

华为EM200模块通讯

可能是网络问题,在发送数据过程中连接会自动关闭,可是连接关闭后,服务器并没有自动断开(此时已经不能发送数据了) 为什么呀??如果有谁在做EM200通讯,请与我联系qq:273498325 不胜感激~~~~~…

查看全部问答>

求购ATT7022C(spi)计量芯片在at91sam9260的linux驱动

求驱动源码, 最好做过, 报酬面议! QQ: 191359593 …

查看全部问答>

【LED术语】外延生长(epitaxial growth)

【LED术语】外延生长(epitaxial growth)    在基片上生长结晶轴相互一致的结晶层的技术。用于制作没有杂质和缺陷的结晶层。包括在基片上与气体发生反应以积累结晶层的VPE(气相生长)法、以及与溶液相互接触以生长结晶相的LPE(液相生长 ...…

查看全部问答>

ZigBee无线自组网的LED节能灯控制系统

ZigBee无线自组网的LED节能灯控制系统    摘要:设计了一种基于ZigBee无线自组网控制LED节能灯的控制系统。以TI公司的CC2530为主要硬件平台,利用ZigBee Pro协议栈组建了Mesh网络,在上位机上实现了LED灯亮度的调整和环境温度、电压的监 ...…

查看全部问答>

【招聘 之一】帮公司发个帖子,寻同道挚友,机会难得

公司简介     概伦电子科技有限公司(ProPlus Electronics, Co. Ltd.)致力于电子设计自动化(EDA)技术解决方案,其目标是成为EDA领域的世界级企业。概伦电子在美国硅谷、北京中关村科技园区和济南国家信息通信国际创新园设有 ...…

查看全部问答>