基于keil5和stm32允许使用固件库函数,帮我写一个RGB灯的模块
时间: 2024-03-22 15:37:55 浏览: 55
STM32驱动RGB LED彩灯模块闪烁GPIO-Write()函数
好的,以下是RGB灯的模块代码:
```C
#include "stm32f4xx.h"
#define RED_LED_PIN GPIO_Pin_0
#define GREEN_LED_PIN GPIO_Pin_1
#define BLUE_LED_PIN GPIO_Pin_2
void RGB_LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = RED_LED_PIN | GREEN_LED_PIN | BLUE_LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void RGB_LED_SetColor(uint8_t red, uint8_t green, uint8_t blue)
{
GPIO_WriteBit(GPIOA, RED_LED_PIN, (BitAction)(!red));
GPIO_WriteBit(GPIOA, GREEN_LED_PIN, (BitAction)(!green));
GPIO_WriteBit(GPIOA, BLUE_LED_PIN, (BitAction)(!blue));
}
void RGB_LED_Test(void)
{
int i;
for (i = 0; i < 3; i++)
{
RGB_LED_SetColor(1, 0, 0); // 红
Delay(1000);
RGB_LED_SetColor(0, 1, 0); // 绿
Delay(1000);
RGB_LED_SetColor(0, 0, 1); // 蓝
Delay(1000);
RGB_LED_SetColor(1, 1, 1); // 白
Delay(1000);
RGB_LED_SetColor(0, 0, 0); // 关闭
Delay(1000);
}
}
```
在这个模块中,`RGB_LED_Init` 用于初始化RGB灯,`RGB_LED_SetColor` 用于设置RGB灯的颜色,`RGB_LED_Test` 用于测试RGB灯的颜色变化。其中,`red`、`green`、`blue` 分别代表红、绿、蓝三种颜色,取值为0或1,表示关闭或打开。
调用示例:
```C
int main(void)
{
RGB_LED_Init();
while (1)
{
RGB_LED_SetColor(1, 0, 0); // 红
Delay(1000);
RGB_LED_SetColor(0, 1, 0); // 绿
Delay(1000);
RGB_LED_SetColor(0, 0, 1); // 蓝
Delay(1000);
RGB_LED_SetColor(1, 1, 1); // 白
Delay(1000);
RGB_LED_SetColor(0, 0, 0); // 关闭
Delay(1000);
}
}
```
其中 `Delay` 函数需要自己实现,用于延时。
阅读全文