//// Created by shchl on 2024/2/22.//#include"ble_hc05.h"#defineHC05_AT_GPIO_PINGPIO_PIN_9#defineHC05_AT_GPIO_PORTGPIOC#defineHC05_AT_GPIO_CLK_EN()__HAL_RCC_GPIOC_CLK_ENABLE()#definehc05_uart_devuart1_devstatic bool isCmdDatResp = false;/*是发送 指令数据标志位*/staticvoidhc05_device_start_rec(void);staticuint8_t hc05_rx_buf[UART1_RX_BUF_LEN];voidhc05_device_init(void){/*设置对应的延迟函数回调*/hc05_set_delay_cb(HAL_Delay);/*对应GPIO硬件初始化*/HC05_AT_GPIO_CLK_EN();GPIO_InitTypeDef GPIO_Init;GPIO_Init.Pin = HC05_AT_GPIO_PIN;GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init.Pull = GPIO_PULLDOWN;GPIO_Init.Speed = GPIO_SPEED_MEDIUM;HAL_GPIO_Init(HC05_AT_GPIO_PORT,&GPIO_Init);/*对应串口硬件初始化*/uart1_dev_init(115200);hc05_device_start_rec();/*退出at模式*/hc05_device_quit_at_mode();}__weak voidhc05_device_send(constchar*cmd){HAL_UART_Transmit(&hc05_uart_dev.uart_handle,(uint8_t*) cmd,strlen(cmd),20);}__weak char*hc05_device_wait_resp(void){for(int i =0; i <10;++i){hc05_delay_ms(10);uint32_t len =CacheBuffer_Read_Data(hc05_uart_dev.rx_cache_ptr, hc05_rx_buf);if(len >0){hc05_rx_buf[len]='\0';// printf("HC05_Rec_Str len:%lu,data:%s\r\n", len, hc05_rx_buf);return(char*) hc05_rx_buf;}}returnNULL;}__weak uint16_thc05_device_rec_remote_data(uint8_t*dst){hc05_device_quit_at_mode();returnCacheBuffer_Read_Data(hc05_uart_dev.rx_cache_ptr, dst);}uint16_thc05_device_send_remote_data(uint8_t*dst,uint16_t len){hc05_device_quit_at_mode();HAL_UART_Transmit(&hc05_uart_dev.uart_handle, dst, len,20);return len;}
__weak voidhc05_device_enter_at_mode(void){HAL_GPIO_WritePin(HC05_AT_GPIO_PORT, HC05_AT_GPIO_PIN, GPIO_PIN_SET);}__weak voidhc05_device_quit_at_mode(void){HAL_GPIO_WritePin(HC05_AT_GPIO_PORT, HC05_AT_GPIO_PIN, GPIO_PIN_RESET);}/*** 串口函数回调中使用* @param Size*/voidHAL_UARTEx_RxEventCallback_HC05(uint16_t Size){CacheBuffer_Update_Data_Len(hc05_uart_dev.rx_cache_ptr, Size);/*重新接收数据*/hc05_device_start_rec();}staticvoidhc05_device_start_rec(void){HAL_UARTEx_ReceiveToIdle_DMA(&hc05_uart_dev.uart_handle,hc05_uart_dev.rx_cache_ptr->List[hc05_uart_dev.rx_cache_ptr->InIndex].start,CACHE_BUFFER_ONE_DATA_MAX_LEN);}
串口驱动文件(针对stm32f4芯片,根据需要修改)
bsp_uart.h
//// Created by shchl on 2024/2/21.//#ifndefBSP_UART_H#defineBSP_UART_H#include"bsp.h"#include"cachebuffer.h"#defineUART_PRINTF_DEVuart2_dev.uart_handle/*-----------------------------------串口1配置----------------------------------------*/#defineUART1_DEV_RX_CACHE_ENABLE1/*串口1设备接收缓冲区使能*/#defineUART1_DEV_TX_CACHE_ENABLE0/*串口1设备发送缓冲区使能*/#defineUART1_IT_ENABLE1/*串口1中断*/#defineUART1_RX_BUF_LEN1024#defineUART1_TX_BUF_LEN1024/*-----------------------------------串口2配置----------------------------------------*/#defineUART2_DEV_RX_CACHE_ENABLE0/*串口2设备接收缓冲区使能*/#defineUART2_DEV_TX_CACHE_ENABLE0/*串口2设备发送缓冲区使能*/#defineUART2_IT_ENABLE0/*串口2中断*/#defineUART2_RX_BUF_LEN1024#defineUART2_TX_BUF_LEN1024typedefstruct{CacheBuffer_t *rx_cache_ptr;/*接收缓存*/CacheBuffer_t *tx_cache_ptr;/*发送缓存*/UART_HandleTypeDef uart_handle;}uart_dev_t;/*串口设备*/externuart_dev_t uart1_dev;externuart_dev_t uart2_dev;voiduart1_dev_init(uint32_t baud);voiduart2_dev_init(uint32_t baud);#endif//BSP_UART_H