#include "main.h" #include "stm32g0xx_hal.h" #define LED_COUNT 30 #define LED_COLOR_COMPONENTS 3 #define LED_TOTAL_BITS (LED_COUNT * LED_COLOR_COMPONENTS * 8) void send_led_color(uint8_t* color_data, uint16_t data_size) { for (int i = 0; i < data_size; i++) { for (int bit = 7; bit >= 0; bit--) { if (color_data[i] & (1 << bit)) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); __NOP(); __NOP(); __NOP(); __NOP(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); } } } } int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//速度 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);//根据设定参数初始化GPIOA.0 //GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA.0 输出低电平 uint8_t color_data[LED_TOTAL_BITS / 8] = {0}; // Set the green component of the first LED to 255 color_data[0] = 0x00; send_led_color(color_data, LED_TOTAL_BITS / 8); while (1) {} }
时间: 2024-01-10 20:04:55 浏览: 128
这是一段使用 STM32G0xx HAL 库控制 LED 灯的代码。
首先,定义了 LED 的数量、每个 LED 的颜色分量数和总位数。接着定义了一个函数 `send_led_color`,用于发送 LED 的颜色数据。在这个函数中,通过循环遍历颜色数据并将其转换为二进制形式来逐位发送颜色数据,同时使用 `HAL_GPIO_WritePin` 函数控制 GPIO 引脚输出高电平或低电平。
在 `main` 函数中,首先进行了一些初始化的操作,包括初始化 GPIO 引脚、设置 LED 的颜色数据,并调用 `send_led_color` 函数发送数据。然后进入一个无限循环,等待程序结束或外部事件的触发。
阅读全文