小白菜的STM32cubeMX学习(1)点亮第一颗LED
0 前言
本文参考B站视频[STM32CubeMX&HAL库教学]快速STM32基础功能学习系列.
从视频里找东西有点麻烦,所以建立这个学习笔记用来归纳整理。
本系列所有工程都会上传到github上,欢迎批评指正(刚开始用github,挺好用的赶脚 我的github主页,欢迎大家来给我小星星)
1 安装CubeMX
安装过程很多地方都有,我就不讲了。嘿嘿,这一节用来凑个字数。
开始之前,你要有一些基础的电路和单片机的知识,比如三极管、IO口什么的。就像你玩电脑首先得知道鼠标是用手拿而不是用脚推的。
2 用CubeMX创建第一个project
让我们进入正题,先来看一下CubeMX长啥样:
哇,看到那个file了没,点他!点他!!点完之后新建project,会出现这个东西,应该是一些检测更新啥的,直接点取消就行。
取消之后会让你选择型号,这里我用的是正点原子的stm32f429IGT6
第一个工程创建完毕,接下来让我们用CubeMX生成第一个代码
3 一些关于CubeMX的基础
3.1 软件界面
最常用到的是前面三个模块
项目 | 功能 |
---|---|
Pinout&Configuration | 用来配置IO口、定时器、通讯等配置,可以说是最常用的东西 |
Clock Configuration | 用来配置时钟,倍频什么的(对stm32时钟这一块有点迷) |
Project Manager | 用来设置一些project和生成的代码的东西 |
建议把下图中这一项打上对勾,这样生成代码的时候主函数main.c里面就不会有很多函数,清爽~~
PS:project路径不能有中文哦,不然生成的时候会报错。
3.2 代码保护区
CubeMX有一个代码保护区的概念,因为在单片机开发过程中,很多东西是在中途加进去的,中间手动进行配置就会麻烦。
CubeMX生成的代码中有代码保护区,你可以在任何地方进行单片机代码的书写编译,但是再次用CubeMX配置并生成代码时,只有代码保护区中的代码会保留下来。
这里我们不做任何配置直接生成代码
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
这段代码是从main.c开头截取的,可以看到有很多注释USER CODE BEGIN 和END,在同名的BEGIN和END之间就是CubeMX的代码保护区,其他地方也有,可以自己生成一下试试,这里就不一一点出来了。
4 让我们来点灯吧
4.1 电路原理图
接下来配置一下最基础的IO口,并点亮第一颗LDE。
这张图是板子上LED的接线图,可以看到LED灯接线接到了PB0和PB1。所以我们需要配置PB0和PB1为输出模式。
4.2 CubeMX配置IO口
在右边芯片上找到PB0和PB1,选择GPIO_Output模式
这个时候点开左边System Core中的GPIO,就会多出来PB0和PB1的配置,选择对应的模式即可,这里我选择推挽输出并且初始化状态一高一低。
最后在SYS中将debug改成SW模式,生成代码并打开。
4.3 完成代码
先编译一下生成的代码
打开我们的GPIO函数库,发现里面有函数
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
根据函数名和@brief中的介绍
@brief Toggles the specified GPIO pins.
可以得知,该函数是用来将指定引脚高低电平进行反转的,适合用来让一颗LED灯闪烁。
同样找到延时函数HAL_Delay(uint32_t Delay)
在while(1)中写一个让LED不断闪烁的程序
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin((GPIO_TypeDef*) GPIOB, (uint16_t) GPIO_PIN_0);
HAL_GPIO_TogglePin((GPIO_TypeDef*) GPIOB, (uint16_t) GPIO_PIN_1);
HAL_Delay(200);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
编译通过,选择好自己的下载器下载就可以了。
这个经过实验是没问题的哈,不知道咋放GIF图就不放了。有啥子问题留言私信我都行。
工程已上传到链接: https://github.com/MercerD/LED.