概述
本篇文章將詳細(xì)介紹如何在上節(jié)配置的基礎(chǔ)上,實(shí)現(xiàn)通過點(diǎn)擊STM32WB開發(fā)板上的按鍵發(fā)送數(shù)據(jù)到手機(jī)上。 最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
硬件準(zhǔn)備
首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是NUCLEO-WB55RG 的開發(fā)板:
視頻教學(xué)
聽不到聲音的請點(diǎn)擊跳轉(zhuǎn)進(jìn)行觀看。
https://www.bilibili.com/video/BV1DM41137Jk/
源碼下載
https://download.csdn.net/download/qq_24312945/87772294
藍(lán)牙配置
選擇“mySVC”選項(xiàng)卡。添加第二個特征,特征數(shù)Number of characteristics設(shè)置為2
定義第二個特征名稱,這里定義為'myCharRead',同時將UUID增加為00 01
啟用CHAR_PROP_NOTIFY屬性。 CHAR_PROP_NOTIFY 是一個參數(shù)描述,它允許設(shè)備在特性值發(fā)生變化時發(fā)送通知,而無需接收方響應(yīng)。這種通知機(jī)制使得數(shù)據(jù)傳輸更加高效,因?yàn)榘l(fā)送方不需要等待接收方的確認(rèn)。
代碼配置
我們希望在按鈕按下時調(diào)用aci_gatt_update_char_value(...) API。這將會發(fā)送一個指令(CMD)給CM0+處理器,同時傳遞一個值作為參數(shù),為了解決在中斷上下文中調(diào)用API的問題,我們需要創(chuàng)建一個后臺任務(wù)來調(diào)用aci_gatt_update_char_value(...)。這個任務(wù)將在主程序循環(huán)中運(yùn)行,并在檢測到按鈕按下事件時調(diào)用API。 當(dāng)按鈕被按下時,我們希望更新藍(lán)牙GATT特征值。為了實(shí)現(xiàn)這一目標(biāo),我們需要創(chuàng)建一個在后臺運(yùn)行的任務(wù),而不是直接在中斷處理程序中調(diào)用API。這是因?yàn)锳CI接口不是可重入的,直接在中斷處理程序中調(diào)用API可能導(dǎo)致不安全的情況。
app_conf.h
在app_conf.h中定義自定義任務(wù)。
/* USER CODE BEGIN Defines */
void myTask(void);
/* USER CODE END Defines */
同時添加任務(wù)定義。
/* USER CODE BEGIN CFG_Task_Id_With_NO_HCI_Cmd_t */
CFG_MY_TASK,
/* USER CODE END CFG_Task_Id_With_NO_HCI_Cmd_t *
app_ble.c
在app_ble.c中的藍(lán)牙初始化中注冊我們自己的任務(wù)和調(diào)度任務(wù)。 UTIL_SEQ_RegTask(1 << CFG_MY_TASK, UTIL_SEQ_RFU, myTask) 和 UTIL_SEQ_SetTask(1 << CFG_MY_TASK, CFG_SCH_PRIO_0) 是用于任務(wù)調(diào)度和任務(wù)優(yōu)先級設(shè)置的。 UTIL_SEQ_RegTask(1 << CFG_MY_TASK, UTIL_SEQ_RFU, myTask) 將一個名為 myTask 的任務(wù)注冊到任務(wù)調(diào)度器中。 UTIL_SEQ_SetTask(1 << CFG_MY_TASK, CFG_SCH_PRIO_0)為設(shè)置優(yōu)先級。
/* USER CODE BEGIN APP_BLE_Init_1 */
UTIL_SEQ_RegTask( 1 CFG_MY_TASK, UTIL_SEQ_RFU, myTask);
UTIL_SEQ_SetTask(1 CFG_MY_TASK, CFG_SCH_PRIO_0);
/* USER CODE END APP_BLE_Init_1 *
按鍵配置
查看原理圖可以得知PC4為SW1按鍵。
同時配置為上拉,默認(rèn)狀態(tài)下電平為高電平狀態(tài)。
custom_app.c
編寫我們的myTask任務(wù)函數(shù),通過檢測PC4按鍵進(jìn)行數(shù)據(jù)發(fā)送。 檢測一個按鍵(SW1)是否被按下,如果按下則執(zhí)行相應(yīng)的操作,包括更新UpdateCharData數(shù)組的第一個元素,調(diào)用自定義函數(shù)Custom_STM_App_Update_Char進(jìn)行處理,就是向手機(jī)APP發(fā)送一個0xbb的數(shù)據(jù)。
/* USER CODE BEGIN PFP */
void myTask(void)
{
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4)==0)//SW1按鍵按下
{
UpdateCharData[0] = 0xbb;
Custom_STM_App_Update_Char(CUSTOM_STM_MYCHARREAD, (uint8_t *)UpdateCharData);
}
UTIL_SEQ_SetTask(1 < < CFG_MY_TASK, CFG_SCH_PRIO_0);
}
/* USER CODE END PFP */
結(jié)果演示
審核編輯:湯梓紅
-
藍(lán)牙
+關(guān)注
關(guān)注
115文章
5976瀏覽量
172718 -
瑞薩
+關(guān)注
關(guān)注
36文章
22356瀏覽量
87580 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5389瀏覽量
100898 -
BLE
+關(guān)注
關(guān)注
12文章
684瀏覽量
60244 -
STM32WB55
+關(guān)注
關(guān)注
0文章
26瀏覽量
1536
發(fā)布評論請先 登錄
相關(guān)推薦
STM32WB55_NUCLEO開發(fā)(9)----接收手機(jī)數(shù)據(jù)點(diǎn)亮LED

STM32WB55_NUCLEO開發(fā)(10)----接收手機(jī)特定數(shù)據(jù)點(diǎn)亮LED

STM32WB55_NUCLEO開發(fā)(12)----FUS更新

STM32WB55如何檢測/調(diào)試P-NUCLEO-WB55.Nucleo的BLE_p2pServer中的read_event示例代碼
P-NUCLEO-WB55 STMicroelectronicsPNUCLEOWB55STM32WBNucleo68數(shù)據(jù)包
stm32wb55 基于rtt的ble sample制作過程

STM32WB55_NUCLEO開發(fā)(2)----使用STM32CubeMX生成的簡單BLE應(yīng)用程序連接手機(jī)APP

STM32WB55_NUCLEO開發(fā)(3)----手機(jī)與STM32WB直接配對

STM32WB55_NUCLEO開發(fā)(4)----手機(jī)與STM32WB通過密鑰配對

STM32WB55_NUCLEO開發(fā)(5)----手機(jī)與STM32WB通過鍵入密鑰配對

STM32WB55_NUCLEO開發(fā)(6)----手機(jī)與STM32WB通過配對后進(jìn)行數(shù)值比較

STM32WB55_NUCLEO開發(fā)(7)----手機(jī)與STM32WB進(jìn)行綁定

STM32WB55_NUCLEO開發(fā)(8)----授權(quán)

DB4388_NUCLEO_WB55RG NUCLEO_WB15CC 數(shù)據(jù)手冊摘要

評論