打印
[活动]

【APM32F411V Tiny Board测评】3、GPIO实现呼吸灯

[复制链接]
1534|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
【APM32F411V Tiny Board测评】3、GPIO实现呼吸灯
1、程序说明
### 程序详细解释
```c
/* Includes */
#include "main.h"
#include "Board.h"
```
- `#include "main.h"`:包含主程序的头文件,定义了程序中需要使用的函数和变量。
- `#include "Board.h"`:包含板级支持包的头文件,定义了与硬件相关的初始化和控制函数。
```c
/** @addtogroup Examples
  @{
  */
/** @addtogroup GPIO_Toggle
  @{
  */
```
- `@addtogroup Examples` 和 `@addtogroup GPIO_Toggle`:Doxygen注释,用于文档生成,标识程序所属的示例和功能组。
```c
/** @defgroup GPIO_Toggle_Macros Macros
  @{
  */
```
- `@defgroup GPIO_Toggle_Macros`:定义宏的组,用于分组相关的宏定义。
```c
#ifdef APM32F411
#define APM_LEDInit    APM_TINY_LEDInit
#define APM_LEDOn      APM_TINY_LEDOn
#define APM_LEDOff     APM_TINY_LEDOff
#else
#define APM_LEDInit    APM_MINI_LEDInit
#define APM_LEDOn      APM_MINI_LEDOn
#define APM_LEDOff     APM_MINI_LEDOff
#endif
```
- `#ifdef APM32F411`:条件编译指令,检查是否定义了APM32F411。
- 根据条件编译选择不同的宏定义:
  - `APM_LEDInit`:定义为适合特定板卡的LED初始化函数。
  - `APM_LEDOn`:定义为适合特定板卡的LED点亮函数。
  - `APM_LEDOff`:定义为适合特定板卡的LED熄灭函数。
```c
/**@} end of group GPIO_Toggle_Macros */
```
- `@} end of group GPIO_Toggle_Macros`:结束宏定义组的Doxygen注释。
```c
/** @defgroup GPIO_Toggle_Functions Functions
  @{
  */
```
- `@defgroup GPIO_Toggle_Functions`:定义函数的组,用于分组相关的函数。
```c
/*!
* @brief     Main program
*
* @param     None
*
* @retval    None
*/
int main(void)
{
    int delay;
    int step = 1;
    int max_delay = 1000;
    int min_delay = 1;
    APM_LEDInit(LED2);
    /* Init delay function */
    Delay_Init();
```
- `int main(void)`:程序的主函数,程序入口点。
- `int delay`:定义延迟变量,用于控制LED亮灭时间。
- `int step = 1`:定义步长变量,用于控制亮度变化的速度。
- `int max_delay = 1000`:定义最大延迟,用于控制最大亮度。
- `int min_delay = 1`:定义最小延迟,用于控制最小亮度。
- `APM_LEDInit(LED2)`:初始化LED2。
- `Delay_Init()`:初始化延迟函数。
```c
    while (1)
    {
        // Increase brightness
        for (delay = min_delay; delay <= max_delay; delay += step)
        {
            APM_LEDOn(LED2);
            Delay_us(delay);
            APM_LEDOff(LED2);
            Delay_us(max_delay - delay);
        }
        // Decrease brightness
        for (delay = max_delay; delay >= min_delay; delay -= step)
        {
            APM_LEDOn(LED2);
            Delay_us(delay);
            APM_LEDOff(LED2);
            Delay_us(max_delay - delay);
        }
    }
}
```
- `while (1)`:无限循环,程序将一直运行。
-增加亮度部分:
  - `for (delay = min_delay; delay <= max_delay; delay += step)`:逐步增加延迟值,模拟亮度增加。
  - `APM_LEDOn(LED2)`:点亮LED2。
  - `Delay_us(delay)`:延迟`delay`微秒,控制亮度。
  - `APM_LEDOff(LED2)`:熄灭LED2。
  - `Delay_us(max_delay - delay)`:延迟剩余时间。
-减少亮度部分:
  - `for (delay = max_delay; delay >= min_delay; delay -= step)`:逐步减少延迟值,模拟亮度减少。
  - `APM_LEDOn(LED2)`:点亮LED2。
  - `Delay_us(delay)`:延迟`delay`微秒,控制亮度。
  - `APM_LEDOff(LED2)`:熄灭LED2。
  - `Delay_us(max_delay - delay)`:延迟剩余时间。
2、程序
/* Includes */
#include "main.h"
#include "Board.h"

/** @addtogroup Examples
  @{
  */

/** @addtogroup GPIO_Toggle
  @{
  */

/** @defgroup GPIO_Toggle_Macros Macros
  @{
  */
#ifdef APM32F411
#define APM_LEDInit    APM_TINY_LEDInit
#define APM_LEDOn      APM_TINY_LEDOn
#define APM_LEDOff     APM_TINY_LEDOff
#else
#define APM_LEDInit    APM_MINI_LEDInit
#define APM_LEDOn      APM_MINI_LEDOn
#define APM_LEDOff     APM_MINI_LEDOff
#endif

/**@} end of group GPIO_Toggle_Macros */

/** @defgroup GPIO_Toggle_Functions Functions
  @{
  */

/*!
* @brief     Main program
*
* @param     None
*
* @retval    None
*/
int main(void)
{
    int delay;
    int step = 1;
    int max_delay = 1000;
    int min_delay = 1;

    APM_LEDInit(LED2);
    /* Init delay function */
    Delay_Init();

    while (1)
    {
        // Increase brightness
        for (delay = min_delay; delay <= max_delay; delay += step)
        {
            APM_LEDOn(LED2);
            Delay_us(delay);
            APM_LEDOff(LED2);
            Delay_us(max_delay - delay);
        }

        // Decrease brightness
        for (delay = max_delay; delay >= min_delay; delay -= step)
        {
            APM_LEDOn(LED2);
            Delay_us(delay);
            APM_LEDOff(LED2);
            Delay_us(max_delay - delay);
        }
    }
}

/**@} end of group GPIO_Toggle_Functions */
/**@} end of group GPIO_Toggle */
/**@} end of group Examples */



3、效果



使用特权

评论回复
沙发
丙丁先生| | 2024-6-6 12:36 | 只看该作者
视频和例程?

使用特权

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

本版积分规则

113

主题

700

帖子

3

粉丝