学习记录(二)LED闪烁 STM32CubeMX MDK5 ST-LinkV2 STM32G474VET6

本文介绍如何使用STM32CubeMX配置STM32G474VET6芯片,实现5个LED灯的交替闪烁。具体步骤包括设置GPIO、时钟和系统调度进程算法,最终通过ST-Link V2下载程序并验证效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 首先用STM32CubeMX创建工程,选择所用的芯片型号,STM32G474VET6-LQFP100,双击。

 

2.2 调GPIO,查原理图知所要用的5个LED的IO引脚,如下图LED345对应引脚PD765,低电平亮。点Cube软件芯片图中打开对应引脚选择GPIO_Output。

 

2.3 再打开时钟HSE选择Crystal/Ceramic Resonator,芯片引脚图自动打开。Clock Configuration暂时可不设置。

 

2.4 在Project Manager中设置工程名与路径,IDE选择MDK5,在Code Generator中记得打勾图中标注项。

 

2.5 编程中使用之前所学的系统调度进程算法,以下补充所需的定义、LedToggle函数,及HAL库中HAL_GPIO_TogglePin函数源码,其功能为使GPIO引脚电平切换。该程序运行效果为:5个LED(预设为亮)每隔500ms变换闪烁状态。

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#define START_APP_FUNCTION 0x01
#define MCM_MANUAL 0x00
#define MCM_AUTO   0x01
#define MCM_ALWAYS 0x02
#define LED1_Pin GPIO_PIN_7
#define LED1_GPIO_Port GPIOE
#define LED2_Pin GPIO_PIN_8
#define LED2_GPIO_Port GPIOE
#define LED3_Pin GPIO_PIN_5
#define LED3_GPIO_Port GPIOD
#define LED4_Pin GPIO_PIN_6
#define LED4_GPIO_Port GPIOD
#define LED5_Pin GPIO_PIN_7
#define LED5_GPIO_Port GPIOD
#define MCL_MAX 2

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

typedef   signed           char int8_t;
typedef   signed short     int int16_t;
typedef   signed           int int32_t;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t  u8;
typedef volatile uint32_t  vu32;

void LedToggle(void);
static void App_EndProcess(void);
void TimingDelay_Decrement(void);
void SetMacbRemarks(u16 dif);
static void TaskProcess(void);

typedef struct _MAINAPP_COMPONENTS
{
	u8 inrun;
	u16 clock;
	u16 timer;
	u8 mode;
	void (*lpTaskHook)(void);
} MAINAPP_COMPONENTS;

static MAINAPP_COMPONENTS theComps[] =
{
    {  0, 0,  500,    MCM_AUTO,	  LedToggle },
	{  0, 0,  1000,   MCM_AUTO,   App_EndProcess  },

};
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

vu32 OSTick   = 0;

/* USER CODE END PD */
void LedToggle(void)
{
    HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin|LED2_Pin);
	HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin|LED4_Pin|LED5_Pin);

}
/**
  * @brief  Toggle the specified GPIO pin.
  * @param  GPIOx where x can be (A..G) to select the GPIO peripheral for STM32G4xx family
  * @param  GPIO_Pin specifies the pin to be toggled.
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
  * @retval None
  */
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
  uint32_t odr;

  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  /* get current Output Data Register value */
  odr = GPIOx->ODR;

  /* Set selected pins that were at low level, and reset ones that were high */
  GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
}

 

2.6 程序编译成功后通过调试器ST_LinkV2下载,需要注意设置如下图,SW port和Reset and Run打勾。

 

2.7 硬件连线图,需要注意的是程序下载后要插拔一次USB(断电重启)才会生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值