STM32WLE5发送LoRa数据后写入Flash致后续收发故障求助
问题背景与现象
- 硬件:STM32WLE5微控制器
- 软件框架:STM CubeMX生成代码,基于LoRaWAN EndNode框架,使用FreeRTOS(CMSIS V2.0)
- 正常功能:传感器读取、常规LoRa帧收发工作正常
- 异常现象:发送LoRa帧并写入Flash后,后续的LoRa帧收发完全停止
问题核心细节
执行LmHandlerSend(&AppData_send, LmHandlerParams->IsTxConfirmed, true);后,返回状态为LORAMAC_HANDLER_COMPLIANCE_RUNNING,问题锁定在以下LoRaMAC代码片段的条件判断逻辑:
#if (defined(LORAMAC_VERSION) && (LORAMAC_VERSION == 0x01000300)) if ((LmHandlerPackages[PACKAGE_ID_COMPLIANCE]->IsRunning() == true) && (appData->Port != LmHandlerPackages[PACKAGE_ID_COMPLIANCE]->Port) && (appData->Port != 0)) { return LORAMAC_HANDLER_COMPLIANCE_RUNNING; } #endif
Flash写入任务实现
创建了一个最高优先级的FreeRTOS独立任务负责Flash写入:
- Flash存储地址:
0x0803E000,页大小2KB - 任务代码如下:
/* USER CODE BEGIN Header_flashWriteTask */ /** * @brief Function implementing the flashWrite thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_flashWriteTask */ void flashWriteTask(void *argument) { __flash_read_write_t data_flash_write = {0}; /* Infinite loop */ for (;;) { osMessageQueueGet(flashWriteQueueHandle, &data_flash_write, 0, osWaitForever); // Check that the data size is a multiple of 8 (uint64_t) if (data_flash_write.numberofwords % 8 != 0) { data_flash_write.numberofwords += 8 - (data_flash_write.numberofwords % 8); } osKernelLock(); FLASH_IF_StatusTypedef erase_flash_sts = FLASH_IF_Erase((void *)data_flash_write.StartPageAddress, data_flash_write.numberofwords); if (FLASH_IF_OK == erase_flash_sts) { FLASH_IF_Write((void *)data_flash_write.StartPageAddress, data_flash_write.Data, data_flash_write.numberofwords); } osKernelUnlock(); } }
疑问与求助
请问Flash写入与LoRa帧处理之间的冲突原因是什么?需要解决该问题的思路与建议。
内容的提问来源于stack exchange,提问作者Ignacio Islas
相关产品推荐
相关产品推荐

