[STM32 HAL]立创天空星开发板STM32F407VET6开发过程1——LED使用结构体方式实现

本文介绍了使用立创开发板进行工程创建,包括时钟树配置、LED和按键设置,以及使用CubeMX和KEIL进行代码编写,重点讲解了LED控制结构体的定义和应用。
摘要由CSDN通过智能技术生成

前言: 由于立创搞活动19.9 ,我就搞了一个立创的开发板(ps: 实际上是加运费28.9)。想着来学习一下。

我写代码很少废话的,接下来是开门见山的东西。

立创·梁山派·天空星开发文档icon-default.png?t=N7T8https://lceda001.feishu.cn/wiki/QaWRwow7TiXHhgkwF5mcxZLsne7

目录

图片展示

一、创建工程

New一个工程

进行基础的参数修改

时钟树配置

配置LED引脚与WK_UP 

工程生成

二、接下来是KEIL环节

代码环节

定义结构体 

构建LED函数

初始化结构体

代码测试

编译&烧录

结果展示


-------------------------------------------------------分隔符--------------------------------------------------------------

一、创建工程

这里使用的是CubeMX进行工程构建,官方的是标准库。 

New一个工程

进行基础的参数修改

将Debug给选择成串口线,用的是啥勾选啥。有些朋友用的是Jlink呢?

时钟树配置

注意: 小心这里,开发板上面的是8MHz 的晶振 

 反正就是左边的input输入频率写8,右边的时钟写80,168,都可以,只要选择HSE和PLLCLK就行

配置LED引脚与WK_UP 

根据给出的原理图可以知道LED和按键KEY都有一个下拉电阻所以可以配置成以下

注意哦,LED和KEY都是接的低电平,默认低电平。所以后面检测和赋值都是给高电平才是点亮和按下去

工程生成

配置好之后就可以进行工程生成了

命名和路径自定义,IDE选择自己使用的那一个,比如我用的是KEIL所以选择MDK-ARM。最低版本选择V5就可以我这偷懒就默认5.32。

这个选择仅复制必要的文件和勾选生成独立的.c/.h文件。到这工程配置结束。

二、KEIL环节

选择你所使用的调试器,我使用的是DAP_Link所以选择CMSIS DAP,选择后点击右边的Settings

然后打开如图界面勾选Reset and Run,也就是点击烧录后会直接运行程序。

代码环节

其实我没使用到按键,但是按键检测大家都会吧??? 

注意将代码写到CODE BEBIN和CODE END里面,不然后续再次生成的时候会被覆盖

定义结构体 

// 在main.c找到如下位置,构造LED结构体
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

// 定义 LED 控制结构体
typedef struct
{
    void (*On)(GPIO_TypeDef *, uint16_t);  // 点亮 LED 的函数指针
    void (*Off)(GPIO_TypeDef *, uint16_t); // 熄灭 LED 的函数指针
    void (*Toggle)(GPIO_TypeDef *, uint16_t); // 翻转 LED 的函数指针
    void (*Loop)(GPIO_TypeDef *, uint16_t, uint16_t); // 循环点亮与熄灭 LED 的函数指针
} LED_Control;

/* USER CODE END PTD */

构建LED函数

结构体里所需要的有如下函数

// main.c 找到这个 USER CODE BEGIN 0
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

// LED 点亮函数
void LED_On(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin) {
    HAL_GPIO_WritePin(GPIOx, LEDx_Pin, GPIO_PIN_SET);
}

// LED 熄灭函数
void LED_Off(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin) {
    HAL_GPIO_WritePin(GPIOx, LEDx_Pin, GPIO_PIN_RESET);
}

// 翻转 LED 的函数
void LED_Toggle(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin)
{
  HAL_GPIO_TogglePin(GPIOx, LEDx_Pin);
}

// 循环点亮与熄灭 LED 的函数
void LED_Loop(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin, uint16_t Delay)
{
  HAL_GPIO_TogglePin(GPIOx, LEDx_Pin);
  HAL_Delay(Delay);
}

/* USER CODE END 0 */

这个代码好不好取决于你的LED多不多,反正我自己很少会用这个结构体来写这种简单的东西,加上这个板子只有一个LED,这样写确实挺浪费。不过这个教程主要是写如何使用结构体做某事。 

初始化结构体

// main.c 上面有LED的各种函数

LED_Control LED = 
{
    .On = LED_On,
    .Off = LED_Off,
    .Toggle = LED_Toggle,
    .Loop = LED_Loop
};

/* USER CODE END 0 */
代码测试

使用这个结构体的Loop进行测试

// main.c 找到main函数里的while循环

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
	LED.Loop(GPIOB, LED1_Pin, 200);
//使用LED的Loop方法(第一个参数写引脚在哪个区,第二个参数写引脚在第几个位置, 第三个是循环闪烁一次的延时时间)
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

编译&烧录

最后编译,并下载烧录

最后的最后

结果展示

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值