|
|
@@ -108,6 +108,20 @@ void sentLoraData(uint8_t sendDataNum) {
|
|
|
uint16_t randomFun() {
|
|
|
return rand() % RandomTimer + baseRandomTimer; //随机时间1分钟到3分钟之间随机数
|
|
|
}
|
|
|
+
|
|
|
+// 进入睡眠模式
|
|
|
+void EnterSleepMode(void)
|
|
|
+{
|
|
|
+ // 确保所有外设操作完成
|
|
|
+ HAL_Delay(10);
|
|
|
+
|
|
|
+ // 清除所有挂起的中断,防止立即唤醒
|
|
|
+ // __HAL_IRQ_CLEAR_PENDING(EXTI0_IRQn);
|
|
|
+
|
|
|
+ // 进入睡眠模式,任何中断都能唤醒
|
|
|
+ HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
+ // 或者使用WFE指令:HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFE);
|
|
|
+}
|
|
|
/* USER CODE END 0 */
|
|
|
|
|
|
/**
|
|
|
@@ -140,48 +154,50 @@ int main(void)
|
|
|
MX_GPIO_Init();
|
|
|
MX_DMA_Init();
|
|
|
MX_USART1_UART_Init();
|
|
|
- MX_USART2_UART_Init();
|
|
|
- MX_USART3_UART_Init();
|
|
|
- /* USER CODE BEGIN 2 */
|
|
|
- // 启动 USART2 DMA 接收
|
|
|
- HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
|
- // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
|
- // 使能 USART2 空闲中断
|
|
|
- __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
- HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf));
|
|
|
- // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
|
- // 使能 USART2 空闲中断
|
|
|
- __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
|
|
|
- HAL_Delay(5000);
|
|
|
- printf("开始初始化\r\n");
|
|
|
- printf("切换为观察者模式\r\n");
|
|
|
- E104_BT5005A_ROLE_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
- printf("初始化扫描间隔\r\n");
|
|
|
- E104_BT5005A_SCANINTV_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
- printf("初始化扫描窗口\r\n");
|
|
|
- E104_BT5005A_SCANWND_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
- printf("初始化复位\r\n");
|
|
|
- E104_BT5005A_RESET_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
-
|
|
|
- printf("开启Lora广播模块");
|
|
|
- const char *lora_msg = "AT+OPTION=3,0";
|
|
|
- HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
|
|
|
- HAL_Delay(2000);
|
|
|
- const char *lora_msg1 = "AT+TYPE=1";
|
|
|
- HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
|
|
|
- HAL_Delay(2000);
|
|
|
- const char *lora_msg2 = "AT+MAC=?";
|
|
|
- HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg2, strlen(lora_msg2), HAL_MAX_DELAY);
|
|
|
- HAL_Delay(2000);
|
|
|
+ // MX_USART2_UART_Init();
|
|
|
+ // MX_USART3_UART_Init();
|
|
|
+ // /* USER CODE BEGIN 2 */
|
|
|
+ // // 启动 USART2 DMA 接收
|
|
|
+ // HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
|
+ // // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
|
+ // // 使能 USART2 空闲中断
|
|
|
+ // __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
+ // HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf));
|
|
|
+ // // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
|
+ // // 使能 USART2 空闲中断
|
|
|
+ // __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
|
|
|
+ // HAL_Delay(5000);
|
|
|
+ // printf("开始初始化\r\n");
|
|
|
+ // printf("切换为观察者模式\r\n");
|
|
|
+ // E104_BT5005A_ROLE_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // printf("初始化扫描间隔\r\n");
|
|
|
+ // E104_BT5005A_SCANINTV_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // printf("初始化扫描窗口\r\n");
|
|
|
+ // E104_BT5005A_SCANWND_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // printf("初始化复位\r\n");
|
|
|
+ // E104_BT5005A_RESET_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ //
|
|
|
+ // printf("开启Lora广播模块");
|
|
|
+ // const char *lora_msg = "AT+OPTION=3,0";
|
|
|
+ // HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // const char *lora_msg1 = "AT+TYPE=1";
|
|
|
+ // HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // const char *lora_msg2 = "AT+MAC=?";
|
|
|
+ // HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg2, strlen(lora_msg2), HAL_MAX_DELAY);
|
|
|
+ // HAL_Delay(2000);
|
|
|
// MAC=0x0569a82a
|
|
|
|
|
|
- uint16_t count = 0;
|
|
|
- uint16_t randomTime = 0;
|
|
|
+ // uint16_t count = 0;
|
|
|
+ // uint16_t randomTime = 0;
|
|
|
srand(HAL_GetTick());
|
|
|
+
|
|
|
+
|
|
|
/* USER CODE END 2 */
|
|
|
|
|
|
/* Infinite loop */
|
|
|
@@ -190,61 +206,72 @@ int main(void)
|
|
|
while (1)
|
|
|
{
|
|
|
/* USER CODE END WHILE */
|
|
|
- if (workMode == 0) { // 接收蓝牙数据
|
|
|
- printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
|
|
|
- if (count > 30 || receiveBlDataCount >= 115) { //搜10秒数据
|
|
|
- E104_BT5005A_SLEEP_Fun();
|
|
|
- HAL_Delay(5);//等待蓝牙模块进入睡眠模式
|
|
|
- // receiveBlDataCount = 0;
|
|
|
- workMode = 1;
|
|
|
- count = 0;
|
|
|
- }else {
|
|
|
- count++;
|
|
|
- }
|
|
|
- }else if (workMode == 1) { // 发送数据给Lora
|
|
|
- if (count < receiveBlDataCount)
|
|
|
- {
|
|
|
- printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
|
|
|
- // 启动 USART2 DMA 接收
|
|
|
- sentLoraData(count);
|
|
|
- if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
|
|
|
- memset(totalData[count], 0, sizeof(totalData[count]));
|
|
|
- count++;
|
|
|
- memset(rx_buf_uart2, 0, 100);
|
|
|
- loraSendNextDataFlag = 0;
|
|
|
- }else {
|
|
|
- printf("send error!\r\n");
|
|
|
- }
|
|
|
- }else {
|
|
|
- printf("发送结束,总数据大小为%d\r\n",receiveBlDataCount);
|
|
|
- const char *end_msg = "SENDEND\r\n";
|
|
|
- HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
|
|
|
- receiveBlDataCount = 0;
|
|
|
- workMode = 2;
|
|
|
- count = 0;
|
|
|
- }
|
|
|
- }else if (workMode == 2) {
|
|
|
- printf("等待进度:%d\r\n", count);
|
|
|
- printf("等待时间%d秒\r\n",randomTime);
|
|
|
- if (randomTime == 0) {
|
|
|
- randomTime = randomFun();
|
|
|
- }
|
|
|
- if (count > randomTime) {
|
|
|
- E104_BT5005A_WAKE_UP_Fun();
|
|
|
- randomTime = 0;
|
|
|
- workMode = 0;
|
|
|
- count = 0;
|
|
|
- }else {
|
|
|
- count++;
|
|
|
+ /* USER CODE BEGIN 3 */
|
|
|
+
|
|
|
+ // if (workMode == 0) { // 接收蓝牙数据
|
|
|
+ // printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
|
|
|
+ // if (count > 30 || receiveBlDataCount >= 115) { //搜10秒数据
|
|
|
+ // E104_BT5005A_SLEEP_Fun();
|
|
|
+ // HAL_Delay(5);//等待蓝牙模块进入睡眠模式
|
|
|
+ // // receiveBlDataCount = 0;
|
|
|
+ // workMode = 1;
|
|
|
+ // count = 0;
|
|
|
+ // }else {
|
|
|
+ // count++;
|
|
|
+ // }
|
|
|
+ // }else if (workMode == 1) { // 发送数据给Lora
|
|
|
+ // if (count < receiveBlDataCount)
|
|
|
+ // {
|
|
|
+ // printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
|
|
|
+ // // 启动 USART2 DMA 接收
|
|
|
+ // sentLoraData(count);
|
|
|
+ // if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
|
|
|
+ // memset(totalData[count], 0, sizeof(totalData[count]));
|
|
|
+ // count++;
|
|
|
+ // memset(rx_buf_uart2, 0, 100);
|
|
|
+ // loraSendNextDataFlag = 0;
|
|
|
+ // }else {
|
|
|
+ // printf("send error!\r\n");
|
|
|
+ // }
|
|
|
+ // }else {
|
|
|
+ // printf("发送结束,总数据大小为%d\r\n",receiveBlDataCount);
|
|
|
+ // const char *end_msg = "SENDEND\r\n";
|
|
|
+ // HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
|
|
|
+ // receiveBlDataCount = 0;
|
|
|
+ // workMode = 2;
|
|
|
+ // count = 0;
|
|
|
+ // }
|
|
|
+ // }else if (workMode == 2) {
|
|
|
+ // printf("等待进度:%d\r\n", count);
|
|
|
+ // printf("等待时间%d秒\r\n",randomTime);
|
|
|
+ // if (randomTime == 0) {
|
|
|
+ // randomTime = randomFun();
|
|
|
+ // }
|
|
|
+ // if (count > randomTime) {
|
|
|
+ // E104_BT5005A_WAKE_UP_Fun();
|
|
|
+ // randomTime = 0;
|
|
|
+ // workMode = 0;
|
|
|
+ // count = 0;
|
|
|
+ // }else {
|
|
|
+ // count++;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (workMode == 1) {
|
|
|
+ // HAL_Delay(300);
|
|
|
+ // }else {
|
|
|
+ // HAL_Delay(1000);
|
|
|
+ // }
|
|
|
+ int i = 0;
|
|
|
+ while (i < 20) {
|
|
|
+ printf("Hello world:%d\r\n",i);
|
|
|
+ i++;
|
|
|
+ if (i == 15) {
|
|
|
+ HAL_SuspendTick(); // 停止 SysTick 中断
|
|
|
+ __WFI(); // 真正进入 Sleep
|
|
|
+ HAL_ResumeTick(); // 唤醒后恢复 SysTick
|
|
|
}
|
|
|
- }
|
|
|
- if (workMode == 1) {
|
|
|
- HAL_Delay(300);
|
|
|
- }else {
|
|
|
HAL_Delay(1000);
|
|
|
}
|
|
|
-
|
|
|
- /* USER CODE BEGIN 3 */
|
|
|
}
|
|
|
/* USER CODE END 3 */
|
|
|
}
|