当前位置:   article > 正文

[STM32CubeMX]学习笔记1:GPIO输出LED流水灯_hal_gpio_togglepin(led1_gpio_port, led1_pin);

hal_gpio_togglepin(led1_gpio_port, led1_pin);

 

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的内容):

  1. #define LED1_Pin GPIO_PIN_0
  2. #define LED1_GPIO_Port GPIOC

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

  1. void MX_GPIO_Init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStruct = {0};
  4. HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
  5. |LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin, GPIO_PIN_RESET);
  6. GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
  7. |LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin; //选择对应的LED管脚
  8. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //输出模式
  9. GPIO_InitStruct.Pull = GPIO_NOPULL;
  10. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //输出速度
  11. 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函数介绍

主程序如下:

  1. while (1)
  2. {
  3. /* USER CODE END WHILE */
  4. HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
  5. HAL_Delay(500);//毫秒级延迟
  6. HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  7. HAL_Delay(500);
  8. HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
  9. HAL_Delay(500);
  10. HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
  11. HAL_Delay(500);
  12. HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_Pin);
  13. HAL_Delay(500);
  14. HAL_GPIO_TogglePin(LED6_GPIO_Port,LED6_Pin);
  15. HAL_Delay(500);
  16. HAL_GPIO_TogglePin(LED7_GPIO_Port,LED7_Pin);
  17. HAL_Delay(500);
  18. HAL_GPIO_TogglePin(LED8_GPIO_Port,LED8_Pin);
  19. HAL_Delay(500);
  20. /* USER CODE BEGIN 3 */
  21. }

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/305232
推荐阅读
相关标签
  

闽ICP备14008679号