历史上的今天
返回首页

历史上的今天

今天是:2025年04月23日(星期三)

正在发生

2019年04月23日 | STM32学习笔记-定时器中断

2019-04-23 来源:eefocus

如果我们想要去每隔一段时间去做一件事,或者说特定的时间去做某件事,但是我们所有的精力不能放在计时上,我们有主要的事情要做,但是我们还必须每隔一段时间就要做另外一件事.我们就必须找一个可以计时的东西,它的工作就是每隔特定的时间告诉我们一声.这样,我们既可以做那个主要的事,每隔一段时间需要做的事也可以做,这个计时的东西就是定时器.


与配置io口类似,定时器的初始化也是给一个结构体变量赋值,把参数传送给初始化函数.


下面是定时器3初始化的一个例子


void tim3(void)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);                                           

    TIM_TimeBaseStructure.TIM_Period =1000-1;  

    TIM_TimeBaseStructure.TIM_Prescaler = 35999;                                    

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                              

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;               

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

    TIM_Cmd(TIM3,ENABLE);

}

TIM_TimeBaseInitTypeDef结构体变量类型名


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);打开apb1总线上的定时器3的时钟


TIM_TimeBaseStructure.TIM_Period =1000-1;分频系数(将主频分割)个人理解


TIM_TimeBaseStructure.TIM_Prescaler = 35999;计数溢出值(计数到这个值产生消息)个人理解


TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;时钟分频因子 不懂 默认0即可这个宏的值就是0


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;计数模式 向上计数 其他计数模式见手册


TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);传入结构体地址,完成基本配置


TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);打开定时器3中断


TIM_Cmd(TIM3,ENABLE);使能定时器3


void tim3youxianji(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

中断优先级配置,与外部中断相同,将中断通道改为定时器3即可NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;


void TIM3_IRQHandler(void)

{

    .......;

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

}

中断服务函数,每产生一次计时消息进入一次中断服务函数.


计时消息计算公式     计时频率=处理器主频/分频系数/计数溢出值  计时频率即进入中断的频率


推荐阅读

史海拾趣

DESOUTTER公司的发展小趣事

Desoutter公司一直注重技术创新和产品升级。公司拥有一支专业的研发团队,不断投入资源进行新产品的研发和现有产品的改进。例如,公司成功开发了一系列新型气动螺丝起子、气动钻和气动冲击扳手等,这些产品不仅提高了工作效率,还降低了劳动强度。同时,Desoutter公司还利用先进的电脑辅助技术,实现了产品设计和生产的自动化,进一步提升了产品的质量和性能。

ESPROS [Espros Photonics corp]公司的发展小趣事

ESPROS在飞行时间(Time-of-Flight,简称ToF)技术领域取得了显著突破。ToF技术是一种用于测量光在物体上反射所需时间的测距技术,它在3D视觉应用中具有广泛的应用前景。ESPROS凭借其多年的技术积累,成功开发出从单点传感器到QVGA面阵的完整ToF产品线,为客户提供了全方位的3D ToF解决方案。

Brilliance公司的发展小趣事

为了进一步提升竞争力,Brilliance公司开始着手进行产业链整合。公司与上下游企业建立了紧密的合作关系,共同打造了一条完整的电子产业链。通过协同发展和资源共享,Brilliance不仅降低了生产成本,还提高了产品质量和生产效率。这种产业链整合的模式也为公司未来的发展奠定了坚实的基础。

Amkor公司的发展小趣事

随着市场竞争的加剧,Brilliance公司意识到只有不断创新才能在行业中立足。于是,公司加大了对研发的投入,引进了一批高端人才和先进设备。经过无数次的试验和改进,Brilliance成功研发出了一项具有颠覆性的技术,并将其应用于新产品中。这款新产品不仅性能卓越,而且具有极高的性价比,迅速占领了市场份额。

福声科技(FUET)公司的发展小趣事

随着市场的不断变化和技术的飞速发展,福声科技深知技术创新的重要性。公司不断加大研发投入,组建了一支高素质的研发团队,专注于电磁式蜂鸣器、压电式蜂鸣器等新型产品的研发。通过持续的技术创新和产品升级,福声科技成功推出了一系列具有自主知识产权的电声元器件,不仅提升了产品的市场竞争力,还进一步拓宽了应用领域,如智能家居、安防系统等新兴市场。

ACCUTEK公司的发展小趣事

在发展过程中,ACCUTEK公司始终注重品牌建设和品质提升。公司投入大量资源用于品牌推广和市场宣传,提高了品牌知名度和美誉度。同时,公司还建立了严格的质量管理体系和售后服务体系,确保每一台出厂的设备都能达到客户的要求和期望。这些举措有效地提升了公司的市场竞争力,赢得了更多客户的信任和支持。

问答坊 | AI 解惑

航海设备专用液晶显示器WEDC LCD

ENH038QD1-450/650 尺寸大小: 3.8" 分辨率: QVGA 320 x 240 接口: 6-bits TTL interface 亮度 : 450/650nit(cd/m2) 对比度:高对比度、大开口率 显示模式:Normally White 响应时间:Rise 30ms/ Fall 50ms 功耗:3.4W 工作温度: -30℃--- ...…

查看全部问答>

2009IEEE工程管理与服务科学国际会议征文klj

EMS 2009 Call for Papers: Sept. 20-22, 2009, Beijing, China ====================================================================== The 3rd Int’l Conference on Engineering Management and Service Sciences (EMS 2009) CALL FOR PAP ...…

查看全部问答>

TTL触发器芯片的主要参数

TTL触发器芯片的主要参数     集成触发器的参数也可以分为直流参数和开关参数两大类。 下面以TTL集成JK触发器为例来简单介绍。         开关参数     1.最高时钟频率fmax     fmax就是触 ...…

查看全部问答>

自创寝室简易门铃

在我身边有一些喜好电子的网友和同学,想自己尝试做一些什么东西,却不知道该如何下手,或者说是很想学但有些畏怯,迟迟入不了门。        电子制作并不是什么很困难的事,关键就在于你是否肯动手,是否肯迈出第一步 ...…

查看全部问答>

又是RET返回错误,请高手指点,谢谢!

        org 0000h         ajmp main         org 0030h main:         ACALL INIT      &n ...…

查看全部问答>

怎么样用C写代码让copy动作最高效地执行?

在EVC下用win32方式编程. 功能是从strong1盘的所有数据全部copy到strong2\\\\file1下面. 怎么样用C写代码让copy动作最高效地执行?…

查看全部问答>

为什么单片机要跑系统啊!

不跑系统不也是可以完成的吗?难道就是为了方便自动管理吗?初学者有疑惑,望高手指点!…

查看全部问答>

EVC4.0无法安装,新手求救!

我已经安装了EVT3.0,现想将其中的EVC升级到4.0,我从网上下载了EVC4.0安装程序安装后运行不了提示no CE platform SDK 于是我从网上去下载wince 5.0 SDK 可是无法安装,不是程序错误,像是缺少了什么东西 请问怎么才能安装EVC4.0 谢谢!…

查看全部问答>

高手请进!..郁闷的问题:

1、为什么我用NdisAllocateMemoryWithTag申请内存后,在NdisFreeMemory释放!有时候会蓝屏 我用 NdisAllocateMemoryWithTag(&pPacketContent,TotalPacketLength,TAG); 申请后 在释放的时候用 if(pPacketContent) NdisFreeMemory(pPacketConte ...…

查看全部问答>

wince 问题!!!!!!

有高人知道在wince工程下面 怎么给lable button等控件添加背景图片么?…

查看全部问答>