本帖最后由 wws2002 于 2024-11-18 17:11 编辑
OTA功能是我们项目一个必须的配置,所以BLE的OTA功能研究了好久,开发板提供的资料有限,通过平台招了ST的官方提供了一些资料,中遇实验成功了,感谢平台的大力支持,也感谢活动组织者21ic小跑堂的热心帮助。话不多说,上干货!
详细的参考资料如下:
由于OTA功能有两个途径,一个是通过PC端的蓝牙建立连接,PC端有个网页版可以用,具体连接如下:基本上和手机端功能一样,可以适用的Demo是
BLE_HeartRate_ota
BLE_p2pServer_ota
而管理应用程序的ST使用了BLE_ApplicationInstallManager,这些demo程序都可以在开发包STM32Cube_FW_WB0_V1.0.0\Projects\NUCLEO-WB09KE\Applications\BLE目录下找到。
程序是通过BLE_ApplicationInstallManager管理。
管理程序下载的地址是:0x10040000
应用程序下载的地址是:0x10041000
OTA更新的目标程序地址:0x1007F800, 或者用偏移地址: 0x03F800,这些是Demo默认的地址,用户可以根据需要规划修改。
具体的的需要修改MagicKeywordValue要的值,具体在app_ble.c中
/* USER CODE BEGIN PV */
/**
* These are the two tags used to manage a power failure during OTA
* The MagicKeywordAdress shall be mapped @0x140 from start of the binary image
* The MagicKeywordvalue is checked in the ble_ota application
*/
PLACE_IN_SECTION("TAG_OTA_END") const uint32_t MagicKeywordValue = 0x94448A29 ;
PLACE_IN_SECTION("TAG_OTA_START") const uint32_t MagicKeywordAddress = (uint32_t)&MagicKeywordValue;
/* USER CODE END PV */
大概的流程可以参考ST的OTA说明:
STM32WBA Bluetooth® LE – Firmware update over the air - stm32mcu (stmicroelectronics.cn)
大致的流程图下所示:
下面一步步开始实验OTA功能。 <span]第一步烧写BLE_ApplicationInstallManager.bin文件到0x10040000地址,这里用的是ST的STM32CubeProgrammer工具,其他工具也类似 <span]
烧写完成。 <span]第二步烧写OTA应用程序BLE_p2pServer_ota.bin到0x10041000 <span]运行程序从串口可以看到运行状态: <span]第三步,这时候用手机端的APP连接板子,板子上的LED2绿色的快速闪烁。 <span]手机上的可以用ST BLE Sensor APP连接板子开始OTA升级,这个还需要前编一个需要升级的目标程序的bin文件,为了方便演示我用GPIO的LED1闪烁来用作OTA目标应用程序 while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD1_GPIO_PORT, LD1_PIN);
/* Insert delay 100 ms */
HAL_Delay(100);
//HAL_GPIO_TogglePin(LD2_GPIO_PORT, LD2_PIN);
/* Insert delay 100 ms */
//HAL_Delay(100);
}
/* USER CODE END 3 */
}
修改了GPIO_IOToggle,仅仅闪烁LED1,蓝色的灯,并编译成bin文件,然后存到手机上。 <span]用一下步骤进行OTA升级步骤: <span]同时串口助手可以监控OTA状态: <span]
程序会自动复位,运行目标程序 <span]
<span]在这里总结一下,ST给出了多个途径可以通过蓝牙BLE升级,有兴趣的可以多尝试一下: PC端的BLE蓝牙,ST提供了网页版的应用,具体可以参考如下地址: <span]Web bluetooth App WBA (applible.github.io) 有兴趣的可以尝试以下,由于我的手机问题,最新版本的xapk我安装不了,只安装了一个低版本的apk 附上APK
|