今天开始我们要来使用STM32强大的功能之一 TIMER!
STM32F429ZI总共有14个计时器,这14个大致可以分为三种,通用定时器、基本定时器、高级定时器
三种的差异在於通用定时器、高级定时器有些会有其他的功能,但我们现在先不详细介绍,先了解TIMER最基本的用法即可。由於这三种的本质上都是同样的东西,因此接下来的操作用哪一个TIMER都没有关系,只是设定的介面会有些微的不同。
顾名思义就是一个计数的工具,他会从0开始往上数,只要到达设定的上限,他就会归零,并且重新计数。而不同的TIMER支援的counter有所不同,可以看上面的表格,有些可以设定往上数(count-up),或往下数(count-down)或先往上数再往下数(count-down)称作中心对齐模式。
每一个timer都需要有一个时钟来源,我们暂时先记得timer1、8、9、10、11是来自APB1汇流排,其他的都是来自APB2,而这两个汇流排的频率在预设的情况下都是16MHz,可以在Clock configuration里面看到
接下来我们来介绍几个参数
我们来实际操作看看吧~
首先一样来设定.ioc档
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
x = __HAL_TIM_GET_COUNTER(&htim2);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
一样要记得设全域变数 x 才能使用现场表达式做监测
这里出现了两个新的函数我们来介绍一下吧
HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
之後会大量的看到类似这种的函式HAL_XXX_Start,这种函式功能为让某种功能启用,以这里为例,他就是让TIMER开始计数。
__HAL_TIM_GET_COUNTER()
这个函式的功能就是可以得到TIMER现在数到哪(也就是Counter的值)。而实际上,他不是普通的函式,他是用C语言#define的方式来定义的。定义如下:
#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
虽然他并不是一般的函式,但我们姑且称他为函式。这个函式在做的事情非常简单,我们会传进去一个__handle__结构的指标变数(htim2),而这个函式就负责找到这个结构变数底下的Instance的CNT变数。
我们可以在现场表达式输入htim2看一下里面的结构有哪些变数,
这个程序执行的时候我们就可以看到x不断的从0加到10000(单位为ms),可以试着拿手机的计时器来检验。
我们就继续用这支程序来了解counter的其他设定
在这里可以更动计数的模式,用以下的图可以清楚地了解这三种计数模式的差别,由上到下依序为中心对齐、下数、上数
这三种模式目前对我们来说还没什麽用处,要等讲到PWM输出的时候才能了解意义,现在我们就知道他数的模式有这三种就好。
选项里面的center aligned有1、2、3
可以用上面的小程序来看一下x值的变化。
今天简单的介绍了Timer最基本的使用,明天我们会加入中断的概念,来简单实作微秒级的delay(以前介绍的HAL_Delay()精度只能达到毫秒)
<<: 找LeetCode上简单的题目来撑过30天啦(DAY13)
甚麽是计算属性? 甚麽时候用计算属性? 接下来带大家来看看,也会搭配一些例子~ 甚麽是计算属性? c...
人工智慧? 机器学习? 深度学习? 刚踏入机器学习的学生自然会对这些专有名词感到相当模糊,我们就先来...
简介 之前在kaggle上面学习到了很多Python应用在Machine Learning的方法 对...
昨天我们提到了如何透过Vue-Router切换页面,今天我们来谈谈如何传递参数到路由上。 new V...
表单 原本介绍的标签都比较属於呈现给使用者 但是今天要介绍的表单呢就不仅是单单呈现而已 因为他会将使...