赞
踩
记录一下STM32CubeMX的学习笔记,同时分享给初学的小白,希望一起进步。
如何使用STM32CubeMX以及工程创建在之前的博客有提到,这里就直接从定时器讲起。
编译环境:KEIL
代码生成:STM32CubeMX
库:HAL
MCU:STM32F072
假设你的cubeMX工程已经建好,这里我们开始配置定时器2(TIM2),使用内部时钟源。
配置完GPIO后开始配置时钟,我这里配置的是内部时钟,配置的24Mhz的内部时钟(HSI)如图:
我这里配置的是1ms的定时器。我们要通过配置预分频和计数周期来定时1ms。
我们的内部时钟周期配置的是24M,而我们要定时1ms,那么Prescaler设置成(24-1),Counter Period设置为(1000-1)。设置的这两个数字可以根据实际需求来凑即可,只要算出来是1ms即可。
计算公式:
频率(f)
时间(F)
预分频(Prescaler)
计数周期(Counter Period)
f = timer_clock / (Prescaler+1) / (Counter_Period+1) //timer在计算的时候会自动将值+1
计算如下:
Prescaler = 24-1
Counter_Period = 1000-1
f = 24Mhz / (24-1+1) / (1000-1+1) = 1000hz
T = 1/1000 = 1ms
配置如图:
Counter Mode 是 计数模式,根据需求向上计数(up)或者向下计数(down)。
NVIC中断配置:
时钟配置完毕后,选择“Project Manager”到工程配置界面。
1、配置工程的名称
2、工程存储路径
3、IDE选择(如果是keil工具,选择MDK-ARM)
4、mcu依赖的cube包在哪个目录
接着到“Code Generator”下选择这几个选项来生成工程:
选择好过后我们就可以点击右上角的"GENERATE CODE"按键来生成代码了。
如果提示你的firmware package 缺少直接更新下载即可,如果没网状态,就需要去官网下载依赖包放在之前提到的目录下即可。
我是用一下依赖包生成得工程代码。
点击编译按钮对工程进行编译。
在 CubeMX 生成的文件中添加用户代码的时候,必须是写在/* USER CODE BEGIN n*/和/* USER CODE
END n*/之间。这样如果需要改变 Cube 工程的配置,在重新生成代码时,在这两句注释之间的语 句不会被覆盖。而用户新建或添加的文件不会受到影响。
我们这里工程就基本建好了,现在来实现功能代码部分。
在代码中添加如下代码使能定时器中断:
HAL_TIM_Base_Start_IT(&htim2)
我们要添加函数功能到回调函数内,那么怎么去找这个回调函数了?
1、我们可以打开对应的头文件,这里是stm32f0xx_hal_time.h,找到以callback结尾的函数(void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);)
通过点击右键,然后点击“go to Definition…”就可以定位到函数实现的地方:
这里我们看到这个函数是被 __weak修饰的函数,所以这个函数如果我们要使用的话直接把函数复制出来在用户端直接重写就行了。
在CubeMX生成的程序框架中,TIMER共用一个回调函数接口。要想知道是哪个定时器中断源,就判断其输入参数htim即可。
在time.c中添加以下代码就可以识别对应的定时器中断了。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2) /* tim2 1ms*/
{
//功能代码
}
}
定时器配置这样就结束了,上面提到内部时钟源的配置,这里在提一下外部时钟源的配置。
将PF1和PF2配置成外部晶振功能:
选择HSE的时钟配置如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。