|
本帖最后由 黑夜之狼 于 2016-11-22 16:00 编辑 在前面的两个帖子当中,我们介绍了GPIO和UART通信,这次,我们来介绍单片机里面很普遍也很重要的一个外设——定时器。 为什么说很普遍?现在的单片机最多的共同点就是:串口和定时器。串口未必每款单片机有,但是定时器基本上都有。为什么说很重要?定时器的应用范围太广了,不说别的,单纯看STM32的参考手册,大家应该可以发现讲定时器的内容已经占了1/3(P220~467),可见其重要性! STM32的定时器功能十分强大,F0系列的定时器分了高级定时器(TIM1)、通用定时器(TIM3/14/15/16/17)、基本定时器(TIM6/TIM7)三种。本次实验当中,我们将利用通用定时器TIM3中断来实现闪烁灯这个实验。 STM32F0的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个通用定时器都是完全独立的,没有互相共享的任何资源。 主要功能如下图:(参考手册P294)
定时器TIM3中断的配置可以总结为以下几点: (1)TIM3时钟使能 TIM3是挂载在APB1上的,所以我们通过APB1总线下的使能时钟函数来使能TIM3,调用的库函数是:
(2)初始化定时器参数,设置自动重装值,分频系数,计数方式等 初始化定时器参数是由库函数 TIM_TimeBaseInit 来实现的:
针对TIM3初始化,具体配置代码如下:
中断时间的计算公式如下: Tout = ( (arr + 1) * (psc + 1) ) / Tclk Tclk:TIM3的输入时钟频率(单位:MHz) Tout:TIM3溢出时间(单位:us) 我们这里定时500ms,可以令arr = 4999,psc = 4799,Tclk = 48MHz 即:Tout = ( (4999 + 1) * (4799 + 1) ) / 48 = 500000us = 500ms (3)设置TIM3允许更新中断 因为这里我们需要利用TIM3的中断来实现闪烁灯,所以要允许TIM3产生中断更新,库函数如下:
(4)TIM3中断优先级设置 既然使能了TIM3中断,那肯定要配置它的中断优先级了,具体代码如下:
(5)使能TIM3 这一点最简单,库函数如下:
(6)编写中断服务函数 最后一步,千万不要忘了写中断服务函数(当然,你可以用查询方式,不用中断)!我们这里是更新(溢出)中断,在中断服务函数开头,首先要判断是否溢出,然后执行相关操作(这里是翻转GPIO输出状态),最后清除中断标志。具体代码如下:
通过以上几个步骤,我们就可以利用TIM3定时器中断功能实现对LED的状态翻转 上传工程代码:
STM32F030_TIM3.rar
(2.04 MB, 下载次数: 181)
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
可以用,可以参考库函数里面的例程