/** ########################################################################## ** Filename : uart_cfg.c ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : uart底层 ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ #include "uart.h" #ifdef USART_0_EN FL_UART_InitTypeDef g_UART0_InitStruct = { FL_CMU_UART0_CLK_SOURCE_APBCLK, 19200u, /* 波特率 */ FL_UART_DATA_WIDTH_8B, /* 数据位数 */ FL_UART_STOP_BIT_WIDTH_1B, /* 停止位 */ FL_UART_PARITY_NONE, /* 奇偶校验 */ FL_UART_DIRECTION_RX, /* 接收-发送使能 */ }; #endif #ifdef USART_1_EN FL_UART_InitTypeDef g_UART1_InitStruct = { FL_CMU_UART1_CLK_SOURCE_APBCLK, 9600u, /* 波特率 */ FL_UART_DATA_WIDTH_8B, /* 数据位数 */ FL_UART_STOP_BIT_WIDTH_1B, /* 停止位 */ FL_UART_PARITY_NONE, /* 奇偶校验 */ FL_UART_DIRECTION_RX, /* 接收-发送使能 */ }; #endif #ifdef USART_3_EN FL_UART_InitTypeDef g_UART3_InitStruct = { 0u, //默认 apbclk 9600u, /* 波特率 */ FL_UART_DATA_WIDTH_8B, /* 数据位数 */ FL_UART_STOP_BIT_WIDTH_1B, /* 停止位 */ FL_UART_PARITY_NONE, /* 奇偶校验 */ FL_UART_DIRECTION_RX, /* 接收-发送使能 */ }; #endif #ifdef USART_4_EN FL_UART_InitTypeDef g_UART4_InitStruct = { 0u, //默认 apbclk, 9600u, /* 波特率 */ FL_UART_DATA_WIDTH_8B, /* 数据位数 */ FL_UART_STOP_BIT_WIDTH_1B, /* 停止位 */ FL_UART_PARITY_NONE, /* 奇偶校验 */ FL_UART_DIRECTION_RX, /* 接收-发送使能 */ }; #endif #ifdef USART_5_EN FL_UART_InitTypeDef g_UART5_InitStruct = { 0u, //默认 apbclk, 19200u, /* 波特率 */ FL_UART_DATA_WIDTH_8B, /* 数据位数 */ FL_UART_STOP_BIT_WIDTH_1B, /* 停止位 */ FL_UART_PARITY_NONE, /* 奇偶校验 */ FL_UART_DIRECTION_TX_RX, /* 接收-发送使能 */ }; #endif #ifdef USART_0_EN void usart_0_gpio_init(void) { FL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PA13:UART0-RX PA14:UART0-TX */ GPIO_InitStruct.pin = FL_GPIO_PIN_13 | FL_GPIO_PIN_14; GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL; GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.pull = FL_ENABLE; GPIO_InitStruct.remapPin = FL_DISABLE; FL_GPIO_Init(GPIOA, &GPIO_InitStruct); } #endif #ifdef USART_1_EN void usart_1_gpio_init(void) { FL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PC2:UART1-RX PC3:UART1-TX */ GPIO_InitStruct.pin = FL_GPIO_PIN_2 | FL_GPIO_PIN_3; GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL; GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN; GPIO_InitStruct.pull = FL_ENABLE; GPIO_InitStruct.remapPin = FL_DISABLE; FL_GPIO_Init(GPIOC, &GPIO_InitStruct); } #endif #ifdef USART_3_EN void usart_3_gpio_init(void) { FL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PB0:UART3-RX PB1:UART3-TX */ GPIO_InitStruct.pin = FL_GPIO_PIN_0 | FL_GPIO_PIN_1; GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL; GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.pull = FL_DISABLE; GPIO_InitStruct.remapPin = FL_ENABLE; FL_GPIO_Init(GPIOB, &GPIO_InitStruct); } #endif #ifdef USART_4_EN void usart_4_gpio_init(void) { FL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PB2:UART4-RX PB3:UART4-TX */ GPIO_InitStruct.pin = FL_GPIO_PIN_2 | FL_GPIO_PIN_3; GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL; GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.pull = FL_ENABLE; GPIO_InitStruct.remapPin = FL_DISABLE; FL_GPIO_Init(GPIOB, &GPIO_InitStruct); } #endif #ifdef USART_5_EN void usart_5_gpio_init(void) { FL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PD0:UART5-RX PD1:UART5-TX */ GPIO_InitStruct.pin = FL_GPIO_PIN_0 | FL_GPIO_PIN_1; GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL; GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN; GPIO_InitStruct.pull = FL_ENABLE; GPIO_InitStruct.remapPin = FL_DISABLE; FL_GPIO_Init(GPIOD, &GPIO_InitStruct); } #endif #ifdef USART_0_EN /** * @brief UART0中断函数 * @param void * @retval void */ void UART0_IRQHandler(void) { uint8_t tmp08; /* 接收中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART0)) && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART0))) { /* 中断转发接收到的数据 */ tmp08 = FL_UART_ReadRXBuff(UART0); /* 接收中断标志可通过读取rxreg寄存器清除 */ FL_UART_WriteTXBuff(UART0, tmp08); } /* 发送中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART0)) && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART0))) { /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */ /* 发送指定长度的数据 */ if(UARTxOp.TxOpc < UARTxOp.TxLen) { FL_UART_WriteTXBuff(UART0, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */ UARTxOp.TxOpc++; } FL_UART_ClearFlag_TXShiftBuffEmpty(UART0); /* 清除发送中断标志 */ } } #endif #ifdef USART_1_EN /** * @brief UART1中断函数 * @param void * @retval void */ void UART1_IRQHandler(void) { uint8_t tmp08; /* 接收中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART1)) && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART1))) { /* 中断转发接收到的数据 */ tmp08 = FL_UART_ReadRXBuff(UART1); /* 接收中断标志可通过读取rxreg寄存器清除 */ FL_UART_WriteTXBuff(UART1, tmp08); } /* 发送中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART1)) && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART1))) { /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */ /* 发送指定长度的数据 */ if(UARTxOp.TxOpc < UARTxOp.TxLen) { FL_UART_WriteTXBuff(UART1, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */ UARTxOp.TxOpc++; } FL_UART_ClearFlag_TXShiftBuffEmpty(UART1); /* 清除发送中断标志 */ } } #endif #ifdef USART_3_EN /** * @brief UART3中断函数 * @param void * @retval void */ void UART3_IRQHandler(void) { uint8_t tmp08; /* 接收中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART3)) && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART3))) { /* 中断转发接收到的数据 */ tmp08 = FL_UART_ReadRXBuff(UART3); /* 接收中断标志可通过读取rxreg寄存器清除 */ FL_UART_WriteTXBuff(UART3, tmp08); } /* 发送中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART3)) && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART3))) { /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */ /* 发送指定长度的数据 */ if(UARTxOp.TxOpc < UARTxOp.TxLen) { FL_UART_WriteTXBuff(UART3, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */ UARTxOp.TxOpc++; } FL_UART_ClearFlag_TXShiftBuffEmpty(UART3); /* 清除发送中断标志 */ } } #endif #ifdef USART_4_EN /** * @brief UART4中断函数 * @param void * @retval void */ void UART4_IRQHandler(void) { uint8_t tmp08; /* 接收中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART4)) && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART4))) { /* 中断转发接收到的数据 */ tmp08 = FL_UART_ReadRXBuff(UART4); /* 接收中断标志可通过读取rxreg寄存器清除 */ FL_UART_WriteTXBuff(UART4, tmp08); } /* 发送中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART4)) && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART4))) { /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */ /* 发送指定长度的数据 */ if(UARTxOp.TxOpc < UARTxOp.TxLen) { FL_UART_WriteTXBuff(UART4, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */ UARTxOp.TxOpc++; } FL_UART_ClearFlag_TXShiftBuffEmpty(UART4); /* 清除发送中断标志 */ } } #endif #ifdef USART_5_EN #if 0 //在lin底层中有 /** * @brief UART5中断函数 * @param void * @retval void */ void UART5_IRQHandler(void) { uint8_t tmp08; /* 接收中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART5)) && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART5))) { #if 0 /* 中断转发接收到的数据 */ tmp08 = FL_UART_ReadRXBuff(UART5); /* 接收中断标志可通过读取rxreg寄存器清除 */ FL_UART_WriteTXBuff(UART5, tmp08); #else tmp08 = FL_UART_ReadRXBuff(UART5); /* 接收中断标志可通过读取rxreg寄存器清除 */ //FL_UART_ClearFlag_RXBuffFull(UART5); uart_rx_isr_task(UART5,tmp08); #endif } /* 发送中断处理 */ if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART5)) && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART5))) { FL_UART_ClearFlag_TXShiftBuffEmpty(UART5); /* 清除发送中断标志 */ #if 0 /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */ /* 发送指定长度的数据 */ if(UARTxOp.TxOpc < UARTxOp.TxLen) { FL_UART_WriteTXBuff(UART5, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */ UARTxOp.TxOpc++; } #endif uart_tx_isr_task(UART5); } } #endif #endif /*--------------------------------------------------------------------------- |Prototype : uart_app_test_task |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : 周期任务 ----------------------------------------------------------------------------*/ void uart_app_test_task(void) { u8 i; u8 l_tx_data[5]; #if 0 for(i = 0; i < 5; i++) { /* code */ } #endif l_tx_data[0] =0x55u; l_tx_data[1] =0xaau; l_tx_data[2] =0xa1u; l_tx_data[3] =0x29u; uart_tx_start(UART5,&l_tx_data[0],4u); }