|
@@ -49,12 +49,16 @@
|
|
|
UART_HandleTypeDef huart1;
|
|
UART_HandleTypeDef huart1;
|
|
|
UART_HandleTypeDef huart2;
|
|
UART_HandleTypeDef huart2;
|
|
|
UART_HandleTypeDef huart3;
|
|
UART_HandleTypeDef huart3;
|
|
|
|
|
+DMA_HandleTypeDef hdma_usart2_rx;
|
|
|
DMA_HandleTypeDef hdma_usart3_rx;
|
|
DMA_HandleTypeDef hdma_usart3_rx;
|
|
|
|
|
|
|
|
/* USER CODE BEGIN PV */
|
|
/* USER CODE BEGIN PV */
|
|
|
uint8_t rx_buf[100] = {0};
|
|
uint8_t rx_buf[100] = {0};
|
|
|
|
|
+uint8_t rx_buf_uart2[100] = {0};
|
|
|
uint8_t totalData[30][100] = {0};
|
|
uint8_t totalData[30][100] = {0};
|
|
|
uint8_t uart2_rx_byte[10] = {0};
|
|
uint8_t uart2_rx_byte[10] = {0};
|
|
|
|
|
+uint8_t loraSendNextDataFlag = 0;
|
|
|
|
|
+// uint8_t loraDataErrorCount = 0;
|
|
|
uint8_t workMode = 0; // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
|
|
uint8_t workMode = 0; // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
|
|
|
uint8_t receiveBlDataCount = 0;
|
|
uint8_t receiveBlDataCount = 0;
|
|
|
/* USER CODE END PV */
|
|
/* USER CODE END PV */
|
|
@@ -97,11 +101,10 @@ int __io_putchar(int ch)
|
|
|
|
|
|
|
|
void sentLoraData(uint8_t sendDataNum) {
|
|
void sentLoraData(uint8_t sendDataNum) {
|
|
|
HAL_UART_Transmit(&huart2, totalData[sendDataNum], 8, HAL_MAX_DELAY);
|
|
HAL_UART_Transmit(&huart2, totalData[sendDataNum], 8, HAL_MAX_DELAY);
|
|
|
- memset(totalData[sendDataNum], 0, sizeof(totalData[sendDataNum]));
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
uint8_t randomFun() {
|
|
uint8_t randomFun() {
|
|
|
- return rand() % 60 + 120; //随机时间1分钟到3分钟之间随机数
|
|
|
|
|
|
|
+ return rand() % 20 + 60; //随机时间1分钟到3分钟之间随机数
|
|
|
}
|
|
}
|
|
|
/* USER CODE END 0 */
|
|
/* USER CODE END 0 */
|
|
|
|
|
|
|
@@ -144,6 +147,10 @@ int main(void)
|
|
|
// HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
// HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
|
|
|
// 使能 USART2 空闲中断
|
|
// 使能 USART2 空闲中断
|
|
|
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
__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);
|
|
|
|
|
|
|
|
E104_BT5005A_ROLE_Fun();
|
|
E104_BT5005A_ROLE_Fun();
|
|
|
E104_BT5005A_SCANINTV_Fun();
|
|
E104_BT5005A_SCANINTV_Fun();
|
|
@@ -167,7 +174,7 @@ int main(void)
|
|
|
/* USER CODE END WHILE */
|
|
/* USER CODE END WHILE */
|
|
|
if (workMode == 0) { // 接收蓝牙数据
|
|
if (workMode == 0) { // 接收蓝牙数据
|
|
|
printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
|
|
printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
|
|
|
- if (count > 4) { //搜10秒数据
|
|
|
|
|
|
|
+ if (count > 10) { //搜10秒数据
|
|
|
E104_BT5005A_SLEEP_Fun();
|
|
E104_BT5005A_SLEEP_Fun();
|
|
|
HAL_Delay(5);//等待蓝牙模块进入睡眠模式
|
|
HAL_Delay(5);//等待蓝牙模块进入睡眠模式
|
|
|
// receiveBlDataCount = 0;
|
|
// receiveBlDataCount = 0;
|
|
@@ -177,13 +184,19 @@ int main(void)
|
|
|
count++;
|
|
count++;
|
|
|
}
|
|
}
|
|
|
}else if (workMode == 1) { // 发送数据给Lora
|
|
}else if (workMode == 1) { // 发送数据给Lora
|
|
|
-
|
|
|
|
|
printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
|
|
printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
|
|
|
if (count < receiveBlDataCount)
|
|
if (count < receiveBlDataCount)
|
|
|
{
|
|
{
|
|
|
// 启动 USART2 DMA 接收
|
|
// 启动 USART2 DMA 接收
|
|
|
sentLoraData(count);
|
|
sentLoraData(count);
|
|
|
- count++;
|
|
|
|
|
|
|
+ HAL_Delay(3);
|
|
|
|
|
+ if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
|
|
|
|
|
+ memset(totalData[count], 0, sizeof(totalData[count]));
|
|
|
|
|
+ count++;
|
|
|
|
|
+ loraSendNextDataFlag = 0;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ printf("send error!\r\n");
|
|
|
|
|
+ }
|
|
|
}else {
|
|
}else {
|
|
|
receiveBlDataCount = 0;
|
|
receiveBlDataCount = 0;
|
|
|
workMode = 2;
|
|
workMode = 2;
|
|
@@ -362,6 +375,9 @@ static void MX_DMA_Init(void)
|
|
|
/* DMA1_Channel3_IRQn interrupt configuration */
|
|
/* DMA1_Channel3_IRQn interrupt configuration */
|
|
|
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);
|
|
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);
|
|
|
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
|
|
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
|
|
|
|
|
+ /* DMA1_Channel6_IRQn interrupt configuration */
|
|
|
|
|
+ HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);
|
|
|
|
|
+ HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|