板卡型号:STM32G431RBT6
一、CubeMX配置
1、时钟配置
由于外部晶振为24MHz
所以时钟配置如下
2、引脚配置
根据LED原理图
将PC8-PC15配置为GPIO_Output模式,且GPIO output level为High
将PD2配置为GPIO_Output模式,其它默认
二、KEIL程序编写
led.c中编写如下函数
#include "led.h"
uint16_t led_val;
void turn_on_leds() //打开所有LED
{
led_val=0x00ff;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
GPIOC->ODR=led_val;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void turn_off_leds() //关闭所有LED
{
led_val=0xff00;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
GPIOC->ODR=(uint32_t)led_val;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void turn_on_led(uint8_t led_number) //打开某一个LED,取值为1-8
{
led_val &= ~ (0x01<<(7+led_number));
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
GPIOC->ODR=(uint32_t)led_val;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void turn_off_led(uint8_t led_number) //关闭某一个LED,取值为1-8
{
led_val |= (0x01<<(7+led_number));
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
GPIOC->ODR=(uint32_t)led_val;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
led.h中编写如下
#ifndef _LED_H_
#define _LED_H_
#include "main.h" //为了使用uint16_t等
void turn_on_leds(void);
void turn_off_leds(void);
void turn_on_led(uint8_t led_number);
void turn_off_led(uint8_t led_number);
#endif
另外,main.c中需包含led.h的头文件
即可操纵LED灯。