|
@@ -63,14 +63,7 @@ uint8_t rx_buf_uart2_DMA[25] = {0};
|
|
|
uint8_t totalData[50][25] = {0};
|
|
uint8_t totalData[50][25] = {0};
|
|
|
uint8_t uart2_rx_byte[10] = {0};
|
|
uint8_t uart2_rx_byte[10] = {0};
|
|
|
uint8_t loraSendNextDataFlag = 0;
|
|
uint8_t loraSendNextDataFlag = 0;
|
|
|
-uint8_t baseRandomTimer = 3*60;
|
|
|
|
|
-uint8_t RandomTimer= 3*60;
|
|
|
|
|
|
|
|
|
|
-RingBuffer queue1;
|
|
|
|
|
-RingBuffer queue2;
|
|
|
|
|
-
|
|
|
|
|
-// uint8_t loraDataErrorCount = 0;
|
|
|
|
|
-uint8_t workMode = 0; // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
|
|
|
|
|
uint8_t receiveBlDataCount = 0;
|
|
uint8_t receiveBlDataCount = 0;
|
|
|
|
|
|
|
|
/* USER CODE END PV */
|
|
/* USER CODE END PV */
|
|
@@ -99,14 +92,6 @@ int __io_putchar(int ch)
|
|
|
return ch;
|
|
return ch;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void sentLoraData(uint8_t sendDataNum) {
|
|
|
|
|
- HAL_UART_Transmit(&huart2, totalData[sendDataNum], 8, HAL_MAX_DELAY);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-uint16_t randomFun() {
|
|
|
|
|
- return rand() % RandomTimer + baseRandomTimer; //随机时间1分钟到3分钟之间随机数
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
void Device_Info_Init_Fun() {
|
|
void Device_Info_Init_Fun() {
|
|
|
deviceInfo.isOnline = FALSE;
|
|
deviceInfo.isOnline = FALSE;
|
|
|
deviceInfo.isSOS = FALSE;
|
|
deviceInfo.isSOS = FALSE;
|
|
@@ -120,6 +105,7 @@ void Device_Info_Init_Fun() {
|
|
|
// deviceInfo.newLoraDataFlag = 0;
|
|
// deviceInfo.newLoraDataFlag = 0;
|
|
|
// deviceInfo.isReady = 0;
|
|
// deviceInfo.isReady = 0;
|
|
|
deviceInfo.loraSendSuccessFlag = 0;
|
|
deviceInfo.loraSendSuccessFlag = 0;
|
|
|
|
|
+ deviceInfo.BlDataFlag = BL_START;
|
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT); //初始化
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT); //初始化
|
|
|
//TODO: 大循环,获取设备地址信息,否则重新发送。发送上线信息,等待反馈,否则重新发送上线信息。一切准备就绪后,开启isready为1,进入工作模式。
|
|
//TODO: 大循环,获取设备地址信息,否则重新发送。发送上线信息,等待反馈,否则重新发送上线信息。一切准备就绪后,开启isready为1,进入工作模式。
|
|
|
// while (1){}
|
|
// while (1){}
|
|
@@ -263,50 +249,8 @@ int main(void)
|
|
|
|
|
|
|
|
powerOn();
|
|
powerOn();
|
|
|
E52_CtlPowerOn_Fun();
|
|
E52_CtlPowerOn_Fun();
|
|
|
- RingBuffer q;
|
|
|
|
|
- RingBuffer_Init(&q);
|
|
|
|
|
-
|
|
|
|
|
- uint8_t data_in[BL_DATA_SIZE];
|
|
|
|
|
- uint8_t data_out[BL_DATA_SIZE];
|
|
|
|
|
-
|
|
|
|
|
- printf("=== 环形队列循环入队/出队测试开始 ===\n");
|
|
|
|
|
-
|
|
|
|
|
- // 循环 20 次,模拟不断写入和读取
|
|
|
|
|
- for (int n = 0; n < 20; n++) {
|
|
|
|
|
- // 准备一组数据(内容累加)
|
|
|
|
|
- for (int i = 0; i < BL_DATA_SIZE; i++) {
|
|
|
|
|
- data_in[i] = (n << 4) + (i + 1); // 每轮累加 0x10
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- // 入队
|
|
|
|
|
- if (RingBuffer_Enqueue(&q, data_in) == 0) {
|
|
|
|
|
- printf("[%02d] 入队成功: ", n);
|
|
|
|
|
- for (int i = 0; i < BL_DATA_SIZE; i++) {
|
|
|
|
|
- printf("%d ", data_in[i]);
|
|
|
|
|
- }
|
|
|
|
|
- printf("\n");
|
|
|
|
|
- } else {
|
|
|
|
|
- printf("[%02d] 入队失败: 队列已满\n", n);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 出队
|
|
|
|
|
- if (RingBuffer_Dequeue(&q, data_out) == 0) {
|
|
|
|
|
- printf("[%02d] 出队成功: ", n);
|
|
|
|
|
- for (int i = 0; i < BL_DATA_SIZE; i++) {
|
|
|
|
|
- printf("%d ", data_out[i]);
|
|
|
|
|
- }
|
|
|
|
|
- printf("\n");
|
|
|
|
|
- } else {
|
|
|
|
|
- printf("[%02d] 出队失败: 队列为空\n", n);
|
|
|
|
|
- }
|
|
|
|
|
- printf("=== 下一轮测试 ===\n");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- printf("=== 测试结束 ===\n");
|
|
|
|
|
-
|
|
|
|
|
- while (TRUE);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ //初始化环形缓冲区
|
|
|
|
|
+ RingBuffer_Init(&deviceInfo.queueBLData);
|
|
|
|
|
|
|
|
// 启动 USART2 DMA 接收
|
|
// 启动 USART2 DMA 接收
|
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
@@ -375,6 +319,7 @@ int main(void)
|
|
|
/* USER CODE BEGIN 3 */
|
|
/* USER CODE BEGIN 3 */
|
|
|
|
|
|
|
|
// 检查是否接收到"心跳"命令,且设备在线
|
|
// 检查是否接收到"心跳"命令,且设备在线
|
|
|
|
|
+ printf("设备地址:0x%02X\n", deviceInfo.commandFromCloud);
|
|
|
if (!deviceInfo.isOnline) {
|
|
if (!deviceInfo.isOnline) {
|
|
|
RTC_TimeTypeDef now = {0};
|
|
RTC_TimeTypeDef now = {0};
|
|
|
HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
@@ -439,34 +384,26 @@ int main(void)
|
|
|
if (((GET_CMD(deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline ) || deviceInfo.isSOS)) {
|
|
if (((GET_CMD(deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline ) || deviceInfo.isSOS)) {
|
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
case REQUEST_BLUETOOTH_DATA_SCAN:
|
|
case REQUEST_BLUETOOTH_DATA_SCAN:
|
|
|
- Timer_Managment_Fun(&htim4, TIMER_OP_START);
|
|
|
|
|
- deviceInfo.BlDataFlag = BL_START;
|
|
|
|
|
- printf("开启蓝牙扫描\r\n");
|
|
|
|
|
- break; //扫描蓝牙阶段
|
|
|
|
|
-
|
|
|
|
|
- case REQUEST_BLUETOOTH_DATA_SEND:
|
|
|
|
|
- Timer_Managment_Fun(&htim4, TIMER_OP_STOP);
|
|
|
|
|
deviceInfo.BlDataFlag = BL_STOP;
|
|
deviceInfo.BlDataFlag = BL_STOP;
|
|
|
- i = 0;
|
|
|
|
|
- while (receiveBlDataCount > i) {
|
|
|
|
|
|
|
+ deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, REQUEST_BLUETOOTH_DATA_SEND);
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
- // printf("发送第%d个蓝牙数据给Lora\r\n", i);
|
|
|
|
|
- if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
|
|
- E52_Send_Bl_Data_Fun(i,0x00);
|
|
|
|
|
- }else {
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- memset(totalData[i], 0, sizeof(totalData[i]));
|
|
|
|
|
- i++;
|
|
|
|
|
|
|
+ case REQUEST_BLUETOOTH_DATA_SEND:
|
|
|
|
|
+ uint8_t sentData_Temp[25] = {0};
|
|
|
|
|
+ if (RingBuffer_Dequeue(&deviceInfo.queueBLData, sentData_Temp) == 0) {
|
|
|
|
|
+ //不为空的情况下
|
|
|
|
|
+ E52_Send_Bl_Data_Fun(sentData_Temp,0x00);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //为空的情况下
|
|
|
|
|
+ // printf("发送最后一位,开始发送蓝牙数据给Lora\r\n");
|
|
|
|
|
+ HAL_Delay(1000);
|
|
|
|
|
+ E52_Send_Bl_Data_Fun(sentData_Temp,0x01);
|
|
|
|
|
+ deviceInfo.BlDataFlag = BL_START;
|
|
|
|
|
+ deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
|
|
+ printf("发送完成\r\n");
|
|
|
}
|
|
}
|
|
|
- // printf("发送最后一位,开始发送蓝牙数据给Lora\r\n");
|
|
|
|
|
- E52_Send_Bl_Data_Fun(i,0x01);
|
|
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
|
|
- printf("发送完成\r\n");
|
|
|
|
|
break; //发送数据阶段
|
|
break; //发送数据阶段
|
|
|
case STEP_COMPLETE:
|
|
case STEP_COMPLETE:
|
|
|
- receiveBlDataCount = 0;
|
|
|
|
|
- deviceInfo.timeCount = 0;
|
|
|
|
|
deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
i = 0;
|
|
i = 0;
|
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|