你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32WB55MM-DK | Zephyr】2、RGB点灯

[复制链接]
lugl 发布时间:2026-11-1 22:29

1、驱动硬件链路与协议

首先找到原理图:

image.png

硬件链路是:

image.png

• 与门意味着 PH1 必须为高,PA7 上的波形才能到达 TLC59731。PH1 相当于一个"使能/片选"。
• 板上跳线:板子文档(boards/st/stm32wb5mm_dk/doc/stm32wb5mm_dk.rst)写明 JP5 要 ON、JP4 要 OFF,否则这一路不是接到 RGB 灯。
• TLC59731 用的是 TI 的 EasySet 单线协议,它不是 UART/SPI,而是"脉冲计数"编码:
◦ 每个 bit 周期 T_CYCLE 内至少一个脉冲;周期内再出现一个脉冲 = 1,没有 = 0。
◦ 一帧 32 bit:写命令 0x3A + R + G + B 各 8 bit。
◦ 发完后把线拉低一段时间(T_H0 / T_H1)完成锁存。

2、板级驱动的实现

Zephyr官方已经有rgb的设备树,但是默认是没有开启的,在

zephyr\boards\st\stm32wb5mm_dk\stm32wb5mm_dk.dts中有实现:

image.png

image.png

因此在工程中创建板级 overlay —— boards/stm32wb5mm_dk.overlay

/* 打开TLC59731节点:PA7做为数据脚,1颗灯,颜色BGR */
&rgb_led_strip{
	status = "okay";
};

/* 打开PH1 的gpio-hog:让与门的另一输恒为高 */
&rgb_cs {
	status = "okay";
};

3、prj.conf

CONFIG_LED_STRIP=y
CONFIG_LED_STRIP_SHELL=y   # 可选:shell 里直接敲命令调灯,配合你现有的 shell 工程很合适

4、man.c中添加rgb的驱动

#include <zephyr/drivers/led_strip.h>

static const struct device *const strip = DEVICE_DT_GET(DT_ALIAS(led_strip));

void set_rgb(uint8_t r, uint8_t g, uint8_t b)
{
	/* 注意 dts 里 color-mapping 是 BGR,所以像素数组顺序要对 */
	struct led_rgb pixel = LED_RGB(0, b, g, r); /* 或者直接填 .r/.g/.b 字段后按 mapping 排 */

	led_strip_update_rgb(strip, &pixel, 1);
}

5、实现效果:

5.1 验证驱动加载成功

uart:~$ led_strip get_length rgb_strip
rgb_strip has 1 pixel(s)

5.2 点灯

uart:~$ led_strip update_rgb rgb_strip ff0000

image.png

赞 收藏 评论0 发布时间:2026-11-1 22:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版