STM32F1x CubeMX教程(二)定时器基本使用

@author:带火星的小木条
@date:02,05,2020

教程对应的keil工程代码下载://download.csdn.net/download/weixin_43116606/12136913

1.时钟配置

时钟配置如下图,可以看到APB1总线时钟频率为36M,但定时器频率为72MHz.

2.定时器选项配置

定时器定时频率=时钟源频率/ [(PSC+1)(ARR+1)]=72M/[(71+1)(999+1)]=1000Hz,所以定时的时间为1ms.

定时相同的时间,PSC和ARR的值可以任意,但是注意PSC和ARR都是16位寄存器,最大值不超过65535.

定时器有如下三种计数模式:

递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。

递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。

中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。

默认向上计数,由自动重转载值计数到最大值产生溢出。其他配置采用默认值。

 

3.定时器中断

点击NVIC中断管理,勾选定时器1更新中断,产生溢出时会跳转到中断服务函数。此处开启定时器1中断后还可配置中断优先级,可采用默认配置,也可自行配置。

4.GPIO配置

为显示定时效果,使LED每0.5s闪烁一次,因此还需初始化IO口输出。

我的开发板PB0与LED相连,将PB0设置为输出模式,并且将标签设置为LED0,方便移植修改。其他默认:初始化低电平,推挽输出,既不上拉也不下拉,低速。

5.工程选项配置

 

.编写业务代码

生成keil工程后打开,因为初始化的工j经由CubeMX配置好,接下来的步骤:

1)启动定时器

函数原型:

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

2)中断回调函数编写

首先定义一个计数变量Tim1_cnt,定时器定时时间1ms,计数500次即达到定时0.5s的目的。

每次进入回调函数使Tim1_cnt+1,当定时0.5s时,翻转LED0状态。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if (htim->Instance == htim1.Instance) {
		Tim1_cnt++;
		if(Tim1_cnt==500){
			Tim1_cnt=0;
			HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
		}
	}
}

7.编译下载,默认使用ST-LINK下载,若使用其他下载器,需选择对应的下载方式。 

发布了10 篇原创文章 · 获赞 12 · 访问量 3993

猜你喜欢

转载自blog.csdn.net/weixin_43116606/article/details/104182407