在物联网开发和STM32嵌入式应用实践中,RGB灯是常用的外设,用于视觉交互和状态指示。作为物联网开发的经典硬件平台,机智云Gokit3开发板板载RGB灯,借助P9813专用驱动芯片,具有灵活的色彩控制能力。
本文主要以Gokit3开发板(MCU模式,主控STM32F103C8T6)为基础,以HAL库为基础,从P9813驱动芯片的工作原理出发,系统讲解RGB灯的硬件特性,全面分析RGB灯HAL库驱动的移植过程。同时,通过红绿蓝颜色轮询功能的实现,开发者可以直观地掌握RGB灯驱动的开发和实际应用,文末将附上本文涉及的源码、原理图等资料全套链接,帮助大家快速上手。
01RGB和P9813驱动芯片原理Gokit3原理图中,RGB灯的驱动核心是P9813芯片(图中的U3)。它是一款单总线控制的RGB全彩LED驱动芯片,专门用于简化RGB灯具的硬件控制。 ——只需要2根控制信号线即可实现RGB颜色的精确调节。
引脚介绍:9脚(VCC)接VCC5V+R5(3.6电阻)芯片电源输入(5V供电)。 R5为限流电阻,避免电源冲击。
Pin 4(GND)连接GND芯片接地引脚,保证电源电路
引脚1(DIN)连接“DIN”接口(对应STM32PB9)串行数据输入引脚:接收STM32发送的色彩控制数据(对应STM32中的PB9)
引脚2(CIN)连接“TheKey”接口(对应STM32PB8)时钟输入引脚:接收STM32发送的同步时钟信号(对应STM32中的PB8)
引脚5(R)、引脚6(G)、引脚7(B)连接RGB灯的红、绿、蓝通道,直接驱动RGB灯的三个颜色通道,并输出与亮度对应的电流。
引脚14(COUT)和引脚13(VOUT)为悬空(未连接)级联输出引脚:用于多个P9813的串联控制(Gokit3只使用1个,因此未使用)
12脚(MODE)连接C18(100nF电容)GND模式选择引脚:通过电容下拉至GND,配置为“单线模式”(Gokit3的单线总线通信)
11脚(CLKSEL)接C18(100nF电容)GND 时钟模式选择引脚:电容下拉配置为“外部时钟模式”(时钟由STM32的PB8提供)
3脚(JEN)接R13(10K电阻)GND使能脚:拉低至GND表示“使芯片工作”(默认处于工作状态)
10脚(VOUT)悬空(不接),级联电源输出(与VCC相同,级联时给下一个芯片供电)
1、单总线通信只需要2根线(时钟SCL+数据SDA)来控制,无需复杂的硬件(如SPI/I2C)PB8=SCL,PB9=SDA,无需外设初始化
2、24位颜色控制,红(R)、绿(G)、蓝(B)各分配8位数据,亮度范围0~255R_MAX/G_MAX/B_MAX=255
3. 内置反码校验,颜色数据的高2位需要传输反码。
4、固定帧格式通信必须以“起始帧+数据帧+重复帧”完成
5、5V电压兼容Gokit3的5V供电,不需要额外的电平转换源码,也没有电平转换逻辑。
02Gokit3 板载的RGB 灯1.Gokit3板载RGB灯由P9813驱动芯片全彩LED驱动芯片控制。核心特点:
通讯:仅(原理图上的SCL接PB8)+(原理图上的SDA接PB9)2线控制颜色
颜色编码:24位颜色数据(R/G/B各8位,亮度范围0~255)
通讯规则:
首先发送32个0作为起始帧,然后发送32位颜色数据(包括标志位+反码+RGB值),最后重复发送颜色数据以确保生效
03原理图及实物图
2.GPIO硬件配置(MCU模式)
PA0:RGB灯总开关,高电平使能(源码中ledRgbControl函数第一行设置PA0为高)
PB8/PB9:推挽输出模式,通过高低电平模拟P9813通信时序,无需硬件SPI/I2C
04Gokit3的RGB灯源码移植这次使用的驱动文件是两个RGB驱动文件hal_rgb_led.h和hal_rgb_led.c
头文件:hal_rgb_led.h(宏定义+函数声明)
源文件:hal_rgb_led.c(核心功能实现)
(1)PA0初始化函数:rgbKeyGpioInit
无效rgbKeyGpioInit(无效)
分析:实现PA0推挽输出配置以兼容2.2
(2)延时函数:ledDelay
分析:给出P9813通信时序延迟的影响
(3)时钟产生函数:clkProduce
分析:P9813核心时序功能通过拉低PB8/高电平来产生时钟信号,并延迟40个空周期,以保证时序满足P9813的要求。
(4)起始帧发送函数:send32Zero
分析:P9813通讯必须以32个0开头。该函数通过一个循环产生32个时钟,SDA始终为低电平,完成起始帧传输。
(5)反码处理函数:takeAntiCode
分析:P9813协议要求颜色数据的高2位需要以反码方式传输。该函数提取R/G/B 值的高2 位并将其反转。是官方驱动的核心协议适配逻辑。
(6)32位数据发送函数:datSend
分析:按P9813,逐位发送32 位颜色数据。每发送一位都会产生一个时钟信号,这是数据传输的核心功能。
(7)数据处理函数:dataDealWithAndSend
分析:将R/G/B值组装成P9813要求的32位数据格式(标志位+补码+颜色数据),然后调用datSend发送。
(8) RGB初始化函数:rgbLedInit
分析:初始化PB8/PB9为推挽输出,发送起始帧,初始化RGB灯为关闭状态。这是一个初始化函数,在使用驱动程序之前必须调用。
(9)颜色控制函数:ledRgbControl
分析:对外提供的核心调用函数,参数为R/G/B亮度值(0~255),调用:如果想要点亮任意颜色的灯光,可以调用该函数实现RGB灯光。一种颜色的光有255种亮度。三种颜色的灯光组合可以实现任意颜色的照明。
05实现RGB几个颜色灯轮转效果(驱动移植)整体过程:添加两个RGB驱动文件----项目配置完毕----调用RGB初始化函数----调用灯光控制函数实现灯光----使用延迟实现简单的颜色旋转。
1、驱动文件添加将hal_rgb_led.h放入项目Inc文件夹中,将hal_rgb_led.c放入Src文件夹中;
在Keil中的工程中添加hal_rgb_led.c并配置头文件路径(确保#include 'hal_rgb_led.h'不报错)。
2.初始化调用调用:rgbLedInit();实现初始化
3、调用RGB亮灯函数,实现任何颜色的亮灯(需要颜色组合)以下面颜色为例实现光循环。
编译烧录,观察现象。可以看到RGB灯驱动成功。
本文从RGB灯的应用场景和硬件基础出发,深入分析了板载P9813驱动芯片的工作原理,完整呈现了HAL库驱动的移植过程,并通过红绿蓝颜色轮询的例子进行实现,为开发者提供了从理论到实践的全流程指导,帮助大家快速掌握物联网开发中常用外设RGB灯的驱动开发和应用技巧。
标题:《机智云Gokit3开发篇》4 RGB灯的介绍与驱动移植(HAL库)
链接:https://yqqlyw.com/news/sypc/72835.html
版权:文章转载自网络,如有侵权,请联系删除!