单片机学习小组
直播中

徐伟

7年用户 921经验值
私信 关注

如何通过STM32CubeMX调用HAL库实现流水灯的效果?

如何通过STM32CubeMX调用HAL库实现流水灯的效果?

回帖(1)

周莹

2022-2-8 14:48:57




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库实现流水灯的效果程序。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分