WS8623-DB-V1.0的主控是STM32WB05KZVx。
所以可以使用STM32几件套(STM32CubeMX,STM32CudeIDE,STM32CubeProgrammer)做二次开发。
本文通过二次开发实现板载2个KEY button和BLE指令二种方式点灯。
1、引脚使用情况

2、RCC

3、时钟树

4、LED和key

5、中断

6、RADIO

7、RADIO_TIMER

8、USART1

9、PKA

10、STM32_BLE

广播

1个服务

配置平台USART支持

11、USART1 printf重定向
/* USER CODE BEGIN PFP */
#if defined(__ICCARM__)
__ATTRIBUTES size_t __write(int, const unsigned char *, size_t);
#endif /* __ICCARM__ */
#if defined(__ICCARM__)
/* New definition from EWARM V9, compatible with EWARM8 */
int iar_fputc(int ch);
#define PUTCHAR_PROTOTYPE int iar_fputc(int ch)
#elif defined ( __CC_ARM ) || defined(__ARMCC_VERSION)
/* ARM Compiler 5/6*/
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__)
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif /* __ICCARM__ */
/* USER CODE END PFP */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
#if defined(__ICCARM__)
size_t __write(int file, unsigned char const *ptr, size_t len)
{
size_t idx;
unsigned char const *pdata = ptr;
for (idx = 0; idx < len; idx++)
{
iar_fputc((int)*pdata);
pdata++;
}
return len;
}
#endif /* __ICCARM__ */12、外部中断点灯
void HAL_GPIO_EXTI_Callback(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
if(GPIO_Pin==KEY2_Pin){
HAL_GPIO_TogglePin(ACK_GPIO_Port,ACK_Pin);
}
else if(GPIO_Pin==KEY1_Pin)
{
HAL_GPIO_TogglePin(AUX_GPIO_Port,AUX_Pin);
}
}13、BLE点灯
server1_app.c中在SERVICE1_CHAR1_WRITE_EVT事件增加处理
case SERVICE1_CHAR1_WRITE_EVT:
/* USER CODE BEGIN Service1Char1_WRITE_EVT */
if(p_Notification->DataTransfered.p_Payload[0]==0x20){
HAL_GPIO_WritePin(ACK_GPIO_Port,ACK_Pin,GPIO_PIN_SET);
}else if(p_Notification->DataTransfered.p_Payload[0]==0x10){
HAL_GPIO_WritePin(ACK_GPIO_Port,ACK_Pin,GPIO_PIN_RESET);
}else if(p_Notification->DataTransfered.p_Payload[0]==0x30){
HAL_GPIO_WritePin(AUX_GPIO_Port,AUX_Pin,GPIO_PIN_SET);
}else if(p_Notification->DataTransfered.p_Payload[0]==0x40){
HAL_GPIO_WritePin(AUX_GPIO_Port,AUX_Pin,GPIO_PIN_RESET);
}
/* USER CODE END Service1Char1_WRITE_EVT */
break;通过判断BLE char1特征值写入的数值,控制灯亮灭。
14、使设备进入可发现模式
app_ble.c
524行附近、566行附近,HCI_DISCONNECTION_COMPLETE_EVT_CODE事件后增加:
/* USER CODE BEGIN APP_BLE_Init_3 */ APP_BLE_Procedure_Gap_Peripheral(PROC_GAP_PERIPH_ADVERTISE_START_FAST); /* USER CODE END APP_BLE_Init_3 */
case HCI_DISCONNECTION_COMPLETE_EVT_CODE:
{
hci_disconnection_complete_event_rp0 *p_disconnection_complete_event;
p_disconnection_complete_event = (hci_disconnection_complete_event_rp0 *) p_event_pckt->data;
/* USER CODE BEGIN EVT_DISCONN_COMPLETE_3 */
APP_BLE_Procedure_Gap_Peripheral(PROC_GAP_PERIPH_ADVERTISE_START_FAST);
/* USER CODE END EVT_DISCONN_COMPLETE_3 */用手机app:e调试定制界面给ble发送指令控制2个LED

15、关于手机ble调试工具
我手机上安装好几个ble调试工具:
1)BLE调试助手(沁恒出品):没有自定义界面,但很稳定基本上所有的蓝牙设备都能发现
2)“蓝牙串口”(有个SPP图标):自定义界面功能很好,但是在我现在的手机上闪退,其他手机上不能发现WS8623
3)e调试:广告非常多,有个自定义界面功能。
每次调试时,哪个能用用哪个,为了要自定义界面这次用了e调试
下面简单介绍下怎么使用:
1)点击下面“实验室”,可以看到有个自定义功能

2)点击"自定义界面"进入下面界面
按加号可以增加界面,其中“蓝牙点灯”是我定义好的界面
点击“编辑组件”可以进行编辑

3)在编辑界面,可以放入一些组件

4)编辑其中的按钮
可以看到这个按钮如果是开发送0x10,如果是关发送0x20,对应前面BLE开灯关灯判断。

完成后保存。
5)回到“低功耗”,会搜索到BLE设备,如果搜到WS8623的广播,连接进去

6)点击“日志”->自定义界面

回到“服务”

勾选“WRITE”特征值的那个“向上”的按钮,然后按“蓝牙点灯”的“播放”按钮,就可以控制了。
我要赚赏金
