693|3

119

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【ST NUCLEO-WB09KE测评】-8-从零创建BLE GATT空白工程 [复制链接]

本帖最后由 慕容雪花 于 2024-9-16 23:18 编辑

官方指导文档: LAT1309 一步一步创建STM32WBA BLE_Custom工程

 

第一步:在CUBEIDE里面,根据芯片型号选择WB09KEV6

 
 
接着配置串口

 

接着配置调试接口

 

使能RADIO TIMER

 

接着使能RADIO

 

接着配置时钟:

 

最后使能STM32 BLE:

 

创建一个GATT SERVER应用:
 
 
 
 
 
 

 

点击保存,自动生成代码。在

调试运行发现,一直在RADIO TIMER初始化程序卡住,后来参考官方例程,对RADIO时钟源进行了如下修改。

 

 

整个创建BLE空白工程的过程十分方便,只需要根据智能提示依次配置BLE所需的模块,最后创建Service,增加Characteristic,即可生成几乎所有的代码。

最后在APP_BLE_Init()函数里面增加下面的函数来开启广播,一切搞定!

  /* USER CODE BEGIN APP_BLE_Init_2 */
  APP_BLE_Procedure_Gap_Peripheral(PROC_GAP_PERIPH_ADVERTISE_START_FAST);
  /* USER CODE END APP_BLE_Init_2 */

打开BLE DONGE,可以扫描到WB09-KE开发板发出的广播信号:

 

 

目前Characteristic没有使能读,写,通知等特性,下面增加一个读的特性。在Cubeide里面增加即可,然后自动生成代码。

 

进入到Event handler里面,增加应用代码:

static BLEEVT_EvtAckStatus_t TEMPSENSOR_EventHandler(aci_blecore_event *p_evt)
{
  BLEEVT_EvtAckStatus_t return_value = BLEEVT_NoAck;
  aci_gatt_srv_read_event_rp0    *p_read;
  /* USER CODE BEGIN Service1_EventHandler_1 */
  uint8_t mgc_val_len;
  static uint8_t mgc_val_buff[2]={0};;
  uint8_t attr_error_code = BLE_ATT_ERR_NONE;
  /* USER CODE END Service1_EventHandler_1 */

  switch(p_evt->ecode)
  {
    case ACI_GATT_SRV_ATTRIBUTE_MODIFIED_VSEVT_CODE:
    {
      /* USER CODE BEGIN EVT_BLUE_GATT_ATTRIBUTE_MODIFIED_BEGIN */

      /* USER CODE END EVT_BLUE_GATT_ATTRIBUTE_MODIFIED_BEGIN */

      /* USER CODE BEGIN EVT_BLUE_GATT_ATTRIBUTE_MODIFIED_END */

      /* USER CODE END EVT_BLUE_GATT_ATTRIBUTE_MODIFIED_END */
      break;/* ACI_GATT_SRV_ATTRIBUTE_MODIFIED_VSEVT_CODE */
    }
    case ACI_GATT_SRV_READ_VSEVT_CODE :
    {
      /* USER CODE BEGIN EVT_BLUE_GATT_SRV_READ_BEGIN */

      /* USER CODE END EVT_BLUE_GATT_SRV_READ_BEGIN */
      p_read = (aci_gatt_srv_read_event_rp0*)p_evt->data;
	  if(p_read->Attribute_Handle == (TEMPSENSOR_Context.SenvalCharHdle + CHARACTERISTIC_VALUE_ATTRIBUTE_OFFSET))
	  {
		return_value = BLEEVT_Ack;
		/*USER CODE BEGIN Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_1 */
#warning user shall call aci_gatt_srv_read_resp() function if allowed
		/*USER CODE END Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_1 */

		/*USER CODE BEGIN Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_2 */
		mgc_val_len = 2;
		mgc_val_buff[0] = mgc_val_buff[0] + 1;
		mgc_val_buff[1] = mgc_val_buff[1] + 2;
		aci_gatt_srv_resp(p_read->Connection_Handle,BLE_GATT_UNENHANCED_ATT_L2CAP_CID,p_read->Attribute_Handle,attr_error_code,mgc_val_len,mgc_val_buff);

		  /*USER CODE END Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_2 */
	  } /* if(p_read->Attribute_Handle == (TEMPSENSOR_Context.SenvalCharHdle + CHARACTERISTIC_VALUE_ATTRIBUTE_OFFSET))*/

      /* USER CODE BEGIN EVT_BLUE_GATT_SRV_READ_END */

      /* USER CODE END EVT_EVT_BLUE_GATT_SRV_READ_END */
      break;/* ACI_GATT_SRV_READ_VSEVT_CODE */
    }
    case ACI_GATT_SRV_WRITE_VSEVT_CODE:
    {
      /* USER CODE BEGIN EVT_BLUE_SRV_GATT_BEGIN */

      /* USER CODE END EVT_BLUE_SRV_GATT_BEGIN */

      /* USER CODE BEGIN EVT_BLUE_GATT_SRV_WRITE_END */

      /* USER CODE END EVT_BLUE_GATT_SRV_WRITE_END */
      break;/* ACI_GATT_SRV_WRITE_VSEVT_CODE */
    }
    case ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE:
    {
      aci_gatt_tx_pool_available_event_rp0 *p_tx_pool_available_event;
      p_tx_pool_available_event = (aci_gatt_tx_pool_available_event_rp0 *) p_evt->data;
      UNUSED(p_tx_pool_available_event);

      /* USER CODE BEGIN ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE */

      /* USER CODE END ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE */
      break;/* ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE*/
    }
    case ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE:
    {
      aci_att_exchange_mtu_resp_event_rp0 *p_exchange_mtu;
      p_exchange_mtu = (aci_att_exchange_mtu_resp_event_rp0 *)  p_evt->data;
      UNUSED(p_exchange_mtu);

      /* USER CODE BEGIN ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE */

      /* USER CODE END ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE */
      break;/* ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE */
    }
    /* USER CODE BEGIN BLECORE_EVT */

    /* USER CODE END BLECORE_EVT */
  default:
    /* USER CODE BEGIN EVT_DEFAULT */

    /* USER CODE END EVT_DEFAULT */
    break;
  }

  /* USER CODE BEGIN Service1_EventHandler_2 */

  /* USER CODE END Service1_EventHandler_2 */

  return(return_value);
}/* end TEMPSENSOR_EventHandler */

实验:

 

 

打开串口发现竟然没有数据,一顿操作:

1. 配置开关

 

2. printf重定向

/* USER CODE BEGIN 4 */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return ch;
}
/* USER CODE END 4 */

测试:

 

此帖出自RF/无线论坛

最新回复

cubeIDE有兼容新问题,通过MX进行程序更新后,代码框若隐若现没法对应上,就是上面那块的打开的C和H文件名那块   详情 回复 发表于 2024-9-18 11:13
点赞 关注
 

回复
举报

6060

帖子

6

TA的资源

版主

沙发
 

这个是不是得最新版本的STM32CubeMX? 

此帖出自RF/无线论坛

点评

是的,最新版本的CUBEMX才支持最新的WB09KE芯片。CUBEIDE更省事,全家桶  详情 回复 发表于 2024-9-18 08:43
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

119

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
秦天qintian0303 发表于 2024-9-17 19:19 这个是不是得最新版本的STM32CubeMX? 

是的,最新版本的CUBEMX才支持最新的WB09KE芯片。CUBEIDE更省事,全家桶

此帖出自RF/无线论坛

点评

cubeIDE有兼容新问题,通过MX进行程序更新后,代码框若隐若现没法对应上,就是上面那块的打开的C和H文件名那块  详情 回复 发表于 2024-9-18 11:13
 
 
 

回复

6060

帖子

6

TA的资源

版主

4
 
慕容雪花 发表于 2024-9-18 08:43 是的,最新版本的CUBEMX才支持最新的WB09KE芯片。CUBEIDE更省事,全家桶

cubeIDE有兼容新问题,通过MX进行程序更新后,代码框若隐若现没法对应上,就是上面那块的打开的C和H文件名那块

此帖出自RF/无线论坛
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
CES评最佳创新产品奖 35款产品亮相(2)

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑

Linux使用技巧集

10756

[MSP430 学习笔记] 晶体振荡器的负载电容

最近有童靴在问如何确定MSP430的晶体负载电容,一般来讲,大家都是在用一些经验值,对其原理也不是特别清楚。 有兴趣的同学可以看 ...

从零开始点亮LED灯

本帖最后由 微末凡尘 于 2014-7-27 01:03 编辑 ...

Fly-Buck 转换器 PCB 布局技巧

同步降压转换器已作为隔离式偏置电源在通信及工业市场得到认可。隔离式降压转换器或者通常所谓的 Fly-Buck 转换器,采用一个耦合 ...

【拓普微智能显示模块】四:串口交互以及曲线、绘图板、动画控件的应用

本帖最后由 数码小叶 于 2021-11-21 12:00 编辑 上一篇已经使用SGTools产生了一个简单的界面,所以对于SGTools来说,简单使用 ...

功率变换开关技术(修订版)电力电子的核心理论

电力电子技术在电力系统、新能源发电、电动汽车、电力牵引以及家用电器等众多领域快速发展,电力电子化已成为一种发展趋势,然而 ...

功率放大器在水下主动电场物体形状成像系统的应用

功率放大器在水下主动电场物体形状成像系统的应用

器件选型——TVS管选型一般要注意哪些参数?

642279642280 这是我找的一份TVS的规格书, 问题1: 想请教一下大家平时在进行TVS选型的时候比较关注哪些参数? ...

Mecha Lab 防生手臂中的手指运动用的是什么方案?

好久之前看到了这个手臂演示,属实是惊艳到了我,我们公司也想搞一个活动的手臂,有人知道它这个手指运动用的是什么方案吗? ...

快速回复 返回顶部 返回列表