STM32CubeMX学习笔记1:GPIO输出LED流水灯

 

MCU:STM32F103ZET6

IDE:  MDK-ARM V5 +STM32CubeMX5.0.0

 

一. 在 Pinout&Configuration---System Core中:

  • 1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator

  • 2. 设置系统SYS的Debug为Serial Wire:

  • 3. 设置GPIO中的LED管脚。

根据MCU的硬件原理图可以看出LED均是低电平触发,且对应的端口为PC0-PC7,因此在使能是应开启GPIOC端口。

在MCU管脚图中找到PC0-PC7管脚,右键将管脚设置为GPIO_Output输出模式。

此时在System Core的GPIO中,会出现对应端口,点击端口将GPIO output level设置为low,将User Label定义为LED。

二.在 Project Manager---Project中:

1.设置项目的名称以及保存的位置,选择Toolchain/IDE为MDK-ARM V5,

Tips:最好把Linker Settings中的Minimum Heap Size设置为0x600。

2.在Code Generator选项中如下勾选:

最后点Generate Code生成代码,并选择“Open Project”:

首先进入main.h,其中已经对管脚端口进行了宏定义(对应User_Label的内容):

#define LED1_Pin          GPIO_PIN_0
#define LED1_GPIO_Port    GPIOC

在gpio.c中进行了对GPIO的初始化:贴出核心代码与备注

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin 
                          |LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin =   LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin 
                          |LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin; //选择对应的LED管脚
  GPIO_InitStruct.Mode =  GPIO_MODE_OUTPUT_PP; //输出模式
  GPIO_InitStruct.Pull =  GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  //输出速度
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

三.在keil中编写主函数main.c:

打开main.c,在while(1)中编写主函数,要实现LED灯亮与灭可以通过调用HAL_GPIO_TogglePin函数与HAL_Delay函数。

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

这个函数用来翻转某个引脚的电平状态,可用以实现LED的闪烁。

__weak void HAL_Delay(uint32_t Delay)

是毫秒级的延时函数。

关于HAL库中GPIO的函数介绍:HAL库中GPIO函数介绍

主程序如下:

while (1)
  {
    /* USER CODE END WHILE */
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_Delay(500);//毫秒级延迟
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED6_GPIO_Port,LED6_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED7_GPIO_Port,LED7_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED8_GPIO_Port,LED8_Pin);
		HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }

至此,编译后无错并下载到开发板中,就完成了通过STM32CubeMX调用HAL库实现流水灯的效果程序。