打印
[应用相关]

使用面相对象来点灯

[复制链接]
232|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaheihei|  楼主 | 2023-4-26 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "main.h"
#include "Led.h"

// LED对象声明
Led led1(GPIOA, GPIO_PIN_5);

int main(void)
{
  // HAL库初始化
  HAL_Init();

  // System时钟配置
  SystemClock_Config();

  // GPIO时钟使能
  __HAL_RCC_GPIOA_CLK_ENABLE();

  // LED初始化
  led1.Init();

  while (1)
  {
    // LED闪烁
    led1.Toggle();
    HAL_Delay(500);
  }
}
其中,Led.h头文件中包含了Led类的定义和声明:
#ifndef LED_H
#define LED_H

#include "stm32f4xx_hal.h"

class Led
{
public:
  Led(GPIO_TypeDef* port, uint16_t pin);
  void Init(void);
  void On(void);
  void Off(void);
  void Toggle(void);

private:
  GPIO_TypeDef* mPort;
  uint16_t mPin;
};

#endif
在Led.cpp文件中,实现了Led类中定义的函数:
#include "Led.h"

Led::Led(GPIO_TypeDef* port, uint16_t pin)
  : mPort(port), mPin(pin)
{
}

void Led::Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = mPin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(mPort, &GPIO_InitStruct);
}

void Led::On(void)
{
  HAL_GPIO_WritePin(mPort, mPin, GPIO_PIN_SET);
}

void Led::Off(void)
{
  HAL_GPIO_WritePin(mPort, mPin, GPIO_PIN_RESET);
}

void Led::Toggle(void)
{
  HAL_GPIO_TogglePin(mPort, mPin);
}
这里的Led类封装了一个LED的控制,使用GPIO_TypeDef* port和uint16_t pin作为参数传入构造函数,然后实现了Init、On、Off和Toggle等函数来控制LED的开关和闪烁。在主函数中,我们创建了一个Led对象led1,并在while循环中不断调用Toggle函数使LED闪烁。

这个示例代码中,我们既使用了STM32 HAL库来控制GPIO口,又使用了C++的面向对象编程风格,通过封装一个Led类来简化代码,提高可读性和可维护性。

使用特权

评论回复
沙发
wahahaheihei|  楼主 | 2023-4-26 18:25 | 只看该作者
main.h文件通常是由STM32CubeMX自动生成的,用于包含所有与系统初始化和配置有关的头文件和宏定义。它包含了一些重要的头文件,例如stm32f4xx_hal.h、stm32f4xx_hal_gpio.h、stm32f4xx_hal_rcc.h等,这些头文件提供了许多与硬件操作有关的函数和结构体定义。

以下是一个简单的main.h文件示例,以便了解其内容:
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f4xx_hal.h"
#include "stm32f4xx.h"
#include "stm32f4xx_nucleo.h"

void Error_Handler(void);

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

使用特权

评论回复
板凳
wahahaheihei|  楼主 | 2023-4-26 18:25 | 只看该作者
在这个示例中,我们可以看到包含了一些STM32 HAL库和Nucleo开发板相关的头文件,并定义了一个Error_Handler函数。在C++代码中,我们可以直接使用这些头文件中的函数和结构体,以便控制STM32的硬件资源。

使用特权

评论回复
地板
zwsam| | 2024-1-21 09:16 | 只看该作者

使用特权

评论回复
5
Clyde011| | 2024-6-6 07:32 | 只看该作者

首先是进行按比例和具体的施胶量进行混合操作

使用特权

评论回复
6
公羊子丹| | 2024-6-6 08:25 | 只看该作者

将在原边形成电压尖峰,

使用特权

评论回复
7
万图| | 2024-6-6 09:28 | 只看该作者

使该元器件不超过正常值范围

使用特权

评论回复
8
Uriah| | 2024-6-6 10:31 | 只看该作者

该电容可以存储高达8KV的电位

使用特权

评论回复
9
帛灿灿| | 2024-6-6 12:27 | 只看该作者

ESD静电保护器工作特性与TVS管一致。

使用特权

评论回复
10
Pulitzer| | 2024-6-6 13:30 | 只看该作者

环氧树脂、聚胺脂、有机硅灌封胶

使用特权

评论回复
11
周半梅| | 2024-6-6 15:26 | 只看该作者

保护被保护IC或线路

使用特权

评论回复
12
Pulitzer| | 2024-6-6 16:29 | 只看该作者

电源模块的灌封用的胶是可以根据需求而调制的

使用特权

评论回复
13
童雨竹| | 2024-6-6 18:25 | 只看该作者

所以不会通过地损耗

使用特权

评论回复
14
Wordsworth| | 2024-6-6 19:28 | 只看该作者

相当于积分,用于滤波

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3043

帖子

12

粉丝