一个口使用DMA方式,另一个口使用ISR方式,配置好初始化,修改hal_board_cfg.h内关于DMA和ISR的相关设置,修改代码如下#if HAL_UART// Always prefer to use DMA over ISR. #if HAL_DMA #ifndef HAL_UART_DMA #if (defined ZAPP_P1) || (defined ZTOOL_P1) #define HAL_UART_DMA 1 #elif (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_DMA 2 #else #define HAL_UART_DMA 1 #endif #endif #define HAL_UART_ISR 2 #else #ifndef HAL_UART_ISR #if (defined ZAPP_P1) || (defined ZTOOL_P1) #define HAL_UART_ISR 1 #elif (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_ISR 2 #else #define HAL_UART_ISR 1 #endif #endif #define HAL_UART_DMA 0#endif这样就选择了port0 采用DMA方式,port1采用ISR方式。接下来是在应用文件中初始化两个串口。
//==========================================================================// 串口0初始化函数//==========================================================================static void FS_Uart_Init(void){ halUARTCfg_t uartConfig; uartConfig.configured = TRUE; // 2x30 don't care - see uart driver. uartConfig.baudRate = HAL_UART_BR_115200; uartConfig.flowControl = FALSE; uartConfig.flowControlThreshold = 256; // 2x30 don't care - see uart driver. uartConfig.rx.maxBufSize = 70; // 2x30 don't care - see uart driver. uartConfig.tx.maxBufSize = 256; // 2x30 don't care - see uart driver. uartConfig.idleTimeout = 6; // 2x30 don't care - see uart driver. uartConfig.intEnable = TRUE; // 2x30 don't care - see uart driver. uartConfig.callBackFunc = FS_Uart_CallBack; HalUARTOpen (HAL_UART_PORT_0, &uartConfig);}//==========================================================================// 串口1初始化函数//==========================================================================static void FS_Uart1_Init(void){ halUARTCfg_t uartConfig; uartConfig.configured = TRUE; // 2x30 don't care - see uart driver. uartConfig.baudRate = HAL_UART_BR_115200; uartConfig.flowControl = FALSE; uartConfig.flowControlThreshold = 32; // 2x30 don't care - see uart driver. uartConfig.rx.maxBufSize = 32; // 2x30 don't care - see uart driver. uartConfig.tx.maxBufSize = 32; // 2x30 don't care - see uart driver. uartConfig.idleTimeout = 6; // 2x30 don't care - see uart driver. uartConfig.intEnable = TRUE; // 2x30 don't care - see uart driver. uartConfig.callBackFunc = FS_Uart_CallBack; 指定串口回调函数 HalUARTOpen (HAL_UART_PORT_1, &uartConfig);}串口函数的读出从以上初始化代码中很明显的看到,两个port口采用了两个初始化函数但去采用了同一个回调函数,实际上也只能采用这一个回调函数串口的读出://====================================================================// @brief 串口回调函数//====================================================================static void FS_Uart_CallBack(uint8 port,uint8 event){ int i ; //(port == HAL_UART_PORT_0 )&& if(( event & ( HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT ) ) ) { if(port == HAL_UART_PORT_0) { HalUARTRead(HAL_UART_PORT_0, &i8_uart_buf[count], len); //读取串口数据到buf指向的内存 //此处添加数据解析函数 } else//port == HAL_UART_PORT_1 { i8_uart1_len = Hal_UART_RxBufLen(HAL_UART_PORT_1); //取出本次接收到的字符长度 HalUARTRead(HAL_UART_PORT_1, i8_uart1_buf, i8_uart1_len); osal_set_event( GenericApp_TaskID, GENERICAPP_FS_UART1_CALLBACK ); } } }
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号