这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 蓝牙WS8623-DB-V1.0通电及实现按KEY2控制ACKLED亮灭

共4条 1/1 1 跳转至

蓝牙WS8623-DB-V1.0通电及实现按KEY2控制ACKLED亮灭

菜鸟
2025-06-23 16:15:27     打赏

       WS8623-DB-V1.0的主控是STM32WB05KZVx,可以使用STM32CubeMX做引脚分配,生成工程等。STM32WB05KZV6x 是一款超低功耗可编程 Bluetooth® Low Energy 芯片系统(SoC),内置 ST 先进的 2.4GHz 无线IP,具有较低功耗和优秀的无线性能。它支持点对点连接和蓝牙网状网络,允许以可靠的方式构建覆盖范围的设备网络。同时还适用于 2.4GHz 专有无线通信,支持超低延迟应用。STM32 Sequencer 是utilities下的通用库,起到类似简化的rtos的功能用于在 STM32 微控制器上创建和执行任务序列。在STM32的BLE程序中,会自动集成Sequencer完成相关的调度工作。

      下面用STM32 Sequencer实现按KEY2键控制ACK LED亮灭

1、开启一个新的工程,按照开发板的资源做个最小配置

 5dc7093c1904aad4bae6c92651937315_1748353161682444.pngebd15e382de189abb89b4f8418fd2392_1748353164835066.pngad0368e503e7fa429a9c12d6888f4766_1748762600160290.png6737aae194fd67d5737e82f2608ff16f_1748353164720602.png

2实现按KEY2控制ACK LED点亮的部分主要工程代码main.c:

 #include "main.h"

#include "stm32_seq.h"

#include <stdio.h>

#define TASK_ID_BUTTON_CHECK   0

#define TASK_ID_LED_TOGGLE     1

#define EVT_BUTTON_PRESSED     (1U << 0)

#define EVT_BUTTON_DETECT (1U << 0)

#define BUTTON_PIN     GPIO_PIN_3

#define BUTTON_PORT    GPIOB

#define LED_PIN        GPIO_PIN_1

#define LED_PORT       GPIOB

#define DEBOUNCE_TIME  30

UART_HandleTypeDef huart1;

void SystemClock_Config(void);

void PeriphCommonClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);

static void ButtonCheckTask(void)

{

  static uint32_t last_tick = 0;

    if(HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN) == GPIO_PIN_RESET)

  {

    uint32_t current_tick = HAL_GetTick();

    if((current_tick - last_tick) > DEBOUNCE_TIME)

    {

      UTIL_SEQ_SetTask(1U << TASK_ID_LED_TOGGLE, EVT_BUTTON_PRESSED);

    }

    last_tick = current_tick;

  }

  UTIL_SEQ_Idle(); 

  UTIL_SEQ_SetTask(1U << TASK_ID_BUTTON_CHECK, EVT_BUTTON_DETECT);

}

static void LedToggleTask(void)

{

printf("LedToggleTask\r\n");

  HAL_GPIO_TogglePin(LED_PORT, LED_PIN);

    while(HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN) == GPIO_PIN_RESET)

  {

    UTIL_SEQ_Idle();

  }

}

int main(void)

{

  MX_GPIO_Init();

  MX_USART1_UART_Init();

 printf("MX_USART1_UART_Init\r\n");

  UTIL_SEQ_Init();

    UTIL_SEQ_RegTask(1U << TASK_ID_BUTTON_CHECK, UTIL_SEQ_DEFAULT, ButtonCheckTask);

  UTIL_SEQ_RegTask(1U << TASK_ID_LED_TOGGLE, UTIL_SEQ_DEFAULT, LedToggleTask);

    UTIL_SEQ_SetTask(1U << TASK_ID_BUTTON_CHECK, EVT_BUTTON_DETECT);

    while (1)

  {

    UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);

      UTIL_SEQ_Idle();

     }

 }

Void SystemClock_Config(void)

{

  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

  RCC_ClkInitStruct.SYSCLKDivider = RCC_RC64MPLL_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_WAIT_STATES_1) != HAL_OK)

  {

    Error_Handler();

  }

}

static void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

   __HAL_RCC_GPIOB_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2|GPIO_PIN_1, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_PULLUP;

  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_1;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  for (idx = 0; idx < len; idx++)

  {

    iar_fputc((int)*pdata);

    pdata++;

  }

  return len;

}

#endif

  __disable_irq();

  while (1)

  {

  }

 }

#ifdef  USE_FULL_ASSERT


3、通过JLink烧录到STM32,实现按KEY2控制ACK LED亮灭的动图如下:


WS8623亮灯.gif





关键词: 蓝牙     WS8623-DB-V1.0     通电     亮灭    

专家
2025-06-23 21:49:09     打赏
2楼

感谢分享


专家
2025-06-23 21:50:14     打赏
3楼

感谢分享


专家
2025-06-23 21:51:49     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]