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(断电重启)才会生效。