【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、效果
|