HC32L17x的LL驱动库之lpuart

#ifndef HC32L1XX_LL_LPUART_H_
#define HC32L1XX_LL_LPUART_H_

#ifdef __cplusplus
extern "C" {
#endif 
	
	#include "hc32l1xx.h"
	#include "hc32l1xx_ll_bus.h"
	#include "hc32l1xx_ll_rcc.h"
	///
	
	#define LL_LPUSART_DIRECTION_TX					LPUSART_SCON_REN_TX
	#define LL_LPUSART_DIRECTION_TX_RX				USART_SCON_REN_TX_RX

	#define LL_LPUSART_DATAWIDTH_8B					0x00000000U 
	
	#define LL_LPUSART_STOPBITS_1					LPUSART_SCON_STOPBIT_1BIT 
	#define LL_LPUSART_STOPBITS_1_5					LPUSART_SCON_STOPBIT_1BIT5 
	#define LL_LPUSART_STOPBITS_2					LPUSART_SCON_STOPBIT_2BIT 

	#define LL_LPUSART_PARITY_NONE					LPUSART_SCON_B8CONT_NONE  
	#define LL_LPUSART_PARITY_EVEN					LPUSART_SCON_B8CONT_EVEN  
	#define LL_LPUSART_PARITY_ODD					LPUSART_SCON_B8CONT_ODD 

	#define LL_LPUSART_HWCONTROL_NONE				0x00000000U                          
	#define LL_LPUSART_HWCONTROL_RTS				LPUSART_SCON_RTSEN                     
	#define LL_LPUSART_HWCONTROL_CTS				LPUSART_SCON_CTSEN                     
	#define LL_LPUSART_HWCONTROL_RTS_CTS			(LPUSART_SCON_RTSEN | LPUSART_SCON_CTSEN)

	#define LL_LPUSART_OVERSAMPLING1_16				LPUSART_SCON_OVER1_16       
	#define LL_LPUSART_OVERSAMPLING1_8				LPUSART_SCON_OVER1_8      
	#define LL_LPUSART_OVERSAMPLING1_4				LPUSART_SCON_OVER1_4       
	#define LL_LPUSART_OVERSAMPLING2_32				LPUSART_SCON_OVER2_32       
	#define LL_LPUSART_OVERSAMPLING2_16				LPUSART_SCON_OVER2_16   
	#define LL_LPUSART_OVERSAMPLING2_8				LPUSART_SCON_OVER2_8   

	#define LL_LPUSART_CLK_SOURCE_PCLK				LPUSART_SCON_SCLK_PCLK	
	#define LL_LPUSART_CLK_SOURCE_XTL				LPUSART_SCON_SCLK_XTL
	#define LL_LPUSART_CLK_SOURCE_RCL				LPUSART_SCON_SCLK_RCL
	
	///
	//函		数:
	//功		能:串口使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Enable(LPUSART_TypeDef* LPUSARTx)
	{
		//SET_BIT(LPUSARTx->CR1, LPUSART_CR1_UE);
	}

	///
	//函		数:
	//功		能:串口不使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Disable(LPUSART_TypeDef* LPUSARTx)
	{
		//CLEAR_BIT(LPUSARTx->CR1, LPUSART_CR1_UE);
	}

	///
	//函		数:
	//功		能:校验串口是否使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabled(LPUSART_TypeDef* LPUSARTx)
	{
		//return (READ_BIT(LPUSARTx->CR1, LPUSART_CR1_UE) == (LPUSART_CR1_UE));
		return 0;
	}

	///
	//函		数:
	//功		能:使能接收
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_EnableDirectionRx(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_REN);
	}

	///
	//函		数:
	//功		能:不使能接收
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableDirectionRx(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_REN);
	}

	///
	//函		数:
	//功		能:设置传输方向
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_SetTransferDirection(LPUSART_TypeDef* LPUSARTx, uint32_t TransferDirection)
	{
		MODIFY_REG(LPUSARTx->SCON, LPUSART_SCON_REN, TransferDirection);
	}

	///
	//函		数:
	//功		能:获取传输方向的配置
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_GetTransferDirection(LPUSART_TypeDef* LPUSARTx)
	{
		return (uint32_t)(READ_BIT(LPUSARTx->SCON, LPUSART_SCON_REN));
	}

	///
	//函		数:
	//功		能:设置校验位
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_SetParity(LPUSART_TypeDef* LPUSARTx, uint32_t Parity)
	{
		MODIFY_REG(LPUSARTx->SCON, LPUSART_SCON_B8CONT, Parity);
	}

	///
	//函		数:
	//功		能:获取校验位
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_GetParity(LPUSART_TypeDef* LPUSARTx)
	{
		return (uint32_t)(READ_BIT(LPUSARTx->SCON, LPUSART_SCON_B8CONT));
	}

	///
	//函		数:
	//功		能:设置数据宽度
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_SetDataWidth(LPUSART_TypeDef* LPUSARTx, uint32_t DataWidth)
	{
		//MODIFY_REG(LPUSARTx->CR1, LPUSART_CR1_M, DataWidth);
	}

	///
	//函		数:
	//功		能:获取数据宽度
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_GetDataWidth(LPUSART_TypeDef* LPUSARTx)
	{
		//return (uint32_t)(READ_BIT(LPUSARTx->CR1, LPUSART_CR1_M));
		return 0;
	}

	///
	//函		数:
	//功		能:设置停止位
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_SetStopBitsLength(LPUSART_TypeDef* LPUSARTx, uint32_t StopBits)
	{
		MODIFY_REG(LPUSARTx->SCON, LPUSART_SCON_STOPBIT, StopBits);
	}

	///
	//函		数:
	//功		能:串口使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_GetStopBitsLength(LPUSART_TypeDef* LPUSARTx)
	{
		return (uint32_t)(READ_BIT(LPUSARTx->SCON, LPUSART_SCON_STOPBIT));
	}

	///
	//函		数:
	//功		能:串口使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ConfigAsyncMode(LPUSART_TypeDef* LPUSARTx)
	{

	}

	///
	//函		数:
	//功		能:串口使能
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ConfigSyncMode(LPUSART_TypeDef* LPUSARTx)
	{

	}

	///
	//函		数:
	//功		能:奇偶校验错误中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_PE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SR, LPUSART_SR_PE) == (LPUSART_SR_PE));
	}

	///
	//函		数:
	//功		能:CTS中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_CTS(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SR, LPUSART_SR_CTSIF) == (LPUSART_SR_CTSIF));
	}

	///
	//函		数:
	//功		能:帧错误中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_FE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SR, LPUSART_SR_FE) == (LPUSART_SR_FE));
	}

	///
	//函		数:
	//功		能:接收完成中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_RXNE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SR, LPUSART_SR_RC) == (LPUSART_SR_RC));
	}

	///
	//函		数:
	//功		能:发送完成中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_TC(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SR, LPUSART_SR_TC) == (LPUSART_SR_TC));
	}

	///
	//函		数:
	//功		能:发送寄存器空中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsActiveFlag_TXE(LPUSART_TypeDef* LPUSARTx)
	{
		return (uint32_t)(READ_BIT(LPUSARTx->SR, LPUSART_SR_TXE) == (LPUSART_SR_TXE));
	}

	///
	//函		数:
	//功		能:清除奇偶校验中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ClearFlag_PE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->CSR, LPUSART_CSR_PE);
	}

	///
	//函		数:
	//功		能:清除CTS中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ClearFlag_CTS(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->CSR, LPUSART_CSR_CTSIF);
	}

	///
	//函		数:
	//功		能:清除帧错误中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ClearFlag_FE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->CSR, LPUSART_CSR_FE);
	}

	///
	//函		数:
	//功		能:清除发送完成中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ClearFlag_TC(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->CSR, LPUSART_CSR_TC);
	}

	///
	//函		数:
	//功		能:清除接收完成中断标志
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_ClearFlag_RXNE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->CSR, LPUSART_CSR_RC);
	}

	///
	//函		数:
	//功		能:使能接收完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_EnableIT_RXNE(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_RCIE);
	}

	///
	//函		数:
	//功		能:使能发送完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_EnableIT_TC(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_TCIE);
	}

	///
	//函		数:
	//功		能:使能发送空中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_EnableIT_TXE(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_TXEIE);
	}

	///
	//函		数:
	//功		能:使能奇偶校验错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_EnableIT_PE(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_PEIE);
	}

	///
	//函		数:
	//功		能:使能帧错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline  void LL_LPUSART_EnableIT_CTS(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_CTSIE);
	}

	///
	//函		数:
	//功		能:使能帧错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline  void LL_LPUSART_EnableIT_FE(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_FEIE);
	}

	///
	//函		数:
	//功		能:不使能接收完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_RXNE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_RCIE);
	}

	///
	//函		数:
	//功		能:不使能发送完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_TC(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_TCIE);
	}

	///
	//函		数:
	//功		能:不使能发送空中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_TXE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_TXEIE);
	}

	///
	//函		数:
	//功		能:不使能奇偶校验错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_PE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_PEIE);
	}

	///
	//函		数:
	//功		能:不使能CTS中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_CTS(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_CTSIE);
	}

	///
	//函		数:
	//功		能:不使能帧错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_DisableIT_FE(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_FEIE);
	}

	///
	//函		数:
	//功		能:校验是否使能接收完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_RXNE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_RCIE) == (LPUSART_SCON_RCIE));
	}

	///
	//函		数:
	//功		能:校验是否使能发送完成中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_TC(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_TCIE) == (LPUSART_SCON_TCIE));
	}

	///
	//函		数:
	//功		能:校验是否使能发送空中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_TXE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_TXEIE) == (LPUSART_SCON_TXEIE));
	}

	///
	//函		数:
	//功		能:校验是否使能奇偶校验错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_PE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_PEIE) == (LPUSART_SCON_PEIE));
	}

	///
	//函		数:
	//功		能:校验是否使能CTS中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_CTS(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_CTSIE) == (LPUSART_SCON_CTSIE));
	}

	///
	//函		数:
	//功		能:校验是否使能帧错误中断
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabledIT_FE(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_FEIE) == (LPUSART_SCON_FEIE));
	}

	///
	//函		数:
	//功		能:使能接收DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Enable_DMAReq_RX(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_DMARXEN);
	}

	///
	//函		数:
	//功		能:不使能接收DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Disable_DMAReq_RX(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_DMARXEN);
	}

	///
	//函		数:
	//功		能:校验是否使能接收DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabled_DMAReq_RX(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_DMARXEN) == (LPUSART_SCON_DMARXEN));
	}

	///
	//函		数:
	//功		能:使能发送DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Enable_DMAReq_TX(LPUSART_TypeDef* LPUSARTx)
	{
		SET_BIT(LPUSARTx->SCON, LPUSART_SCON_DMATXEN);
	}

	///
	//函		数:
	//功		能:不使能发送DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_Disable_DMAReq_TX(LPUSART_TypeDef* LPUSARTx)
	{
		CLEAR_BIT(LPUSARTx->SCON, LPUSART_SCON_DMATXEN);
	}

	///
	//函		数:
	//功		能:校验是否使能发送DMA
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_IsEnabled_DMAReq_TX(LPUSART_TypeDef* LPUSARTx)
	{
		return (READ_BIT(LPUSARTx->SCON, LPUSART_SCON_DMATXEN) == (LPUSART_SCON_DMATXEN));
	}

	///
	//函		数:
	//功		能:DMA获取寄存器地址
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_DMA_GetRegAddr(LPUSART_TypeDef* LPUSARTx)
	{
		return ((uint32_t) & (LPUSARTx->SBUF));
	}

	///
	//函		数:
	//功		能:接收8BIT数据
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint8_t LL_LPUSART_ReceiveData8(LPUSART_TypeDef* LPUSARTx)
	{
		return (uint8_t)(LPUSARTx->SBUF);
	}

	///
	//函		数:
	//功		能:发送8BIT数据
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_TransmitData8(LPUSART_TypeDef* LPUSARTx, uint8_t Value)
	{
		LPUSARTx->SBUF = Value;
	}

	///
	//函		数:
	//功		能: 设置低功耗串口的传输时钟
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline void LL_LPUSART_SetClockSource(LPUSART_TypeDef* LPUSARTx, uint32_t ClockSource)
	{
		MODIFY_REG(LPUSARTx->SCON, LPUSART_SCON_SCLK, ClockSource);
	}

	///
	//函		数:
	//功		能: 获取低功耗串口传输时钟设置
	//输入参	数:
	//输出参	数:
	//说		明:
	//
	static inline uint32_t LL_LPUSART_GetClockSource(LPUSART_TypeDef* LPUSARTx)
	{
		return	(uint32_t)READ_BIT(LPUSARTx->SCON, LPUSART_SCON_SCLK);
	}

	
	//===结构体定义
	typedef struct
	{
		uint32_t BaudRate;
		uint32_t DataWidth;
		uint32_t StopBits;
		uint32_t Parity;
		uint32_t TransferDirection;
		uint32_t HardwareFlowControl;
		uint32_t OverSampling;
		uint32_t SclkFrequency;			//---时钟频率
		uint32_t SclkSource;			//---时钟远模式
	} LL_LPUSART_InitTypeDef;

	//===函数定义
	uint8_t LL_LPUSART_DeInit(LPUSART_TypeDef* LPUSARTx);
	void LL_LPUSART_StructInit(LL_LPUSART_InitTypeDef* LPUSART_InitStruct);
	uint8_t LL_LPUSART_Init(LPUSART_TypeDef* LPUSARTx, LL_LPUSART_InitTypeDef* LPUSART_InitStruct);

	///
#ifdef __cplusplus
}
#endif 

#endif /* HC32L1XX_LL_UART_H */

#include "hc32l1xx_ll_lpusart.h"

///
//函		数:
//功		能: 
//输入参	数:
//输出参	数:
//说		明:
//
uint8_t LL_LPUSART_DeInit(LPUSART_TypeDef* LPUSARTx)
{
#ifdef LPUART0
	if (LPUSARTx == LPUART0)
	{
		LL_PER0_GRP1_ForceReset(LL_PER0_GRP1_PERIPH_LPUART0);
		LL_PER0_GRP1_ReleaseReset(LL_PER0_GRP1_PERIPH_LPUART0);
		return 0;
	}
#endif

#ifdef LPUART1
	if (LPUSARTx == LPUART1)
	{
		LL_PER0_GRP1_ForceReset(LL_PER0_GRP1_PERIPH_LPUART1);
		LL_PER0_GRP1_ReleaseReset(LL_PER0_GRP1_PERIPH_LPUART1);
		return 0;
	}
#endif
	return 0;
}

///
//函		数: 
//功		能: 
//输入参	数: 
//输出参	数: 
//说		明: 
//
void LL_LPUSART_StructInit(LL_LPUSART_InitTypeDef* LPUSART_InitStruct)
{
	//---波特率
	LPUSART_InitStruct->BaudRate = 9600;
	LPUSART_InitStruct->DataWidth = LL_LPUSART_DATAWIDTH_8B;
	LPUSART_InitStruct->StopBits = LL_LPUSART_STOPBITS_1;
	LPUSART_InitStruct->Parity = LL_LPUSART_PARITY_NONE;
	LPUSART_InitStruct->TransferDirection = LL_LPUSART_DIRECTION_TX_RX;
	LPUSART_InitStruct->HardwareFlowControl = LL_LPUSART_HWCONTROL_NONE;
	LPUSART_InitStruct->OverSampling = LL_LPUSART_OVERSAMPLING1_16;
	LPUSART_InitStruct->SclkFrequency = LSI_VALUE;
	LPUSART_InitStruct->SclkSource = LL_LPUSART_CLK_SOURCE_RCL;
}

///
//函		数:
//功		能: 初始化串口,只支持HC32的串口模式1和模式3
//输入参	数:
//输出参	数:
//说		明:
//
uint8_t LL_LPUSART_Init(LPUSART_TypeDef* LPUSARTx, LL_LPUSART_InitTypeDef* LPUSART_InitStruct)
{
	uint32_t scon = 0;
	double scnt = 0.0f;
	//---硬件流控制
	scon |= LPUSART_InitStruct->HardwareFlowControl;
	//---停止位
	scon |= LPUSART_InitStruct->StopBits;
	//---过采样率
	scon |= LPUSART_InitStruct->OverSampling;
	//---工作模式1和3,工作模式1可以无校验位
	if (LPUSART_InitStruct->Parity == LL_LPUSART_PARITY_NONE)
	{
		//---工作模式为模式1
		scon |= LPUSART_SCON_SM_MODE1;
	}
	else
	{
		//---工作模式为模式3
		scon |= LPUSART_SCON_SM_MODE3;
	}
	//---收发控制
	scon |= LPUSART_InitStruct->TransferDirection;
	//---奇偶校验
	scon |= LPUSART_InitStruct->Parity;
	//---SCLK的时钟来源
	scon |= LPUSART_InitStruct->SclkSource;
	//---将数据写入寄存器器
	WRITE_REG(LPUSARTx->SCON, scon);
	//---设置波特率
	if (LPUSART_InitStruct->OverSampling == LL_LPUSART_OVERSAMPLING1_16)
	{
		scon = 16;
	}
	else if (LPUSART_InitStruct->OverSampling == LL_LPUSART_OVERSAMPLING1_8)
	{
		scon = 8;
	}
	else
	{
		scon = 4;
	}
	//---计算波特率
	scnt = (double)(LPUSART_InitStruct->SclkFrequency) / scon;
	scnt /= LPUSART_InitStruct->BaudRate;
	//---将数据写入寄存器
	WRITE_REG(LPUSARTx->SCNT, (uint16_t)(float)(scnt + 0.5f));
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值