零基础上手HAL库之—GPIO点灯

曾无好事来相访,赖尔高文一起予。这篇文章主要讲述零基础上手HAL库之—GPIO点灯相关的知识,希望能为你提供帮助。
【三】零基础上手HAL库之—GPIO点灯 3.1前言
我们已经大致的了解了Cubemx软件界面的一般操作,懂得如何新建工程和使用步骤了,接下来我们正式进入使用Hal库开发的旅程,这是一个惊心动魄的时刻,为什么呢?在使用Hal库的同时你会感觉到其优势性,开发效率大大提高带来的快感,来吧我们先点灯。
【零基础上手HAL库之—GPIO点灯】前期准备

  • STM32各类型的板子(本人使用F103Rc和F407ZE)。
  • CubeMx软件,Keil_IDE。
    零基础上手HAL库之—GPIO点灯

    文章图片
3.2 LED流水灯
我们先来看看板子对应流水灯的原理图:
零基础上手HAL库之—GPIO点灯

文章图片

我们知道了板子硬件的电路构造,那么我们来看看软件上怎么配置。
零基础上手HAL库之—GPIO点灯

文章图片

1、新建工程:
零基础上手HAL库之—GPIO点灯

文章图片

零基础上手HAL库之—GPIO点灯

文章图片

2、时钟配置
零基础上手HAL库之—GPIO点灯

文章图片

零基础上手HAL库之—GPIO点灯

文章图片

6、时钟配置这里我们采用最简单,最方便,最快捷的配置方式,见下图:
点击Clock Configuration后对应②中填入72(F407最高频率为168,不同芯片可以配置的最高频率不同)按下回车。
零基础上手HAL库之—GPIO点灯

文章图片

然后得到如下形式,表示时钟已经配置成功:
零基础上手HAL库之—GPIO点灯

文章图片

零基础上手HAL库之—GPIO点灯

文章图片

7、项目管理配置以及代码生成在熟悉Cubemx软件框架中已经细细的讲过这部分内容,我们需要配置的是项目名称,项目保存位置,所用IDE的配置
零基础上手HAL库之—GPIO点灯

文章图片

选择如下两个选项后,点击右上角的GNEERATE CODE按钮,产生代码。
零基础上手HAL库之—GPIO点灯

文章图片

零基础上手HAL库之—GPIO点灯

文章图片
8、编写业务代码打开main.c文件,我们可以看到如下界面,我们在使用Cubemx和Keil开发时,所有的用户代码都是写入在
/* USER CODE BEGIN 1 *//* USER CODE END 1 */

这样的注释之间,而且常常在不用的区间编写不同的代码。
零基础上手HAL库之—GPIO点灯

文章图片

API我们再来看看GPIO模块对应的API函数:
/* 初始化和删除初始化函数, HAL_GPIO_Init:cubemx生成代码后自动调用初始化函数 HAL_GPIO_DeInit:解除初始化,不想使用时可以主动使用*/ voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx, GPIO_InitTypeDef *GPIO_Init); voidHAL_GPIO_DeInit(GPIO_TypeDef*GPIOx, uint32_t GPIO_Pin); /* 操作GPIO的函数,包括读取,写入,翻转,加锁,中断服务函数以及回调函数 HAL_GPIO_ReadPin:读取引脚电平 HAL_GPIO_WritePin:写入引脚电平 HAL_GPIO_TogglePin:翻转引脚电平 HAL_GPIO_LockPin:所以引脚当前电平,将无法改变 HAL_GPIO_EXTI_IRQHandler:引脚的中断服务函数 HAL_GPIO_EXTI_Callback:引脚的中断回调函数 */ GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

main( )函数我们可以在main.h中看到之前定义的用户标签,如下:
#define LED1_Pin GPIO_PIN_14 #define LED1_GPIO_Port GPIOC #define LED2_Pin GPIO_PIN_15 #define LED2_GPIO_Port GPIOC

下面是mian()函数:
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* 复位所有外设,以及初始化Flash接口和嘀嗒定时器 */ HAL_Init(); /* USER CODE BEGIN Init *//* USER CODE END Init *//* 之前在 Clock Configuration 配置的时钟生成为此函数 */ SystemClock_Config(); /* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* 初始化所有的外设,GPIO外设在此初始化 */ MX_GPIO_Init(); /* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_Delay(500); HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* USER CODE END WHILE *//* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

零基础上手HAL库之—GPIO点灯

文章图片


    推荐阅读