STM32CubeIDE下通过定时器1实现LED以1S周期闪烁

我也是刚接触STM32cube软件,感觉和Keil软件还是有很大区别的,特别是学习了正点原子的写法和思路后学习cube软件感觉两者逻辑差别很大。以下是我自己的学习心得:
硬件:STM32F030C8T6
IDE版本:1.3.0

1、通过CubeIDE工具对LED驱动管脚(PA15)以及定时器1做好管脚配置工作:
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第1张图片
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第2张图片
并勾选中断设置:
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第3张图片

具体数据怎么计算网上很多,相信大家也很娴熟了,当然以上配置是根据时钟配置来定的,不同的时钟对于定时器的分频和自动装载值也不一样,我用的是48MHz的时钟
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第4张图片
pin管脚配置和时钟配置好之后Ctrl+S会自动生成工程代码
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第5张图片
按上图找到main.c,双击打开主函数可以看到:
IO初始化MX_GPIO_Init();
定时器1初始化MX_TIM1_Init();
以及循环函数,在定时器1初始化函数里面(进入该函数)或者后面的UERS区添加定时器使能函数
/* USER CODE BEGIN 2 /
HAL_TIM_Base_Start_IT(&htim1);//Enable Timer1
/
USER CODE END 2 /
主函数添加自定义代码必须在自定义代码区(带有USER CODE提示)的begin和end之间。
如果是添加到定时器初始化函数里面也可以,如下:
/
USER CODE BEGIN TIM1_Init 2 /
HAL_TIM_Base_Start_IT(&htim1);//Enable Timer1
/
USER CODE END TIM1_Init 2 */

下面是要重写定时器回调函数HAL_TIM_PeriodElapsedCallback,但是具体位置好像有不同说法:
1、有人说放到tim.c中,但是具体位置不确定,
2、也有说可以放到main.c的USER CODE区,
我都试了,说法1有错误,而且没说具体放哪,说法2是OK的,具体:
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef htim)
{
if(htim->Instance == TIM1)
HAL_GPIO_TogglePin(LED_demo_port,LED_demo);
}
/
USER CODE END 4 */

并在main.c的前面用户代码区添加两个宏定义:
#define LED_demo_port GPIOA
#define LED_demo GPIO_PIN_15
到这就OK了,LED就会以1S的周期闪烁。

用cubeIDE好像有个好处是可以直观的看到使用的ROM和RAM区
STM32CubeIDE下通过定时器1实现LED以1S周期闪烁_第6张图片

你可能感兴趣的:(STM32CubeIDE)