en_result_t USART_UART_Init(M4_USART_TypeDef *USARTx,
const stc_usart_uart_init_t *pstcInitCfg); //初始化指定 UASRT 的 UART 模式
en_result_t USART_CLKSYNC_Init(M4_USART_TypeDef *USARTx,
const stc_usart_clksync_init_t *pstcInitCfg); //初始化指定 USART 为时钟同步模式
en_result_t USART_SC_Init(M4_USART_TypeDef *USARTx,
const stc_usart_sc_init_t *pstcInitCfg); //初始化指定 USART 为智能卡模式
en_result_t USART_DeInit(M4_USART_TypeDef *USARTx); //取消指定 USART 的初始化
en_flag_status_t USART_GetStatus(M4_USART_TypeDef *USARTx,
en_usart_status_t enStatus); //获取指定 USART 的状态
en_result_t USART_ClearStatus(M4_USART_TypeDef *USARTx,
en_usart_status_t enStatus); //清除指定 USART 的状态配置
en_result_t USART_FuncCmd(M4_USART_TypeDef *USARTx,
en_usart_func_t enFunc,
en_functional_state_t enCmd); //配置 USART 的功能
en_result_t USART_SetParity(M4_USART_TypeDef *USARTx,
en_usart_parity_t enParity); //配置 USART 的奇偶检验
en_usart_parity_t USART_GetParity(M4_USART_TypeDef *USARTx); //获取 USART 的奇偶校验配置
en_result_t USART_SetOverSampling(M4_USART_TypeDef *USARTx,
en_usart_sample_mode_t enSampleMode); //设置 USART 采样模式
en_usart_sample_mode_t USART_GetOverSampling(M4_USART_TypeDef *USARTx); //获取 USART 采样模式配置
en_result_t USART_SetDataDirection(M4_USART_TypeDef *USARTx,
en_usart_data_dir_t enDir); //设置 USART 的大小端传输方向
en_usart_data_dir_t USART_GetTransferDirection(M4_USART_TypeDef *USARTx); //获取 USART 的大小端传输方向配置
en_result_t USART_SetDataLength(M4_USART_TypeDef *USARTx,
en_usart_data_len_t enDataLen); //设置 USART 发送数据长度
en_usart_data_len_t USART_GetDataLength(M4_USART_TypeDef *USARTx); //获取 USART 发送数据长度配置
en_result_t USART_SetClkMode(M4_USART_TypeDef *USARTx,
en_usart_clk_mode_t enClkMode); //设置 USART 的时钟模式
en_usart_clk_mode_t USART_GetClkMode(M4_USART_TypeDef *USARTx); //获取 USART 的时钟模式配置
en_result_t USART_SetMode(M4_USART_TypeDef *USARTx,
en_usart_mode_t enMode); //设置 USART 的模式
en_usart_mode_t USART_GetMode(M4_USART_TypeDef *USARTx); //获取 USART 的模式配置
en_result_t USART_SetStopBitsLength(M4_USART_TypeDef *USARTx,
en_usart_stop_bit_t enStopBit); //设置 USART 的停止位
en_usart_stop_bit_t USART_GetStopBitsLength(M4_USART_TypeDef *USARTx); //获取 USART 的停止位配置
en_result_t USART_SetSbDetectMode(M4_USART_TypeDef *USARTx,
en_usart_sb_detect_mode_t enDetectMode); //设置 USART 为检测模式
en_usart_sb_detect_mode_t USART_GetSbDetectMode(M4_USART_TypeDef *USARTx); //获取 USART 的检测模式配置
en_result_t USART_SetHwFlowCtrl(M4_USART_TypeDef *USARTx,
en_usart_hw_flow_ctrl_t enHwFlowCtrl); //设置 USART 的硬件流控制
en_usart_hw_flow_ctrl_t USART_GetHwFlowCtrl(M4_USART_TypeDef *USARTx); //获取 USART 的硬件流控制配置
en_result_t USART_SetClockDiv(M4_USART_TypeDef *USARTx,
en_usart_clk_div_t enClkPrescale); //设置 USART 的时钟分频系数
en_usart_clk_div_t USART_GetClockDiv(M4_USART_TypeDef *USARTx); //获取 USART 的时钟分频系数
en_result_t USART_SetScEtuClk(M4_USART_TypeDef *USARTx,
en_usart_sc_etu_clk_t enEtuClk); //设置 USART 智能卡模式 ETU 时钟
en_usart_sc_etu_clk_t USART_GetScEtuClk(M4_USART_TypeDef *USARTx); //获取 USART 智能卡模式 ETU 时钟的配置
en_result_t USART_SendData(M4_USART_TypeDef *USARTx, uint16_t u16Data); //通过 USART 发送一个字节
uint16_t USART_RecData(M4_USART_TypeDef *USARTx); //通过 USART 获取一个字节
en_result_t USART_SetBaudrate(M4_USART_TypeDef *USARTx,
uint32_t u32Baudrate); //设置 USART 的波特率
华大单片机 HC32F460 库中有四个串口,串口的基地址定义在芯片类型的头文件中,如hc32f460keta.h、hc32f46x.h(库版本不同会有一定差异)
M4_USART_TypeDef 的串口编号的基地址
#define M4_USART1 ((M4_USART_TypeDef *)0x4001D000UL)
#define M4_USART2 ((M4_USART_TypeDef *)0x4001D400UL)
#define M4_USART3 ((M4_USART_TypeDef *)0x40021000UL)
#define M4_USART4 ((M4_USART_TypeDef *)0x40021400UL)
typedef struct stc_usart_uart_init
{
en_usart_clk_mode_t enClkMode; //时钟模式选择
en_usart_clk_div_t enClkDiv; //时钟分频配置
en_usart_data_len_t enDataLength; //数据长度配置 8bit/9bit
en_usart_data_dir_t enDirection; //数据传输方向配置(大小端)
en_usart_stop_bit_t enStopBit; //停止位配置
en_usart_parity_t enParity; //奇偶校验位配置
en_usart_sample_mode_t enSampleMode; //串口采样模式 8bit/16bit
en_usart_sb_detect_mode_t enDetectMode; //起始位检测模式
en_usart_hw_flow_ctrl_t enHwFlow; //硬件流控制模式
} stc_usart_uart_init_t;
typedef struct stc_usart_clksync_init
{
en_usart_clk_mode_t enClkMode; //时钟模式配置
en_usart_clk_div_t enClkDiv; //时钟分频配置
en_usart_data_dir_t enDirection; //数据传输方向配置(大小端)
en_usart_hw_flow_ctrl_t enHwFlow; //硬件流控制模式
} stc_usart_clksync_init_t;
typedef struct stc_usart_sc_init
{
en_usart_clk_mode_t enClkMode; //时钟模式配置
en_usart_clk_div_t enClkDiv; //时钟分频配置
en_usart_data_dir_t enDirection; //数据传输方向配置(大小端)
} stc_usart_sc_init_t;
typedef enum en_usart_status
{
UsartParityErr = (1u << 0), //接收数据校验错误标志
UsartFrameErr = (1u << 1), //接收帧错误标志位
UsartOverrunErr = (1u << 3), //接收上溢错误标志位
UsartRxNoEmpty = (1u << 5), //接收数据寄存器不为空标志
UsartTxComplete = (1u << 6), //发送完成标志位
UsartTxEmpty = (1u << 7), //发送数据寄存器空标志
UsartRxTimeOut = (1u << 8), //UART接收TIMEOUT标志位
UsartRxMpb = (1u << 16), //多处理器位标志
} en_usart_status_t;
typedef enum en_usart_func
{
UsartRx = 0u, //接收功能
UsartRxInt = 1u, //接收中断功能
UsartTx = 2u, //发送功能
UsartTxEmptyInt = 3u, //发送中断功能
UsartTimeOut = 4u, //接收超时功能
UsartTimeOutInt = 5u, //接收超时中断功能
UsartSilentMode = 6u, //多处理器操作时,静默模式使能位功能
UsartTxCmpltInt = 7u, //发送完成功能
UsartTxAndTxEmptyInt = 8u, //发送和发送中断功能
UsartParityCheck = 9u, //奇偶校验功能
UsartNoiseFilter = 10u, //数字滤波功能
UsartFracBaudrate = 11u, //小数滤波功能
UsartMulProcessor = 12u, //多处理器功能
UsartSmartCard = 13u, //智能卡功能
UsartCts = 14u, //CTS 功能
} en_usart_func_t;
typedef enum en_usart_parity
{
UsartParityNone = 0u, //无校验
UsartParityEven = 1u, //偶检验
UsartParityOdd = 2u, //奇校验
} en_usart_parity_t;
typedef enum en_usart_sample_mode
{
UsartSampleBit16 = 0u, // 16 Bit
UsartSampleBit8 = 1u, // 8 Bit
} en_usart_sample_mode_t;
typedef enum en_usart_data_dir
{
UsartDataLsbFirst = 0u, // LSB first 小端
UsartDataMsbFirst = 1u, // MSB first 大端
} en_usart_data_dir_t;
typedef enum en_usart_data_len
{
UsartDataBits8 = 0u, //8 Bit
UsartDataBits9 = 1u, // 9 Bit
} en_usart_data_len_t;
typedef enum en_usart_clk_mode
{
UsartIntClkCkNoOutput = 0u, //选择内部时钟源,不输出时钟。
UsartIntClkCkOutput = 1u, //选择内部时钟源,输出时钟。
UsartExtClk = 2u, //选择外部时钟源。
} en_usart_clk_mode_t;
typedef enum en_usart_mode
{
UsartUartMode = 0u, //异步模式
UsartClkSyncMode = 1u, //同步模式
UsartSmartCardMode = 2u, //智能卡模式
} en_usart_mode_t;
typedef enum en_usart_stop_bit
{
UsartOneStopBit = 0u, // 1 Stop Bit
UsartTwoStopBit = 1u, // 2 Stop Bit
} en_usart_stop_bit_t;
typedef enum en_usart_hw_flow_ctrl
{
UsartRtsEnable = 0u, //使能 RTS 功能
UsartCtsEnable = 1u, //使能 CTS 功能
} en_usart_hw_flow_ctrl_t;
typedef enum en_usart_clk_div
{
UsartClkDiv_1 = 0u, // PCLK/1
UsartClkDiv_4 = 1u, // PCLK/4
UsartClkDiv_16 = 2u, // PCLK/16
UsartClkDiv_64 = 3u, // PCLK/64
} en_usart_clk_div_t;