CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_lpuart.h

921 lines
34 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @file ciu32L051_std_lpuart.h
* @author MCU Ecosystem Development Team
* @brief LPUART STD库驱动头文件。
* 提供LPUART相关的STD库操作函数声明、数据类型以及常量的定义。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/*避免头文件重复引用*/
#ifndef CIU32L051_STD_LPUART_H
#define CIU32L051_STD_LPUART_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup LPUART LPUART
* @brief 低功耗通用异步收发器的STD库驱动
* @{
*/
/************************************************************************************************/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32L051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LPUART_Types LPUART Types
* @brief LPUART数据类型定义
* @{
*
*/
/************************************************************************************************/
/**
* @brief LPUART 初始化结构体定义
*/
typedef struct
{
uint32_t prescaler; /**< LPUART 时钟预分频
@arg LPUART_PRESCALER_DIV1 ... */
uint32_t direction; /**< LPUART 传输方向
@arg LPUART_DIRECTION_SEND ... */
uint32_t baudrate; /**< LPUART 波特率 */
uint32_t wordlength; /**< LPUART 数据帧字长
@arg LPUART_WORDLENGTH_8BITS ... */
uint32_t stopbits; /**< LPUART 数据帧停止位长度
@arg LPUART_STOPBITS_1 ... */
uint32_t parity; /**< LPUART 数据帧奇偶校验
@arg LPUART_PARITY_NONE ... */
uint32_t hardware_flow; /**< LPUART RS232硬件流控
@arg LPUART_FLOWCONTROL_NONE ... */
} std_lpuart_init_t;
/**
* @brief LPUART 预分频值
*/
static const uint16_t LPUART_PRESCALER_TABLE[] =
{
(uint16_t)1U,
(uint16_t)2U,
(uint16_t)4U,
(uint16_t)6U,
(uint16_t)8U,
(uint16_t)10U,
(uint16_t)12U,
(uint16_t)16U,
(uint16_t)32U,
(uint16_t)64U,
(uint16_t)128U,
(uint16_t)256U
};
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LPUART_Constants LPUART Constants
* @brief LPUART常量定义及宏定义
* @{
*
*/
#define LPUART_t USART_t
/* LPUART标志清除位(LPUART_ICR寄存器) */
#define LPUART_CLEAR_PE USART_ICR_PECF /**< 奇偶校验错误标志清除 */
#define LPUART_CLEAR_FE USART_ICR_FECF /**< 帧错误标志清除 */
#define LPUART_CLEAR_ORE USART_ICR_ORECF /**< 接收溢出错误标志清除 */
#define LPUART_CLEAR_TC USART_ICR_TCCF /**< 发送完成标志清除 */
#define LPUART_CLEAR_CTS USART_ICR_CTSCF /**< CTS标志清除 */
#define LPUART_CLEAR_CM USART_ICR_CMCF /**< 字符匹配清除 */
#define LPUART_CLEAR_LPWK USART_ICR_LPWKCF /**< 低功耗模式唤醒标志清除 */
/* LPUART标志(LPUART_ISR寄存器) */
#define LPUART_FLAG_PE USART_ISR_PE /**< LPUART 奇偶校验错误标志 */
#define LPUART_FLAG_FE USART_ISR_FE /**< LPUART 帧错误标志 */
#define LPUART_FLAG_ORE USART_ISR_ORE /**< LPUART 接收溢出错误标志 */
#define LPUART_FLAG_RXNE USART_ISR_RXNE /**< LPUART 接收寄存器非空标志 */
#define LPUART_FLAG_TC USART_ISR_TC /**< LPUART 发送完成标志 */
#define LPUART_FLAG_TXE USART_ISR_TXE /**< LPUART 发送数据寄存器空标志 */
#define LPUART_FLAG_CTSIF USART_ISR_CTSIF /**< LPUART CTS标志中断标志 */
#define LPUART_FLAG_CTS USART_ISR_CTS /**< LPUART CTS标志 */
#define LPUART_FLAG_CM USART_ISR_CMF /**< LPUART 字符匹配标志 */
#define LPUART_FLAG_LPWKF USART_ISR_LPWK /**< LPUART 低功耗模式唤醒标志 */
#define LPUART_FLAG_TEACK USART_ISR_TEACK /**< LPUART 发送器使能确认标志 */
#define LPUART_FLAG_REACK USART_ISR_REACK /**< LPUART 接收器使能确认标志 */
#define LPUART_FLAG_BUSY USART_ISR_BUSY /**< LPUART 接收忙标志 */
/* LPUART中断使能位(LPUART_CR1、LPUART_CR3寄存器) */
#define LPUART_CR1_INTERRUPT_RXNE USART_CR1_RXNEIE /**< LPUART 接收数据寄存器非空中断使能 */
#define LPUART_CR1_INTERRUPT_TC USART_CR1_TCIE /**< LPUART 发送完成中断使能 */
#define LPUART_CR1_INTERRUPT_TXE USART_CR1_TXEIE /**< LPUART 发送数据寄存器空中断使能 */
#define LPUART_CR1_INTERRUPT_PE USART_CR1_PEIE /**< LPUART 奇偶校验错误中断使能 */
#define LPUART_CR1_INTERRUPT_CM USART_CR1_CMIE /**< LPUART 字符匹配中断使能 */
#define LPUART_CR3_INTERRUPT_ERR USART_CR3_EIE /**< LPUART 错误中断使能(帧错误,噪声错误,接收溢出错误) */
#define LPUART_CR3_INTERRUPT_CTS USART_CR3_CTSIE /**< LPUART CTS中断使能 */
#define LPUART_CR3_INTERRUPT_LPWK USART_CR3_LPWKIE /**< LPUART Stop低功耗模式唤醒中断使能 */
/*
* LPUART时钟预分频参数
* 默认1分频超出范围则硬件采用256分频
*/
#define LPUART_PRESCALER_DIV1 (0x00000000U) /**< 预分频时钟fclk_pres = fclk */
#define LPUART_PRESCALER_DIV2 (0x00000001U) /**< 预分频时钟fclk_pres = fclk/2 */
#define LPUART_PRESCALER_DIV4 (0x00000002U) /**< 预分频时钟fclk_pres = fclk/4 */
#define LPUART_PRESCALER_DIV6 (0x00000003U) /**< 预分频时钟fclk_pres = fclk/6 */
#define LPUART_PRESCALER_DIV8 (0x00000004U) /**< 预分频时钟fclk_pres = fclk/8 */
#define LPUART_PRESCALER_DIV10 (0x00000005U) /**< 预分频时钟fclk_pres = fclk/10 */
#define LPUART_PRESCALER_DIV12 (0x00000006U) /**< 预分频时钟fclk_pres = fclk/12 */
#define LPUART_PRESCALER_DIV16 (0x00000007U) /**< 预分频时钟fclk_pres = fclk/16 */
#define LPUART_PRESCALER_DIV32 (0x00000008U) /**< 预分频时钟fclk_pres = fclk/32 */
#define LPUART_PRESCALER_DIV64 (0x00000009U) /**< 预分频时钟fclk_pres = fclk/64 */
#define LPUART_PRESCALER_DIV128 (0x0000000AU) /**< 预分频时钟fclk_pres = fclk/128 */
#define LPUART_PRESCALER_DIV256 (0x0000000BU) /**< 预分频时钟fclk_pres = fclk/256 */
/* LPUART 数据帧长度 */
#define LPUART_WORDLENGTH_8BITS USART_CR1_WL8BITS /**< 8-bits 字长 */
#define LPUART_WORDLENGTH_9BITS USART_CR1_WL9BITS /**< 9-bits 字长 */
/* LPUART 数据帧奇偶校验 */
#define LPUART_PARITY_NONE (0x00000000U) /**< 无校验 */
#define LPUART_PARITY_EVEN USART_CR1_PEN /**< 偶校验 */
#define LPUART_PARITY_ODD (USART_CR1_PEN | USART_CR1_PTS) /**< 奇校验 */
/* LPUART 数据帧停止位 */
#define LPUART_STOPBITS_1 (0x00000000U) /**< 1bit停止位 */
#define LPUART_STOPBITS_2 USART_CR2_STOPBIT_2 /**< 2bits停止位 */
/* LPUART 数据帧大小端 */
#define LPUART_DATA_ORDER_LSBFIRST (0x00000000U) /**< 低有效位优先 */
#define LPUART_DATA_ORDER_MSBFIRST USART_CR2_MSBFIRST /**< 高有效位优先 */
/* LPUART 波特率参数范围 */
#define LPUART_BRR_MIN (0x00000300U) /**< LPUART波特率寄存器允许的最小值 */
#define LPUART_BRR_MAX (0x000FFFFFU) /**< LPUART波特率寄存器允许的最大值 */
/* LPUART RS232硬件流控 */
#define LPUART_FLOWCONTROL_NONE (0x00000000U) /**< 无流控功能 */
#define LPUART_FLOWCONTROL_RTS USART_CR3_RTSE /**< RTS使能 */
#define LPUART_FLOWCONTROL_CTS USART_CR3_CTSE /**< CTS使能 */
#define LPUART_FLOWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /**< RTS和CTS同时使能 */
/* LPUART 传输方向 */
#define LPUART_DIRECTION_NONE (0x00000000U) /**< 未使能发送器和接收器 */
#define LPUART_DIRECTION_SEND USART_CR1_TE /**< 单发送模式(仅使能发送器) */
#define LPUART_DIRECTION_RECEIVE USART_CR1_RE /**< 单接收模式(仅使能接收器) */
#define LPUART_DIRECTION_SEND_RECEIVE (USART_CR1_TE |USART_CR1_RE) /**< 发送接收模式(使能发送器和接收器)*/
/* DMA模式LPUART发送 */
#define LPUART_DMA_SEND_DISABLE (0x00000000U) /**< 禁止DMA模式LPUART发送 */
#define LPUART_DMA_SEND_ENABLE USART_CR3_DMAT /**< 使能DMA模式LPUART发送 */
/* DMA模式LPUART接收 */
#define LPUART_DMA_RECEIVE_DISABLE (0x00000000U) /**< 禁止DMA模式LPUART接收 */
#define LPUART_DMA_RECEIVE_ENABLE USART_CR3_DMAR /**< 使能DMA模式LPUART接收 */
/* LPUART单线半双工模式 */
#define LPUART_HALF_DUPLEX_DISABLE (0x00000000U) /**< 禁止LPUART单线半双工模式 */
#define LPUART_HALF_DUPLEX_ENABLE USART_CR3_HDEN /**< 使能LPUART单线半双工模式 */
/* LPUART Stop低功耗模式唤醒源选择 */
#define LPUART_WAKEUP_ON_STARTBIT (0x00000000U) /**< 起始位检测唤醒 */
#define LPUART_WAKEUP_ON_READDATA_NOTEMPTY USART_CR3_LPWKS /**< 接收到一帧数据唤醒 */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup LPUART_External_Functions LPUART External Functions
* @brief LPUART对外函数
* @{
*
*/
/************************************************************************************************/
/**
* @brief 使能 LPUART外设
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_enable(LPUART_t *lpuartx)
{
lpuartx->CR1 |= (USART_CR1_UE);
}
/**
* @brief 禁止 LPUART外设
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_disable(LPUART_t *lpuartx)
{
lpuartx->CR1 &= (~USART_CR1_UE);
}
/**
* @brief LPUART 校验配置
* @param lpuartx LPUART外设
* @param parity LPUART 奇偶校验配置项
* @arg LPUART_PARITY_NONE
* @arg LPUART_PARITY_EVEN
* @arg LPUART_PARITY_ODD
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_parity(LPUART_t *lpuartx,uint32_t parity)
{
MODIFY_REG(lpuartx->CR1, USART_CR1_PTS | USART_CR1_PEN, parity);
}
/**
* @brief 获取LPUART奇偶校验
* @param lpuartx LPUART外设
* @retval uint32_t LPUART奇偶校验项
* @arg LPUART_PARITY_NONE
* @arg LPUART_PARITY_EVEN
* @arg LPUART_PARITY_ODD
*/
__STATIC_INLINE uint32_t std_lpuart_get_parity(LPUART_t *lpuartx)
{
return(lpuartx->CR1 & (USART_CR1_PTS | USART_CR1_PEN));
}
/**
* @brief LPUART 字符长度配置
* @param lpuartx LPUART外设
* @param word_length LPUART 字符长度配置项
* @arg LPUART_WORDLENGTH_8BITS
* @arg LPUART_WORDLENGTH_9BITS
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_word_length(LPUART_t *lpuartx, uint32_t word_length)
{
MODIFY_REG(lpuartx->CR1, USART_CR1_WL, word_length);
}
/**
* @brief 获取LPUART字符长度
* @param lpuartx LPUART外设
* @retval uint32_t LPUART 字符长度
* @arg LPUART_WORDLENGTH_8BITS
* @arg LPUART_WORDLENGTH_9BITS
*/
__STATIC_INLINE uint32_t std_lpuart_get_word_length(LPUART_t *lpuartx)
{
return (lpuartx->CR1 & USART_CR1_WL);
}
/**
* @brief LPUART 停止位配置
* @param lpuartx LPUART外设
* @param stopbits LPUART 停止位位数配置项
* @arg LPUART_STOPBITS_1
* @arg LPUART_STOPBITS_2
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_stopbits(LPUART_t *lpuartx, uint32_t stopbits)
{
MODIFY_REG(lpuartx->CR2, USART_CR2_STOPBIT, stopbits);
}
/**
* @brief 获取LPUART停止位
* @param lpuartx LPUART外设
* @retval uint32_t LPUART停止位位数
* @arg LPUART_STOPBITS_1
* @arg LPUART_STOPBITS_2
*/
__STATIC_INLINE uint32_t std_lpuart_get_stopbits(LPUART_t *lpuartx)
{
return(lpuartx->CR2 & USART_CR2_STOPBIT);
}
/**
* @brief LPUART 字符大小端配置
* @param lpuartx LPUART外设
* @param data_order LPUART 字符帧格式大小端配置
* @arg LPUART_DATA_ORDER_LSBFIRST
* @arg LPUART_DATA_ORDER_MSBFIRST
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_data_order(LPUART_t *lpuartx, uint32_t data_order)
{
MODIFY_REG(lpuartx->CR2, USART_CR2_MSBFIRST, data_order);
}
/**
* @brief 获取 LPUART 字符大小端配置
* @param lpuartx LPUART外设
* @retval uint32_t LPUART 字符帧格式大小端配置
* @arg LPUART_DATA_ORDER_LSBFIRST
* @arg LPUART_DATA_ORDER_MSBFIRST
*/
__STATIC_INLINE uint32_t std_lpuart_get_data_order(LPUART_t *lpuartx)
{
return(lpuartx->CR2 & USART_CR2_MSBFIRST);
}
/**
* @brief LPUART 传输方向控制
* @param lpuartx LPUART外设
* @param direction 传输方向控制
* @arg LPUART_DIRECTION_NONE
* @arg LPUART_DIRECTION_SEND
* @arg LPUART_DIRECTION_RECEIVE
* @arg LPUART_DIRECTION_SEND_RECEIVE
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_transfer_direction(LPUART_t *lpuartx, uint32_t direction)
{
MODIFY_REG(lpuartx->CR1, USART_CR1_TE|USART_CR1_RE, direction);
}
/**
* @brief 获取 LPUART 传输方向控制
* @param lpuartx LPUART外设
* @retval uint32_t 传输方向
* @arg LPUART_DIRECTION_NONE
* @arg LPUART_DIRECTION_SEND
* @arg LPUART_DIRECTION_RECEIVE
* @arg LPUART_DIRECTION_SEND_RECEIVE
*/
__STATIC_INLINE uint32_t std_lpuart_get_transfer_direction(LPUART_t *lpuartx)
{
return(lpuartx->CR1 & (USART_CR1_TE|USART_CR1_RE));
}
/**
* @brief 设置LPUART 匹配字符
* @param lpuartx LPUART外设
* @param data_match 匹配字符 8bits 0~0xFF
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_data_match(LPUART_t *lpuartx, uint32_t data_match)
{
MODIFY_REG(lpuartx->CR2, USART_CR2_LPUART_CMFD, (data_match << USART_CR2_LPUART_CMFD_POS));
}
/**
* @brief LPUART 预分频寄存器配置
* @param lpuartx LPUART外设
* @param prescaler_value LPUART 预分频配置
* @arg LPUART_PRESCALER_DIV1
* @arg LPUART_PRESCALER_DIV2
* @arg LPUART_PRESCALER_DIV4
* @arg ...
* @arg LPUART_PRESCALER_DIV256
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_kclk_prescaler(LPUART_t *lpuartx, uint32_t prescaler_value)
{
MODIFY_REG(lpuartx->PRESC, USART_PRESC_PRESCALER, prescaler_value);
}
/**
* @brief 获取 LPUART 预分频值
* @param lpuartx LPUART外设
* @retval uint32_t LPUART预分频器分频值
*/
__STATIC_INLINE uint32_t std_lpuart_get_kclk_prescaler(LPUART_t *lpuartx)
{
return (uint32_t)(LPUART_PRESCALER_TABLE[(lpuartx->PRESC & USART_PRESC_PRESCALER)]);
}
/**
* @brief LPUART 从低功耗唤醒信号源选择
* @param lpuartx LPUART外设
* @param wakeup_method LPUART 通过LPWK标志唤醒的信号源选选择
* @arg LPUART_WAKEUP_ON_STARTBIT
* @arg LPUART_WAKEUP_ON_READDATA_NOTEMPTY
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_wakeup_method(LPUART_t *lpuartx, uint32_t wakeup_method)
{
MODIFY_REG(lpuartx->CR3, USART_CR3_LPWKS, wakeup_method);
}
/**
* @brief 使能LPUART Stop模式下唤醒功能
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_wakeup_enable(LPUART_t *lpuartx)
{
lpuartx->CR1 |= (USART_CR1_UEWK);
}
/**
* @brief 禁止LPUART Stop模式下唤醒功能
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_wakeup_disable(LPUART_t *lpuartx)
{
lpuartx->CR1 &= (~USART_CR1_UEWK);
}
/**
* @brief 使能 LPUART接收器
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_rx_enable(LPUART_t *lpuartx)
{
lpuartx->CR1 |= (USART_CR1_RE);
}
/**
* @brief 禁止 LPUART接收器
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_rx_disable(LPUART_t *lpuartx)
{
lpuartx->CR1 &= (~USART_CR1_RE);
}
/**
* @brief 使能 LPUART发送器
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_tx_enable(LPUART_t *lpuartx)
{
lpuartx->CR1 |= (USART_CR1_TE);
}
/**
* @brief 禁止 LPUART发送器
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_tx_disable(LPUART_t *lpuartx)
{
lpuartx->CR1 &= (~USART_CR1_TE);
}
/**
* @brief 使能 LPUART 引脚交换
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_pin_swap_enable(LPUART_t *lpuartx)
{
lpuartx->CR2 |= (USART_CR2_SWAP);
}
/**
* @brief 禁止 LPUART 引脚交换
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_pin_swap_disable(LPUART_t *lpuartx)
{
lpuartx->CR2 &= (~USART_CR2_SWAP);
}
/**
* @brief 使能 LPUART RX引脚电平反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_rx_level_invert_enable(LPUART_t *lpuartx)
{
lpuartx->CR2 |= (USART_CR2_RXIVC);
}
/**
* @brief 禁止 LPUART RX引脚电平反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_rx_level_invert_disable(LPUART_t *lpuartx)
{
lpuartx->CR2 &= (~USART_CR2_RXIVC);
}
/**
* @brief 使能 LPUART TX引脚电平反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_tx_level_invert_enable(LPUART_t *lpuartx)
{
lpuartx->CR2 |= (USART_CR2_TXIVC);
}
/**
* @brief 禁止 LPUART TX引脚电平反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_tx_level_invert_disable(LPUART_t *lpuartx)
{
lpuartx->CR2 &= (~USART_CR2_TXIVC);
}
/**
* @brief 使能 LPUART 数据极性反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_data_invert_enable(LPUART_t *lpuartx)
{
lpuartx->CR2 |= (USART_CR2_DATAIVC);
}
/**
* @brief 禁止 LPUART 数据极性反向
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_data_invert_disable(LPUART_t *lpuartx)
{
lpuartx->CR2 &= (~USART_CR2_DATAIVC);
}
/**
* @brief 使能 LPUART 单线半双工模式
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_half_duplex_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_HDEN);
}
/**
* @brief 禁止 LPUART 单线半双工模式
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_half_duplex_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_HDEN);
}
/**
* @brief 使能 LPUART DMA模式接收
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_rx_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_DMAR);
}
/**
* @brief 禁止 LPUART DMA模式接收
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_rx_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_DMAR);
}
/**
* @brief 使能 LPUART DMA模式发送
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_tx_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_DMAT);
}
/**
* @brief 禁止 LPUART DMA模式发送
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_tx_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_DMAT);
}
/**
* @brief 使能 LPUART 接收出错时禁止DMA
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_off_onrxerror_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_DDRE);
}
/**
* @brief 禁止 LPUART 接收出错时禁止DMA
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_dma_off_onrxerror_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_DDRE);
}
/**
* @brief 使能 LPUART RTS硬件流控
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_hardflow_control_rts_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_RTSE);
}
/**
* @brief 禁止 LPUART RTS硬件流控
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_hardflow_control_rts_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_RTSE);
}
/**
* @brief LPUART 硬件流控配置
* @param lpuartx LPUART外设
* @param hardflow 硬件流控控制方式
* @arg LPUART_FLOWCONTROL_NONE
* @arg LPUART_FLOWCONTROL_RTS
* @arg LPUART_FLOWCONTROL_CTS
* @arg LPUART_FLOWCONTROL_RTS_CTS
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_hardflow_control(LPUART_t *lpuartx, uint32_t hardflow)
{
MODIFY_REG(lpuartx->CR3, USART_CR3_CTSE|USART_CR3_RTSE, hardflow);
}
/**
* @brief 使能 LPUART CTS硬件流控
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_hardflow_control_cts_enable(LPUART_t *lpuartx)
{
lpuartx->CR3 |= (USART_CR3_CTSE);
}
/**
* @brief 禁止 LPUART CTS硬件流控
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_hardflow_control_cts_disable(LPUART_t *lpuartx)
{
lpuartx->CR3 &= (~USART_CR3_CTSE);
}
/**
* @brief 使能LPUART CR1寄存器中控制的中断
* @param lpuartx LPUART外设
* @param interrupt LPUART中断源选择
* @arg LPUART_CR1_INTERRUPT_RXNE
* @arg LPUART_CR1_INTERRUPT_TC
* @arg LPUART_CR1_INTERRUPT_TXE
* @arg LPUART_CR1_INTERRUPT_PE
* @arg LPUART_CR1_INTERRUPT_CM
* @retval 无
*/
__STATIC_INLINE void std_lpuart_cr1_interrupt_enable(LPUART_t *lpuartx, uint32_t interrupt)
{
lpuartx->CR1 |= (interrupt);
}
/**
* @brief 禁止LPUART CR1寄存器中控制的中断
* @param lpuartx LPUART外设
* @param interrupt LPUART中断源选择
* @arg LPUART_CR1_INTERRUPT_RXNE
* @arg LPUART_CR1_INTERRUPT_TC
* @arg LPUART_CR1_INTERRUPT_TXE
* @arg LPUART_CR1_INTERRUPT_PE
* @arg LPUART_CR1_INTERRUPT_CM
* @retval 无
*/
__STATIC_INLINE void std_lpuart_cr1_interrupt_disable(LPUART_t *lpuartx, uint32_t interrupt)
{
lpuartx->CR1 &= (~interrupt);
}
/**
* @brief 获取LPUART CR1寄存器中控制的中断使能
* @param lpuartx LPUART外设
* @param interrupt LPUART中断源选择
* @arg LPUART_CR1_INTERRUPT_RXNE
* @arg LPUART_CR1_INTERRUPT_TC
* @arg LPUART_CR1_INTERRUPT_TXE
* @arg LPUART_CR1_INTERRUPT_PE
* @arg LPUART_CR1_INTERRUPT_CM
* @retval bool 返回选择的LPUART中断源使能状态
* @arg true: 表示选择中断源使能
* @arg false: 表示选择中断源未使能
*/
__STATIC_INLINE bool std_lpuart_cr1_get_interrupt_enable(LPUART_t *lpuartx, uint32_t interrupt)
{
return ((lpuartx->CR1 & (interrupt)) == (interrupt));
}
/**
* @brief 使能LPUART CR3寄存器中控制的中断
* @param lpuartx LPUART外设
* @param interrupt LPUART中断源选择
* @arg LPUART_CR3_INTERRUPT_ERR
* @arg LPUART_CR3_INTERRUPT_CTS
* @arg LPUART_CR3_INTERRUPT_LPWK
* @retval 无
*/
__STATIC_INLINE void std_lpuart_cr3_interrupt_enable(LPUART_t *lpuartx, uint32_t interrupt)
{
lpuartx->CR3 |= (interrupt);
}
/**
* @brief 禁止LPUART CR3寄存器中控制的中断
* @param lpuartx LPUART外设
* @param interrupt LPUART中断源选择
* @arg LPUART_CR3_INTERRUPT_ERR
* @arg LPUART_CR3_INTERRUPT_CTS
* @arg LPUART_CR3_INTERRUPT_LPWK
* @retval 无
*/
__STATIC_INLINE void std_lpuart_cr3_interrupt_disable(LPUART_t *lpuartx, uint32_t interrupt)
{
lpuartx->CR3 &= (~interrupt);
}
/**
* @brief 获取LPUART CR3寄存器中中断使能
* @param lpuartx LPUART外设
* @param interrupt 使能I2C中断源选择
* @arg LPUART_CR3_INTERRUPT_ERR
* @arg LPUART_CR3_INTERRUPT_CTS
* @arg LPUART_CR3_INTERRUPT_LPWK
* @retval bool 返回选择的LPUART中断源使能状态
* @arg true: 表示选择中断源使能
* @arg false: 表示选择中断源未使能
*/
__STATIC_INLINE bool std_lpuart_cr3_get_interrupt_enable(LPUART_t *lpuartx, uint32_t interrupt)
{
return ((lpuartx->CR3 & (interrupt)) == (interrupt));
}
/**
* @brief 获取 LPUART 标志状态
* @param lpuartx LPUART外设
* @param flag LPUART标志信息
* @arg LPUART_FLAG_PE
* @arg LPUART_FLAG_FE
* @arg LPUART_FLAG_ORE
* @arg LPUART_FLAG_RXNE
* @arg LPUART_FLAG_TC
* @arg LPUART_FLAG_TXE
* @arg LPUART_FLAG_CTSIF
* @arg LPUART_FLAG_CTS
* @arg LPUART_FLAG_LPWKF
* @arg LPUART_FLAG_TEACK
* @arg LPUART_FLAG_REACK
* @arg LPUART_FLAG_BUSY
* @arg LPUART_FLAG_CM
* @arg LPUART_FLAG_LPWK
* @retval bool 返回输入标志置位状态
* @arg true 表示指定的标志置位
* @arg false表示指定的标志未置位
*/
__STATIC_INLINE bool std_lpuart_get_flag(LPUART_t *lpuartx, uint32_t flag)
{
return ((lpuartx->ISR & flag) == flag);
}
/**
* @brief 清零 LPUART 状态标志
* @param lpuartx LPUART外设
* @param clear_flag LPUART标志信息
* @arg LPUART_CLEAR_PE
* @arg LPUART_CLEAR_FE
* @arg LPUART_CLEAR_ORE
* @arg LPUART_CLEAR_TC
* @arg LPUART_CLEAR_CTS
* @arg LPUART_CLEAR_CM
* @arg LPUART_CLEAR_LPWK
* @retval 无
*/
__STATIC_INLINE void std_lpuart_clear_flag(LPUART_t *lpuartx, uint32_t clear_flag)
{
lpuartx->ICR = (clear_flag);
}
/**
* @brief LPUART 请求清空发送数据
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_request_tx_flush(LPUART_t *lpuartx)
{
lpuartx->RQR |= (USART_RQR_TXFLUQ);
}
/**
* @brief LPUART 请求清空接收数据
* @param lpuartx LPUART外设
* @retval 无
*/
__STATIC_INLINE void std_lpuart_request_rx_flush(LPUART_t *lpuartx)
{
lpuartx->RQR |= (USART_RQR_RXFLUQ);
}
/**
* @brief LPUART 获取接收数据
* @param lpuartx LPUART外设
* @retval uint32_t 接收数据
*/
__STATIC_INLINE uint32_t std_lpuart_rx_data_read(LPUART_t *lpuartx)
{
return (lpuartx->RDR & USART_RDR_RDR);
}
/**
* @brief LPUART 写入发送数据
* @param lpuartx LPUART外设
* @param data 发送数据
* @retval 无
*/
__STATIC_INLINE void std_lpuart_tx_data_write(LPUART_t *lpuartx, uint32_t data)
{
lpuartx->TDR = data;
}
/**
* @brief 写入LPUART波特率分频寄存器
* @param lpuartx LPUART外设
* @param brr_value 波特率分频值:0x300 ~ 0xFFFFF
* @retval 无
*/
__STATIC_INLINE void std_lpuart_set_brr_value(LPUART_t *lpuartx, uint32_t brr_value)
{
lpuartx->BRR = brr_value;
}
/**
* @brief 获取LPUART波特率分频寄存器
* @param lpuartx LPUART外设
* @retval uint32_t LPUART波特率分频配置值
*/
__STATIC_INLINE uint32_t std_lpuart_get_brr_value(LPUART_t *lpuartx)
{
return (lpuartx->BRR & USART_BRR_LPUART);
}
/* LPUART 初始化相关函数 */
void std_lpuart_deinit(LPUART_t *lpuartx);
std_status_t std_lpuart_init(LPUART_t *lpuartx, std_lpuart_init_t *lpuart_init_param);
std_status_t std_lpuart_set_baudrate(LPUART_t *lpuartx, uint32_t baudrate);
/* LPUART 结构体初始化相关函数 */
void std_lpuart_struct_init(std_lpuart_init_t *lpuart_init);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_LPUART_H */