From ae079c1fc5d990ba55714d4b3a51b19f96edaec4 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期四, 24 四月 2025 16:01:43 +0800
Subject: [PATCH] 改为中断来低电平触发发送当前扫描数据,3s内扫描不到的会退出,串口来55 AA 75 70 64 61 74 65,进入升级模式

---
 01_SDK/nimble/samples/bluetooth/ble_central_periph_ota/src/app.c |   84 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/01_SDK/nimble/samples/bluetooth/ble_central_periph_ota/src/app.c b/01_SDK/nimble/samples/bluetooth/ble_central_periph_ota/src/app.c
index dad4368..0a1e627 100644
--- a/01_SDK/nimble/samples/bluetooth/ble_central_periph_ota/src/app.c
+++ b/01_SDK/nimble/samples/bluetooth/ble_central_periph_ota/src/app.c
@@ -10,6 +10,82 @@
  */
 #include "app.h"
 #include "app_log.h"
+#define UART_RECV_BUF_SIZE      128
+#define UART_SEND_BUF_SIZE      128
+#define UART_TEST_SIZE          8
+
+uint8_t revDataBuf[UART_RECV_BUF_SIZE];
+uint8_t sendDataBuf[UART_SEND_BUF_SIZE];
+uint8_t rx_changdu;
+extern uint8_t shengji_flag;
+extern uint8_t only_one;
+void app_uart_rx_dma_callback(UART_Cb_Flag_Opt flag, uint8_t *pOutPtr, uint16_t size)
+{
+//    printf("UART Rx with DMA Done, recv data size = %d.\n", size);
+
+    // Copy data from UART Rx buffer to Tx buffer
+//    memcpy(sendDataBuf, pOutPtr, size);
+    memcpy(revDataBuf, pOutPtr, size);
+    if(revDataBuf[0]==0x55&&revDataBuf[1]==0xAA&&revDataBuf[2]==0x75
+    &&revDataBuf[3]==0x70&&revDataBuf[4]==0x64&&revDataBuf[5]==0x61
+    &&revDataBuf[6]==0x74&&revDataBuf[7]==0x65)
+    {
+//        HAL_UART_SendData_DMA(&UART0_OBJ, revDataBuf, UART_TEST_SIZE);
+        shengji_flag=1;
+        only_one=1;
+    }
+    else
+    {
+        
+    }
+//    HAL_Status sts = HAL_UART_SendData_DMA(&UART0_OBJ, sendDataBuf, UART_TEST_SIZE);
+//    if (sts != HAL_OK)
+//    {
+//        printf("Error: HAL Uart Send Data with DMA Fail, error code = %d!\n", sts);
+//    }
+        memset(revDataBuf, 0, 128);
+        HAL_Status sts = HAL_UART_ReceiveData_DMA(&UART0_OBJ, revDataBuf, UART_TEST_SIZE);
+        if (sts != HAL_OK)
+        {
+    //        printf("Error: HAL Uart Receive Data with DMA Fail, error code = %d!\n", sts);
+        }
+    
+}
+
+void app_uart_tx_dma_callback(UART_Cb_Flag_Opt flag, uint8_t *pOutPtr, uint16_t size)
+{
+//    printf("UART Tx with DMA Done, sent data size = %d.\n", size);
+
+//    // Start UART Rx with DMA
+//    HAL_Status sts = HAL_UART_ReceiveData_DMA(&UART0_OBJ, revDataBuf, UART_TEST_SIZE);
+//    if (sts != HAL_OK)
+//    {
+////        printf("Error: HAL Uart Receive Data with DMA Fail, error code = %d!\n", sts);
+//    }
+}
+
+static void uart0_init(void)
+{
+    SYS_SET_MFP(P1, 6, UART0_TX);
+    SYS_SET_MFP(P1, 7, UART0_RX);
+    GPIO_EnableDigitalPath(P1, BIT7);
+
+    UART0_OBJ.initObj.baudRate = 921600;
+    UART0_OBJ.initObj.format = HAL_UART_FMT_8_N_1;
+    if (HAL_UART_Init(&UART0_OBJ) != HAL_OK) {
+        printf("Error: HAL Uart Init Fail!\n");
+    }
+
+    HAL_DMA_Init();
+
+    if (HAL_UART_Init_DMA(&UART0_OBJ, HAL_UART_DMA_TX, app_uart_tx_dma_callback) != HAL_OK) {
+        printf("Error: HAL Uart Tx DMA Init Fail!\n");
+    }
+    if (HAL_UART_Init_DMA(&UART0_OBJ, HAL_UART_DMA_RX, app_uart_rx_dma_callback) != HAL_OK) {
+        printf("Error: HAL Uart Rx DMA Init Fail!\n");
+    }
+}
+
 
 /**
  *******************************************************************************
@@ -19,7 +95,15 @@
 void setup(void)
 {
 	APP_LOG_INFO("app started\n");
+    // Init peripheral module
+    uart0_init();
 
+    // Start UART Rx with DMA
+    HAL_Status sts = HAL_UART_ReceiveData_DMA(&UART0_OBJ, revDataBuf, UART_TEST_SIZE);
+    if (sts != HAL_OK)
+    {
+        printf("Error: HAL Uart Receive Data with DMA Fail, error code = %d!\n", sts);
+    }
 	/* ble stack initialization. */
 	app_ble_init();
 

--
Gitblit v1.9.3