在应用中,计时器的重要性就不多说了,这里我们用两种方式实现计时,一种是开一个通用定时器计时,另一种是系统自带的Systick计时器。 配置定时器的步骤可分为 1,选择一个定时器,选择计数时钟源来源 2,将时钟源设定分频系数后作为Timer的计数频率 3,设定计数周期、递增或递减计数。 4,开定时器,计时时间到之后触发中断,做相应处理。 - M2 d9 p ?& i+ \# r6 B下面用STM32CubeMX建立一个TIM2的Demo。 % q) a/ a8 I5 O先用STM32CubeMX新建一个工程。
可直接根据板子型号找到STM32F031K6这块板
在Pinout选项中,TIM2时钟源选择内部时钟,虽然Timer还有其他功能,但现在我们只做一个计时器。
另外可设置RCC选择系统时钟源,系统时钟源默认为HSI,使用内部HRCOSC。
HES选择Bypass Clock Source 后时钟由外部输入,Nucleo-F031K6的外部时钟输入为另一片STM32芯片的MCO输出,此芯片的时钟为8MHz的晶振,精度和稳定度肯定比RC振荡要好。
如果选择外部时钟输入,Nucleo-F031K6板上的SB4需要短接,默认是开路的。
我们这里先使用HSI作为系统时钟。 7 W; f" P7 Z9 s5 s. |: d" B0 @板子上的绿色LED是PB3高电平驱动的,所以将PB3设置为Output模式,PB4/PB5也设置为输出,可以输出波形,方便测量定时时间。
在Clock Configuration选项中,通过PLL将时钟都配置为最大48MHz... 任性^_^
在Configuration选项中,单击各个模块可以设置具体参数。
点击TIM2,因为TIM2是在APB总线上,所以要按照APB的时钟设置参数,现在APB是48MHz, 配置TIM2为1ms时基,先将TIM2的计时时钟分频为1MHz,再计数1000,得到的计数频率即为1Khz。具体Prescaler = (48 000 000H/1 000 000)-1 = 47,Counter Period = 1000 - 1 = 999. 计数方向为Up。
GPIO中可将IO的输出速率设置为High
NVIC中可将相应的中断开启。
到这里,基本的模块设置都已完成。 生成Code之前在Project->Setting 中设置工程名和目录和编译器类型,
Project->Generate Code 即可导出工程了。可以直接用编译器打开。
生成的工程先编译一次。
无误。接下里就是处理Timer中断中的事了, 在使用TIM2之前,先用一下Systick 计时器。 在stm32f0xx_it.C中可以看到 SysTick_Handler()子程序,
在HAL_IncTick();右键Go To Defin... 可以找到这个初始化程序。
在打开的stm32f0xx_hal.c文件中可以看到SysTick已经默认配置为了1ms时基。
同样Go to Defin... 找到 HAL_SYSTICK_IRQHandler(); 程序
HAL_SYSTICK_IRQHandler中是一个回调函数,下面是具体的函数内容 这里说到,需要使用这个函数时,需要在用户自己的文件中重新实现即可。所以这个函数可以Copy到main.c中,只要Systick中断后,就会执行这个函数。 我们在这个函数中翻转一个IO ,具体实现程序,HAL库都有提供。
编译,Download到31K6中,按复位按键。 可以看到输出为1ms翻转一次的波形。
同样的方法,找到TIM2的中断服务程序,在HAL_TIM_IRQHandler 中有一个TIM Updata event功能的子程序
再次找到这个回调函数。
Copy到main.c中。
在TIM2中断服务程序中再翻转一个IO,编译...No,TIM2中断还没打开,开之...
编译、Download、复位...
两个1ms翻转输出都出来了... 附件为Source Code 和Necleo-F031k6电路图及此博文的PDF档
|
赞,感谢分享。 |
谢谢分享!!! |
【STM32C0测评】外部中断控制小灯
意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS
【NUCLEO-U083RC评测】移植TouchGFX并实现无接触翻页
[NUCLEO-C031C6评测] 驱动LCD 第三步 显示颜色块
[NUCLEO-C031C6评测] 驱动LCD 第二步 初始化屏幕
[NUCLEO-C031C6评测] 驱动LCD第一步
【STM32MP135-DK】裸机开发
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
【STM32U599】4.引入RTC与MVP开发
基于STM32CUBEMX驱动TMOS模块STHS34PF80之获取状态数据(5)