QQT912/CW32F030/原项目程序/SW/Libraries/inc/cw32f030_uart.h

292 lines
12 KiB
C
Raw Normal View History

/*******************************************************************************
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* <EFBFBD>人<EFBFBD><EFBFBD>Դ<EFBFBD>뵼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ר<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD>ܡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD>ܱ<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD>κη<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>人<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򿪷<EFBFBD><EFBFBD>̺͹<EFBFBD>Ӧ<EFBFBD>̶Գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD>ı<EFBFBD>֤
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>人<EFBFBD><EFBFBD>Դ<EFBFBD>뵼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򿪷<EFBFBD><EFBFBD>̻<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD>䷢<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD>𻵣<EFBFBD>ֱ<EFBFBD>ӵġ<EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>𺦣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𺦣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD>ڿɽ<EFBFBD>ʡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
* ijЩ˾<EFBFBD><EFBFBD>Ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κε<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijЩ<EFBFBD><EFBFBD>
* ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD>ܲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __CW32F030_UART_H
#define __CW32F030_UART_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "cw32f030.h"
/******************************************************************************
* type definitions ('typedef')
******************************************************************************/
/**
* @brief USART Init Structure definition
*/
typedef struct
{
uint32_t USART_BaudRate; /*!< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>㹫ʽ:
- USART_Over = 00<EFBFBD><EFBFBD> BaudRate = UCLK / (16 * BRRI + BRRF)
- USART_Over = 01<EFBFBD><EFBFBD> BaudRate = UCLK / (8 * BRRI)
- USART_Over = 10<EFBFBD><EFBFBD> BaudRate = UCLK / (4 * BRRI)
- USART_Over = 11<EFBFBD><EFBFBD> BaudRate = (256 * UCLK) / BRRI */
uint16_t USART_Over; /*!< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Over */
uint16_t USART_Source; /*!< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ԴUCLK
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Source */
uint32_t USART_UclkFreq; /*!< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>UCLKƵ<4B><C6B5> Hz */
uint16_t USART_StartBit; /*!< <20><>ʼλ<CABC>ж<EFBFBD><D0B6><EFBFBD>ʽ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Start_Bit */
uint16_t USART_StopBits; /*!< ֹͣλ<D6B9><CEBB><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Stop_Bits */
uint16_t USART_Parity; /*!< У<>鷽ʽ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Parity
@note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>Ϊ8λ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ9λ */
uint16_t USART_Mode; /*!< <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Mode */
uint16_t USART_HardwareFlowControl; /*!< Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Hardware_Flow_Control */
} USART_InitTypeDef;
/**
* @brief USART Clock Init Structure definition
*/
typedef struct
{
uint16_t USART_Clock; /*!< USARTͬ<54><CDAC>ģʽʹ<CABD><CAB9>/ʧ<><CAA7>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Clock */
uint16_t USART_Source; /*!< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ԴUCLK
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ @ref USART_Source */
} USART_ClockInitTypeDef;
/******************************************************************************
* pre-processor symbols/macros ('#define')
******************************************************************************/
/** @defgroup USART_Over
* @{
*/
#define USART_Over_16 ((uint16_t)0x0000)
#define USART_Over_8 ((uint16_t)0x0200)
#define USART_Over_4 ((uint16_t)0x0400)
#define USART_Over_sp ((uint16_t)0x0600)
#define IS_USART_Over(Over) (((Over) == USART_Over_16) || \
((Over) == USART_Over_8) || \
((Over) == USART_Over_4) || \
((Over) == USART_Over_sp))
/** @defgroup USART_Source
* @{
*/
#define USART_Source_PCLK ((uint16_t)0x0000)
#define USART_Source_LSE ((uint16_t)0x0200)
#define USART_Source_LSI ((uint16_t)0x0300)
#define IS_USART_Source(Source) (((Source) == USART_Source_PCLK) || \
((Source) == USART_Source_LSE) || \
((Source) == USART_Source_LSI))
/** @defgroup USART_Start_Bit
* @{
*/
#define USART_StartBit_FE ((uint16_t)0x0000) //RXD<58>½<EFBFBD><C2BD><EFBFBD>
#define USART_StartBit_LL ((uint16_t)0x0100) //RXD<58>͵<EFBFBD>ƽ
#define IS_USART_StartBit(StartBit) (((StartBit) == USART_StartBit_FE) || \
((StartBit) == USART_StartBit_LL))
/** @defgroup USART_Stop_Bits
* @{
*/
#define USART_StopBits_1 ((uint16_t)0x0000)
#define USART_StopBits_2 ((uint16_t)0x0020)
#define USART_StopBits_1_5 ((uint16_t)0x0010)
#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \
((STOPBITS) == USART_StopBits_2) || \
((STOPBITS) == USART_StopBits_1_5))
/** @defgroup USART_Parity
* @{
*/
#define USART_Parity_No ((uint16_t)0x0000)
#define USART_Parity_Even ((uint16_t)0x0008)
#define USART_Parity_Odd ((uint16_t)0x000C)
#define USART_Parity_User ((uint16_t)0x0004)
#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \
((PARITY) == USART_Parity_Even) || \
((PARITY) == USART_Parity_Odd) || \
((PARITY) == USART_Parity_User))
/** @defgroup USART_Mode
* @{
*/
#define USART_Mode_Tx ((uint16_t)0x0001)
#define USART_Mode_Rx ((uint16_t)0x0002)
#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFFC) == 0x00) && ((MODE) != (uint16_t)0x00))
/** @defgroup USART_Hardware_Flow_Control
* @{
*/
#define USART_HardwareFlowControl_None ((uint16_t)0x0000)
#define USART_HardwareFlowControl_RTS ((uint16_t)0x0008)
#define USART_HardwareFlowControl_CTS ((uint16_t)0x0004)
#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x000C)
#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\
(((CONTROL) == USART_HardwareFlowControl_None) || \
((CONTROL) == USART_HardwareFlowControl_RTS) || \
((CONTROL) == USART_HardwareFlowControl_CTS) || \
((CONTROL) == USART_HardwareFlowControl_RTS_CTS))
/** @defgroup USART_Clock
* @{
*/
#define USART_Clock_Disable ((uint16_t)0x0000)
#define USART_Clock_Enable ((uint16_t)0x0040)
#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \
((CLOCK) == USART_Clock_Enable))
/** @defgroup USART_EN
* @{
*/
#define USART_EN_Tx ((uint16_t)0x0001)
#define USART_EN_Rx ((uint16_t)0x0002)
#define IS_USART_TxRxEN(USART_EN) ((((USART_EN) & (uint16_t)0xFFFC) == 0x00) && ((USART_EN) != (uint16_t)0x00))
/** @defgroup USART_INV
* @{
*/
#define USART_INV_Tx ((uint16_t)0x0020)
#define USART_INV_Rx ((uint16_t)0x0010)
#define IS_USART_TxRxINV(USART_INV) ((((USART_INV) & (uint16_t)0xFFCF) == 0x00) && ((USART_INV) != (uint16_t)0x00))
/** @defgroup USART_DMA_Requests
* @{
*/
#define USART_DMAReq_Tx ((uint16_t)0x0080)
#define USART_DMAReq_Rx ((uint16_t)0x0040)
#define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00))
/** @defgroup USART_Interrupt
* @{
*/
#define USART_IT_CTS ((uint16_t)0x0040)
#define USART_IT_PE ((uint16_t)0x0010)
#define USART_IT_FE ((uint16_t)0x0008)
#define USART_IT_RC ((uint16_t)0x0004)
#define USART_IT_TC ((uint16_t)0x0002)
#define USART_IT_TXE ((uint16_t)0x0001)
#define IS_USART_IT(IT) ((((IT) & (uint16_t)0xFFA0) == 0x00) && ((IT) != (uint16_t)0x00))
#define IS_USART_CLEAR_IT(IT) ((((IT) & (uint16_t)0xFFA1) == 0x00) && ((IT) != (uint16_t)0x00))
/** @defgroup USART_Flags
* @{
*/
#define USART_FLAG_TXBUSY ((uint16_t)0x0100)
#define USART_FLAG_CTSLV ((uint16_t)0x0080)
#define USART_FLAG_CTS ((uint16_t)0x0040)
#define USART_FLAG_MATCH ((uint16_t)0x0020)
#define USART_FLAG_PE ((uint16_t)0x0010)
#define USART_FLAG_FE ((uint16_t)0x0008)
#define USART_FLAG_RC ((uint16_t)0x0004)
#define USART_FLAG_TC ((uint16_t)0x0002)
#define USART_FLAG_TXE ((uint16_t)0x0001)
#define IS_USART_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFE00) == 0x00) && ((FLAG) != (uint16_t)0x00))
#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFA1) == 0x00) && ((FLAG) != (uint16_t)0x00))
#define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) <= 0x00F42400))
#define IS_USART_UCLKFREQ(UCLKFREQ) (((UCLKFREQ) > 0) && ((UCLKFREQ) <= 0x03D09000))
#define IS_USART_DATA_16BIT(DATA) ((DATA) <= 0x1FF)
#define IS_USART_DATA_8BIT(DATA) ((DATA) <= 0xFF)
#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xFF)
#define IS_USART_ADDRESSMSK(ADDRESSMSK) ((ADDRESSMSK) <= 0xFF)
#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == CW_UART1) || \
((PERIPH) == CW_UART2) || \
((PERIPH) == CW_UART3))
/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/
/******************************************************************************
* Global function prototypes
******************************************************************************/
/* <20><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD> */
void USART_SendData(UART_TypeDef* UARTx, uint16_t Data);
void USART_SendData_8bit(UART_TypeDef* UARTx, uint8_t Data);
uint16_t USART_ReceiveData(UART_TypeDef* USARTx);
uint8_t USART_ReceiveData_8bit(UART_TypeDef* USARTx);
/* <20><>ʼ<EFBFBD><CABC> */
void USART_Init(UART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
void USART_ClockInit(UART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);
void UART1_DeInit(void);
void UART2_DeInit(void);
void UART3_DeInit(void);
/* <20>жϼ<D0B6><CFBC><EFBFBD>־ */
void USART_ITConfig(UART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
ITStatus USART_GetITStatus(UART_TypeDef* USARTx, uint16_t USART_IT);
void USART_ClearITPendingBit(UART_TypeDef* USARTx, uint16_t USART_IT);
FlagStatus USART_GetFlagStatus(UART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearFlag(UART_TypeDef* USARTx, uint16_t USART_FLAG);
/* <20><><EFBFBD>ͺͽ<CDBA><CDBD>տ<EFBFBD><D5BF><EFBFBD> */
void USART_TxRxEN(UART_TypeDef* USARTx, uint16_t USART_EN, FunctionalState NewState);
void USART_TxRxINV(UART_TypeDef* USARTx, uint16_t USART_INV, FunctionalState NewState);
/* <20><>˫<EFBFBD><CBAB>ͨ<EFBFBD><CDA8> */
void USART_HalfDuplexCmd(UART_TypeDef* USARTx, FunctionalState NewState);
/* DMA */
void USART_DMACmd(UART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);
/* <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> */
void USART_SetMultiMode(UART_TypeDef* USARTx, uint8_t USART_Address, uint8_t USART_AddressMsK);
#ifdef __cplusplus
}
#endif
#endif /*__CW32F030_UART_H */
/**
* @}
*/