B2课程:一个LED程序;
有了第1个demo的基础,第2个demo也是很容易理解的。
看一下烧录的效果:

图(一)LED无显示

图(二)LED显示文字
哈哈,怎么烧录B2的demo跟图上不一样,哪里出问题了吗?这里要卖个关子,现在只是把LED打开了,但还没有内容,所以这里还是看不出效果的。这个要到A8的demo才会直观地看到LED显示出内容,忍不住的可以打开烧录看效果^^。

图(三)关键代码
解读一下这个demo的关键代码
void al_main_task(void *arg)
{
al_main_task_sys_clock_init();
al_led_init();
while (1)
os_tick_delay(500);
AL_LED_OFF();
os_tick_delay(500);
}
}
al_led_init();//将led程序初始化
AL_LED_ON();//打开led
AL_LED_OFF();//关闭led
这些方法见文知义,也是汪工经历了上层和底层的编程,在代码命名上面相当规范。
进一步解读一下这3个方法的实现:
#define AL_LED_ON() GPIO_SetBit(GPIOD, GPIO_PIN_4)
#define AL_LED_OFF() GPIO_ClearBit(GPIOD,
GPIO_PIN_4)
void
al_led_init(void)
{
GPIO_Config_T
gpio_config_struct;
gpio_config_struct.mode
= GPIO_MODE_OUT_PP;
gpio_config_struct.intEn
= GPIO_EINT_DISABLE;
gpio_config_struct.speed
= GPIO_SPEED_10MHz;
= input
gpio_config_struct.pin
= GPIO_PIN_4;
GPIO_Config(GPIOD,
&gpio_config_struct);
}
这段代码的核心作用是:创建一个主任务,让开发板上的 LED(GPIOD 的 PIN_4)每
500ms 亮灭一次,实现 1Hz 闪烁。
结合文件内容,逐段解读如下:
AL_LED_ON() / AL_LED_OFF()
是两个宏,分别调用 GPIO 库函数去置位/清位 GPIOD, PIN_4。
简单理解:一个“点亮灯”,一个“熄灭灯”。
al_led_init()
配置 LED 对应的 GPIO 引脚工作模式。
关键配置是:
GPIO_MODE_OUT_PP:输出(适合驱动 LED)
GPIO_EINT_DISABLE:关闭该引脚外部中断
GPIO_SPEED_10MHz:GPIO
切换速度
pin = GPIO_PIN_4:目标引脚是 PD4
最后通过 GPIO_Config(GPIOD,
&gpio_config_struct) 生效。
g_main_task_stack / g_main_task_tcb
RTOS 任务相关资源:
g_main_task_stack:主任务栈空间(8字节对齐)
g_main_task_tcb:任务控制块(TCB)
al_main_task_sys_clock_init()
调用 SysTick_Config(RCM_GetMasterClockFreq()
/ 1000),把 SysTick 配成 1ms 一次中断。
这通常用于 RTOS tick 或延时基准。
al_main_task(void *arg)
主任务入口:
初始化系统时钟节拍
初始化 LED 引脚
进入循环:
开灯 -> os_tick_delay(500) 延时 500 tick(通常约 500ms)
关灯 -> 再延时 500
tick
结果就是 LED 持续闪烁。