1.新建工程
使用第一章配好的STM32CubeMX和Keil5
2.查看数据书册及图形化配置
打开CT117E-M4产品手册
查看LED灯的原理图
LED的引脚为PC8-PC15,引脚为低电平时LED点亮
U1为锁存器,锁存器的使能端PD2为高电平时,LED灯才会被点亮
正确点灯步骤:
①先PD2输出高电平
②PC8-PC15输出低电平
③PD2输出低电平
图形化配置,将PC8-PC15,PD2均设为输出模式
单击要配置的引脚,选择GPIO_Output
将引脚配置完成后,进入GPIO设置界面,将引脚初始模式全部设为高电平
点击导航栏右侧 GENERATE CODE 生成项目
3.代码部分
先将比赛中可能用到的头文件整合到一个.h文件中,我这里命名为headfile.h
#ifndef _HEADFILE_
#define _HEADFILE_
#include "stm32g4xx.h"
#include "stdio.h"
#include "string.h"
#include "stdint.h"
#include "main.h"
#include "gpio.h"
#endif
点开魔法棒,选择C/C++,点击Include Paths栏最后的三个点,选择headfile.h的路径
新建led.c文件
#include "headfile.h"
void led_show(uint8_t led,uint8_t mode)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
if(mode)
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
该函数首先将PD2拉高
判断mode,mode为1时将传过来的引脚号置低电平也就是点亮LED。为0时置高电平,也就是熄灭LED
因为在HAL库中GPIO引脚顺序是按二进制排序的,哪位为1即是哪个引脚
#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */
#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */
#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */
#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */
#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */
#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */
#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */
#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */
#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */
#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */
#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */
#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */
#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */
#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */
#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */
#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */
#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */
所以我们只需传个参数,让GPIO_PIN_8相应左移即可
完成操作后再将PD2置低电平
led.h文件内容如下,并将此文件在headfile.h中引用一下:#include "led.h"
#ifndef _LED_H_
#define _LED_H_
#include "stm32g4xx.h"
void led_show(uint8_t led_pin,uint8_t mode);
#endif
在.h文件中需声明一下.c中创建函数才可使用
在main.c中引用头文件#include "headfile.h"
编辑main函数
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
led_show(1,1);
led_show(4,1);
led_show(8,1);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
4.编译并烧录
点击导航栏的全部编译,输出窗口显示0错误
将烧录线一端连接至电脑的USB口,另一端连接至开发板的Download下载口
连好之后点击烧录按钮
烧录完成后发现开发板上第1、4、8的LED灯亮起
标签:LED,Pin,PIN,16,selected,蓝桥,uint16,GPIO,define From: https://blog.csdn.net/qq_62350698/article/details/144935273