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