# rtt-pkgs-easyblink **Repository Path**: RT-Thread-Mirror/rtt-pkgs-easyblink ## Basic Information - **Project Name**: rtt-pkgs-easyblink - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-03-30 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # easyblink ## 简介 小巧轻便的LED控制软件包,可以容易地控制LED开、关、反转和各种间隔闪烁,占用RAM少。 ## 特点 和其它LED同类软件相比,easyblink 有一个显著的特点,占用 RAM 特别少,其它 LED 软件一般每一个LED都需要创建一个线程,LED一多,线程数就多了,所占用的栈空间就相应的增大。而 easyblink 始终只使用一个守护线程(线程栈可以是预先分配的静态栈空间),无论多少个 LED,就一个线程。另外,只需要简单移植 GPIO 部分组件(rt_pin_mode/rt_pin_read/rt_pin_write),就可以直接使用到 Nano 版,特别适合 RAM 紧张的产品。在 2.1.0 版本及以后,支持直接在中断 ISR 中调用。 ## 获取软件包 ### 标准版: 使用 easyblink 软件包需要在 ENV 环境的包管理中选中它,若没有找到,先使用 `pkgs --upgrade` ,升级本地的包列表,运行 menuconfig 后具体路径如下: ``` RT-Thread online packages peripheral libraries and drivers ---> [*] easyblink: Blink the LED easily and use a little RAM ---> ``` ``` --- easyblink: Blink the LED easily and use a little RAM (3) Setting the max LED nums [ ] Blink led on console to test [ ] Use mutex to make thread safe [ ] Use heap with the easyblink thread stack created Version (latest) ---> ``` |设置选项| 描述 | |-------|--------| |Setting the max LED nums|最多可使用的LED数目| |Blink led on console to test|可以在控制台控制LED闪烁,进行测试| |Use mutex to make thread safe| * 在 2.1.0 版本中移除,而使用了临界区| |Use heap with the easyblink daemon thread stack created|LED守护线程栈使用系统动态堆内存| ### Nano 版使用: Nano 版需要简单移植 GPIO 部分组件(rt_pin_mode/rt_pin_read/rt_pin_write),直接拷贝 easyblink.h 和 easyblink.c 到用户文件夹,然后要确保开启宏 RT_USING_SEMAPHORE,自己再在 `rtconfig.h` 中配置几个宏: | 宏 | 描述 | |------|--------| |PKG_USING_EASYBLINK|使用软件包| |PKG_EASYBLINK_MAX_LED_NUMS|定义 LED 数目| |PKG_EASYBLINK_USING_MSH_CMD|定义可以在控制台使用 eblink 进行LED的闪烁测试| |PKG_EASYBLINK_USING_HEAP|LED的守护线程栈使用系统的动态堆内存,确保开启 RT_USING_HEAP,否则,在编译时就自动分配好内存。| ## API 简介 `ebled_t easyblink_init_led(rt_base_t rt_pin, rt_base_t active_level)` easyblink 的初始化函数,每个 LED 使用前必须先初始化,V2.0.0 新增。 |参数|描述| |----|----| |rt_pin|LED 驱动引脚编号,查看 PIN 驱动代码 drv_gpio.c 文件确认引脚编号。对 STM32,可以使用GET_PIN()宏,如 GET_PIN(F, 9) 为 PF9| |active_level|点亮LED时的端口电平,为 PIN_LOW 或 PIN_HIGH| 函数返回 ebled_t 类型指针,init 次数超过最大LED数目,返回空指针。 `ebled_t easyblink_init(GPIO_TypeDef *port, rt_uint16_t pin, GPIO_PinState active_level)` easyblink 的初始化函数,每个 LED 使用前必须先初始化,为了兼容 V1.0.0 而保留的,只支持 STM32 MCU。 注意:在 2.1.0 版本中已移除。 |参数|描述| |----|----| |port|为LED驱动引脚端口,GPIOx,x 为 A、B、C、D 等等| |pin|引脚端口号,GPIO_PIN_0 - GPIO_PIN_15| |active_level|点亮LED时的端口电平,为 GPIO_PIN_RESET 或 GPIO_PIN_SET| 函数返回 ebled_t 类型指针,init 次数超过最大LED数目,返回空指针。 ``` /*************************************************************************************************** * @fn easyblink * * @brief 以给定的次数、脉宽和周期闪烁LED。 * * @param led - LED句柄 * nums - LED闪烁次数,-1为无限次 * pulse - LED闪亮的脉冲宽度,以毫秒为单位 * period - LED闪烁的周期,以毫秒为单位 * * @return None ***************************************************************************************************/ void easyblink(ebled_t led, rt_int16_t nums, rt_uint16_t pulse, rt_uint16_t period) ``` |参数|描述| |----|----| |led|easyblink_init 后得到的 LED 句柄| |nums|闪烁次数,-1 为一直闪烁| |pulse|LED 闪烁时点亮LED的脉冲宽度,以毫秒为单位| |period|LED 闪烁周期,亮和暗即一个完整的周期| 当前LED正在闪烁时,如果这时LED再调用一次 easyblink(),若当前LED的nums为-1(即一直闪烁),则会打断当前LED的闪烁,先关闭LED 500ms,然后使用新的参数进行闪烁,闪烁好了后,会再关闭LED 5000ms,再恢复原来的LED参数继续闪烁,关断LED的前后时间可以在 easyblink.h 里调整设置。否则,会保存参数在后备区,等当前的闪烁完了后,接着以新的参数闪烁。 因为只有一个后备区,因此当后备区有待闪烁的参数时,再次调用 easyblink(),原来后备区的参数将丢失,代之于新的参数。 v2.1.0 及以后支持在中断 ISA 中使用 `easyblink()`。 `void easyblink_stop(ebled_t led)` 主动停止 LED 闪烁。 `void eb_led_on(ebled_t led)` 点亮 LED 。 `void eb_led_off(ebled_t led)` 关闭 LED 。 `void eb_led_toggle(ebled_t led)` 翻转 LED 。 ## 使用示例 ``` #include "easyblink.h" ... ebled_t led1 = RT_NULL; ebled_t led2 = RT_NULL; int main(void) { ... /* 初始化LED1,引脚B口5脚,STM32可以使用GET_PIN()宏,低电平有效 */ led1 = easyblink_init_led(GET_PIN(B, 5), PIN_LOW); /* 初始化LED2,引脚B口3脚,STM32可以使用GET_PIN()宏,低电平有效 */ led2 = easyblink_init_led(GET_PIN(B, 3), PIN_LOW); /* led1 闪3次,周期1000ms,亮500ms */ easyblink(led1, 3, 500, 1000); /* led1 上次的闪完后,再接着闪2次,周期2000ms,亮1500ms */ easyblink(led1, 2, 1500, 2000); /* led2 一直闪,周期1000ms,亮5ms */ easyblink(led2, -1, 5, 1000); rt_thread_mdelay(8000); /* 打断led2闪烁,开始闪5次,周期500ms,亮300ms,闪完后恢复led2前次的序列 */ easyblink(led2, 5, 300, 500); easyblink(led1, -1, 10, 5000); rt_thread_mdelay(8000); /* 中途打断,停止闪烁 */ easyblink_stop(led2); rt_thread_mdelay(5000); while(1) { eb_led_toggle(led2); rt_thread_mdelay(3000); } } ``` 在 Msh 控制台,可以使用 easyblink 命令闪烁LED: `eblink [period] [pulse]` 前2个参数必选,后2个可以省略,可以输入 2、3、或 4 个参数。 |参数|描述| |----|----| |init_num|从 1 开始的正整数,是按 LED 的 init 初始化顺序排序的| |nums|闪烁次数,大于0的整数| |period|周期,默认 1000 毫秒| |pulse|点亮 LED 的脉冲宽度,默认为 period 的一半| ## 最后 如果这个软件包对你有用的话,请点个赞!