USART 庫函數
No 函數名 描述
1 USART_DeInit 將外設USARTx寄存器重設為啟始值
2 USART_Init 根據USART_InitStruct中指定的參數初始化外設USARTx寄存器
3 USART_StructInit 把USART_InitStruct中的每一個參數按啟始值填入
4 USART_Cmd 使能或失能USART外設
5 USART_ITConfig 使能或失能指定的USART中斷
6 USART_DMACmd 使能或者失能指定USART的DMA請求
7 USART_SetAddress 設置USART節點的地址
8 USART_WakeUpConfig 選擇USART的喚醒方式
9 USART_ReceiverWakeUpCmd 檢查USART是否處於靜默模式
10 USART_LINBreakDetectLengthConfig 設置USART LIN中斷檢測長度
11 USART_LINCmd 使能或失能USARTx的LIN模式
12 USART_SendData 通過外設USARTx發送單個資料
13 USART_ReceiveData 返回USARTx最近接收到的資料
14 USART_SendBreak 發送中斷字
15 USART_SetGuardTime 設置指定的USART保護時間
16 USART_SetPrescaler 設置USART時鐘預分頻
17 USART_SmartCardCmd 使能或失能指定USART的智慧卡模式
18 USART_SmartCardNackCmd 使能或失能NACK傳輸
19 USART_HalfDuplexCmd 使能或失能USART半雙工模式
20 USART_IrDAConfig 設置USART IrDA模式
21 USART_IrDACmd 使能或失能USART IrDA模式
22 USART_GetFlagStatus 檢查指定的USART標誌位元設置與否
23 USART_ClearFlag 清除USARTx的待處理標誌位元
24 USART_GetITStatus 檢查指定的USART中斷發生與否
25 USART_ClearITPendingBit 清除USARTx的中斷待處理位
26 USART_ClockInit USART時鐘配置
27 USART_ClockStructInit USART時鐘結構體啟始值初始化
21 通用同步非同步收發器( USART)
通用同步非同步收發器(USART)提供了一種靈活的方法來與使用工業標準NRZ 非同步串行資料格式的外部設備之間進行全雙工資料交換。USART利用分數波特率發生器提供寬範圍的波特率選擇。它支援同步單向通信和半雙工單線通信。它也支援LIN(局部互連網),智慧卡協定和IrDA(紅外資料組織)SIR ENDEC 規範,以及數據機(CTS/RTS)操作。它還允許多處理器通信。使用多緩衝器配置的DMA方式,可以實現高速資料通信。
Section 21.1 USART寄存器結構描述了固件函式程式庫所使用的資料結構,Section 21.2 固件庫函數介紹了函式程式庫裡的所有函數。
21.1 USART寄存器結構
USART寄存器結構,USART_TypeDeff,在檔stm32f0x_map.h中定義如下:
typedef struct
{
vu16 SR;
u16 RESERVED1;
vu16 DR;
u16 RESERVED2;
vu16 BRR;
u16 RESERVED3;
vu16 CR1;
u16 RESERVED4;
vu16 CR2;
u16 RESERVED5;
vu16 CR3;
u16 RESERVED6;
vu16 GTPR;
u16 RESERVED7;
}USART_TypeDef;
Table 704.例舉了USART 所有寄存器 Table 704. USART 寄存器
寄存器 描述
SR USART狀態寄存器
DR USART資料寄存器
BRR USART串列傳輸速率寄存器
CR1 USART控制寄存器1
CR2 USART控制寄存器2
CR3 USART控制寄存器3
GTPR USART保護時間和預分頻寄存器
3 個USART外設聲明於檔:
...
#define PERIPH_BASE ((u32)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)
#define USART2_BASE (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE (APB1PERIPH_BASE + 0x4800)
#ifndef DEBUG
...
#ifdef _USART1
#define USART1 ((USART_TypeDef *) USART1_BASE)
#endif /*_USART1 */
#ifdef _USART2
#define USART2 ((USART_TypeDef *) USART2_BASE)
#endif /*_USART2 */
#ifdef _USART3
#define USART3 ((USART_TypeDef *) USART3_BASE)
#endif /*_USART3 */
...
#else /* DEBUG */
...
#ifdef _USART1
EXT USART_TypeDef *USART1;
#endif /*_USART1 */
#ifdef _USART2
EXT USART_TypeDef *USART2;
#endif /*_USART2 */
#ifdef _USART3
EXT USART_TypeDef *USART3;
#endif /*_USART3 */
...
#endif
使用Debug模式時,初始化指標USART1, USART2 和USART3於文件stm2f10x_lib.c :
...
#ifdef _USART1
USART1 = (USART_TypeDef *) USART1_BASE;
#endif /*_USART1 */
#ifdef _USART2
USART2 = (USART_TypeDef *) USART2_BASE;
#endif /*_USART2 */
#ifdef _USART3
USART3 = (USART_TypeDef *) USART3_BASE;
#endif /*_USART3 */
...
為了訪問USART 寄存器,_USART,_USART1, _USART2和_USART3必須在檔中定義如下:
...
#define _USART
#define _USART1 #define _USART2 #define _USART3
21.2 USART庫函數
USART庫函數【見首頁】。
【01】函數USART_DeInit
Table 706. 函數 USART_DeInit
函數名 USART_DeInit
函數原形 void USART_DeInit(USART_TypeDef* USARTx)
功能描述 將外設USARTx寄存器重設為缺省值
輸入參數 USARTx:x可以是1/2/3,來選擇USART 外設
輸出參數 無
返回值 無
先決條件 無
被調用函數 RCC_APB2PeriphResetCmd()
RCC_APB1PeriphResetCmd()
例:
/* Resets the USART1 registers to their default reset value */
USART_DeInit(USART1);
函數原型如下:
void USART_DeInit(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));//三個USART,兩個UART
switch (*(u32*)&USARTx)
{
case USART1_BASE:
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
break;
case USART2_BASE:
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
break;
case USART3_BASE:
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
break;
case UART4_BASE:
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
break;
case UART5_BASE:
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
break;
default:
break;
}
}
【02】函數USART_Init
Table 707. 函數 USART_Init
函數名 USART_Init
函數原形 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
功能描述 根據USART_InitStruct中指定的參數初始化外設USARTx寄存器
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_InitStruct:指向結構USART_InitTypeDef的指標,包含了外設USART的配置資訊。
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_InitTypeDef structure
USART_InitTypeDef 定義於檔stm2f10x_usart.h :
typedef struct
{
u32 USART_BaudRate;
u16 USART_WordLength;
u16 USART_StopBits;
u16 USART_Parity;
u16 USART_HardwareFlowControl;
u16 USART_Mode;
u16 USART_Clock;
u16 USART_CPOL;
u16 USART_CPHA;
u16 USART_LastBit;
}USART_InitTypeDef;
Table 708. 描述了結構USART_InitTypeDef 在同步和非同步模式下使用的不同成員。
Table 708. USART_InitTypeDef成員USART 模式對比
成員 非同步模式 同步模式
USART_BaudRate X X
USART_WordLength X X
USART_StopBits X X
USART_Parity X X
USART_HardwareFlowControl X X
USART_Mode X X
USART_Clock X
USART_CPOL X
USART_CPHA X
USART_LastBit X
USART_BaudRate
USART_BaudRate:該成員設置了 USART傳輸的串列傳輸速率,串列傳輸速率可以由以下公式計算:
IntegerDivider = ((APBClock) / (16 * (USART_InitStruct->USART_BaudRate)))
FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5
其取值範圍為:0 < BaudRate < 0x0044AA21
USART_WordLength :提示了在一個幀中傳輸或者接收到的資料位元數。
Table 709. USART_WordLength 定義
USART_WordLength 描述
USART_WordLength_8b 8位元數據 0x0000
USART_WordLength_9b 9位元數據 0x1000
USART_StopBits: 定義了發送的停止位元數目。Table 710. 給出了該參數可取的值。
Table 710. USART_StopBits 定義
USART_StopBits 描述
USART_StopBits_1 在幀結尾傳輸1個停止位 0x0000
USART_StopBits_0.5 在幀結尾傳輸0.5個停止位 0x1000
USART_StopBits_2 在幀結尾傳輸2個停止位 0x2000
USART_StopBits_1.5 在幀結尾傳輸1.5個停止位 0x3000
USART_Parity: 定義了奇偶模式。
Table 711. USART_Parity 定義
USART_Parity 描述
USART_Parity_No 奇偶失能 0x0000
USART_Parity_Even 偶模式 0x0400
USART_Parity_Odd 奇模式 0x0600
注意:同位一旦使能,在發送資料的MSB位元插入經計算的奇偶位(字長9位時的第9位,字長8位時的第8位)。
USART_HardwareFlowControl:指定了硬體流控制模式使能還是失能。
Table 712. USART_HardwareFlowControl 定義
USART_HardwareFlowControl 描述
USART_HardwareFlowControl_None 硬體流控制失能 0x0000
USART_HardwareFlowControl_RTS 發送請求RTS使能 0x0100
USART_HardwareFlowControl_CTS 清除發送CTS使能 0x0200
USART_HardwareFlowControl_RTS_CTS RTS和CTS使能 0x0300
USART_Mode :指定了使能或者失能發送和接收模式。
Table 713. USART_Mode 定義
USART_Mode 描述
USART_Mode_Rx 接收使能 0x0004
USART_Mode_Tx 發送使能 0x0008
USART_CLOCK :提示了 USART 時鐘使能還是失能。
Table 714. USART_CLOCK定義
USART_CLOCK 描述
USART_Clock_Enable 時鐘高電平活動 0x0800
USART_Clock_Disable 時鐘低電平活動 0x0000
USART_CPOL: 指定了下 SLCK 引腳上時鐘輸出的極性。
Table 715. USART_CPOL 定義
USART_CPOL 描述
USART_CPOL_High 時鐘高電平 0x0400
USART_CPOL_Low 時鐘低電平 0x0000
USART_CPHA: 指定了下 SLCK 引腳上時鐘輸出的相位,和 CPOL 位一起配合來產生使用者希望的時鐘/資料的採樣關係。
Table 716. USART_CPHA 定義
USART_CPHA 描述
USART_CPHA_1Edge 時鐘第一個邊沿進行資料捕獲 0x0000
USART_CPHA_2Edge 時鐘第二個邊沿進行資料捕獲 0x0200
USART_LastBit :來控制是否在同步模式下,在 SCLK 引腳上輸出最後發送的那個資料字 (MSB) 對應的時鐘脈衝。
Table 717. USART_LastBit 定義
USART_LastBit 描述
USART_LastBit_Disable 最後一位元資料的時鐘脈衝不從SCLK輸出 0x0000
USART_LastBit_Enable 最後一位元資料的時鐘脈衝從SCLK輸出 0x0100
例:
/* The following example illustrates how to configure the USART1 */
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_Odd;
USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_RTS_CTS;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStructure.USART_Clock = USART_Clock_Disable;
USART_InitStructure.USART_CPOL = USART_CPOL_High;
USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;
USART_InitStructure.USART_LastBit = USART_LastBit_Enable;
USART_Init(USART1, &USART_InitStructure);
函數原型如下:
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
{
u32 tmpreg = 0x00, apbclock = 0x00;
u32 integerdivider = 0x00;
u32 fractionaldivider = 0x00;
u32 usartxbase = 0;
RCC_ClocksTypeDef RCC_ClocksStatus;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));
assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));
assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));
assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));
assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));
assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));
/* The hardware flow control is available only for USART1, USART2 and USART3 */
assert_param(IS_USART_PERIPH_HFC(USARTx, USART_InitStruct->USART_HardwareFlowControl));
usartxbase = (*(u32*)&USARTx);
/*---------------------------- USART CR2 Configuration -----------------------*/
tmpreg = USARTx->CR2;
/* Clear STOP[13:12] bits */
tmpreg &= CR2_STOP_CLEAR_Mask;
/* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
/* Set STOP[13:12] bits according to USART_StopBits value */
tmpreg |= (u32)USART_InitStruct->USART_StopBits;
/* Write to USART CR2 */
USARTx->CR2 = (u16)tmpreg;
/*---------------------------- USART CR1 Configuration -----------------------*/
tmpreg = USARTx->CR1;
/* Clear M, PCE, PS, TE and RE bits */
tmpreg &= CR1_CLEAR_Mask;
/* Configure the USART Word Length, Parity and mode ----------------------- */
/* Set the M bits according to USART_WordLength value */
/* Set PCE and PS bits according to USART_Parity value */
/* Set TE and RE bits according to USART_Mode value */
tmpreg |= (u32)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
USART_InitStruct->USART_Mode;
/* Write to USART CR1 */
USARTx->CR1 = (u16)tmpreg;
/*---------------------------- USART CR3 Configuration -----------------------*/
tmpreg = USARTx->CR3;
/* Clear CTSE and RTSE bits */
tmpreg &= CR3_CLEAR_Mask;
/* Configure the USART HFC -------------------------------------------------*/
/* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
/* Write to USART CR3 */
USARTx->CR3 = (u16)tmpreg;
/*---------------------------- USART BRR Configuration -----------------------*/
/* Configure the USART Baud Rate -------------------------------------------*/
RCC_GetClocksFreq(&RCC_ClocksStatus);
if (usartxbase == USART1_BASE)
{
apbclock = RCC_ClocksStatus.PCLK2_Frequency;
}
else
{
apbclock = RCC_ClocksStatus.PCLK1_Frequency;
}
/* Determine the integer part */
integerdivider = ((0x19 * apbclock) / (0x04 * (USART_InitStruct->USART_BaudRate)));
tmpreg = (integerdivider / 0x64) << 0x04;
/* Determine the fractional part */
fractionaldivider = integerdivider - (0x64 * (tmpreg >> 0x04));
tmpreg |= ((((fractionaldivider * 0x10) + 0x32) / 0x64)) & ((u8)0x0F);
/* Write to USART BRR */
USARTx->BRR = (u16)tmpreg;
}
【03】函數USART_StructInit
Table 718. 函數 USART_StructInit
函數名 USART_StructInit
函數原形 void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
功能描述 把USART_InitStruct中的每一個參數按缺省值填入
輸入參數 USART_InitStruct:指向結構USART_InitTypeDef的指標,待初始化
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
Table 719. 給出了USART_InitStruct 各個成員的缺省值
Table 719. USART_InitStruct 缺省值(#define Val 參看函數【2】)
成員 缺省值 #define Val
USART_BaudRate 9600
USART_WordLength USART_WordLength_8b
USART_StopBits USART_StopBits_1
USART_Parity USART_Parity_No
USART_HardwareFlowControl USART_HardwareFlowControl_None
USART_Mode USART_Mode_Rx | USART_Mode_Tx
USART_Clock USART_Clock_Disable
USART_CPOL USART_CPOL_Low
USART_CPHA USART_CPHA_1Edge
USART_LastBit USART_LastBit_Disable
例:
/* The following example illustrates how to initialize a
USART_InitTypeDef structure */
USART_InitTypeDef USART_InitStructure;
USART_StructInit(&USART_InitStructure);
函數原型如下:
void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
{
/* USART_InitStruct members default value */
USART_InitStruct->USART_BaudRate = 9600;
USART_InitStruct->USART_WordLength = USART_WordLength_8b;
USART_InitStruct->USART_StopBits = USART_StopBits_1;
USART_InitStruct->USART_Parity = USART_Parity_No ;
USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;
}
【04】函數USART_Cmd
Table 720. 函數 USART_Cmd
函數名 USART_ Cmd
函數原形 void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
功能描述 使能或失能USART外設
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 NewState: 外設USARTx的新狀態(ENABLE或DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
函數原型如下:
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the selected USART by setting the UE bit in the CR1 register */
USARTx->CR1 |= CR1_UE_Set;
}
else
{
/* Disable the selected USART by clearing the UE bit in the CR1 register */
USARTx->CR1 &= CR1_UE_Reset;
}
}
【05】函數USART_ITConfig
Table 721. 函數 USART_ITConfig
函數名 USART_ITConfig
函數原形 void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
功能描述 使能或失能指定的USART中斷
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_IT:待使能或者失能的USART中斷源
輸入參數 3 NewState:USARTx 中斷的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_IT:輸入參數 USART_IT 使能或者失能 USART 的中斷。可以取下表的一個或者多個取值的組合作為該參數的值。
Table 722. USART_IT 值
Bit USART_IT 描述 #define #Val>>5 #Val的意義
9 USART_IT_CTS CTS中斷 0x096A 受控於CR3.bitA 黑體部分表示IT標誌在SR中的位置;
藍色部分(>>5的結果)表示IT是由哪個CRx控制的;
綠色部分表示IT在CRx中的第N位。
8 USART_IT_LBD LIN中斷檢測中斷 0x0846 受控於CR2.bit6
7 USART_IT_TXE 發送中斷 0x0727 受控於CR1.bit7-4
6 USART_IT_TC 傳輸完成中斷 0x0626
5 USART_IT_RXNE 接收中斷 0x0525
4 USART_IT_IDLE 空閒匯流排中斷 0x0424
3 USART_IT_ORE 超載錯誤 0x0360 受控於CR3.bit0
2 USART_IT_NE 雜訊錯誤 0x0260
1 USART_IT_FE 幀錯誤錯誤 0x0160
0 USART_IT_PE 奇偶錯誤中斷 0x0028 受控於CR1.bit8
* USART_IT_ERR 錯誤中斷 0x0060 CR3.bit0,控制SR.ORE\NE\FE
例:
/* Enables the USART1 transmit interrupt */
USART_ITConfig(USART1, USART_IT_Transmit ENABLE);
函數原型如下:
void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
{
u32 usartreg = 0x00, itpos = 0x00, itmask = 0x00;
u32 usartxbase = 0x00;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CONFIG_IT(USART_IT));
assert_param(IS_USART_PERIPH_IT(USARTx, USART_IT));/* The CTS interrupt is not available for UART4 and UART5 */
assert_param(IS_FUNCTIONAL_STATE(NewState));
usartxbase = (*(u32*)&(USARTx));
/* Get the USART register index */
usartreg = (((u8)USART_IT) >> 0x05);
/* Get the interrupt position */
itpos = USART_IT & IT_Mask;//IT_Mask = 0x001F
itmask = (((u32)0x01) << itpos);
if (usartreg == 0x01) /* The IT is in CR1 register */
{
usartxbase += 0x0C;//CR1的偏移位址
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
usartxbase += 0x10; //CR2的偏移位址
}
else /* The IT is in CR3 register */
{
usartxbase += 0x14; //CR3的偏移位址
}
if (NewState != DISABLE)
{
*(vu32*)usartxbase |= itmask;//控制CRx上的中斷允許位。
}
else
{
*(vu32*)usartxbase &= ~itmask;
}
}
【06】函數USART_DMACmd
Table 723. 函數 USART_DMACmd
函數名 USART_ DMACmd
函數原形 USART_DMACmd(USART_TypeDef* USARTx, FunctionalState NewState)
功能描述 使能或失能指定USART的DMA請求
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_DMAreq:指定DMA請求
輸入參數 3 NewState: USARTx DMA請求源的新狀態(ENABLE 或DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_DMAreq:選擇待使能或者失能的DMA請求。
Table 724. USART_LastBit 值
USART_DMAreq 描述
USART_DMAReq_Tx 發送DMA請求 0x0080
USART_DMAReq_Rx 接收DMA請求 0x0040
例:
/* Enable the DMA transfer on Rx and Tx action for USART2 */
USART_DMACmd(USART2, USART_DMAReq_Rx | USART_DMAReq_Tx, ENABLE);
函數原型如下:
void USART_DMACmd(USART_TypeDef* USARTx, u16 USART_DMAReq, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_1234_PERIPH(USARTx));
assert_param(IS_USART_DMAREQ(USART_DMAReq));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the DMA transfer for selected requests by setting the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 |= USART_DMAReq;
}
else
{
/* Disable the DMA transfer for selected requests by clearing the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 &= (u16)~USART_DMAReq;
}
}
【07】函數USART_SetAddress
Table 725. 函數 USART_SetAddress
函數名 USART_SetAddress
函數原形 void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
功能描述 設置USART節點的地址
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_Address:提示USART節點的地址。
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Sets the USART2 address node to 0x5 */
USART_SetAddress(USART2, 0x5);
函數原型如下:
void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_ADDRESS(USART_Address)); //#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF)
/* Clear the USART address */
USARTx->CR2 &= CR2_Address_Mask;
/* Set the USART address node */
USARTx->CR2 |= USART_Address;
}
21.2.8 【08】函數USART_WakeUpConfig
Table 726. 函數 USART_WakeUpConfig
函數名 USART_WakeUpConfig
函數原形 void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
功能描述 選擇USART的喚醒方式
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_WakeUp:USART的喚醒方式
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_WakeUp: 選擇USART 的喚醒方式。Table 727. 給出了該參數可取的值。
Table 727. USART_WakeUp 值
USART_WakeUp 描述
USART_WakeUp_IdleLine 空閒匯流排喚醒 0x0000
USART_WakeUp_AddressMark 位址標記喚醒 0x0800
例:
/* Selects the IDLE Line as USART1 WakeUp */
USART_WakeUpConfig(USART1, USART_WakeUpIdleLine);
函數原型如下:
void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_WAKEUP(USART_WakeUp));
USARTx->CR1 &= CR1_WAKE_Mask;
USARTx->CR1 |= USART_WakeUp;
}
21.2.9 【09】函數USART_ReceiverWakeUpCmd
Table 728. 函數 USART_ReceiverWakeUpCmd
函數名 USART_ReceiverWakeUpCmd
函數原形 void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 檢查USART是否處於靜默模式
輸入參數 1 USARTx :x=1/2/3,來選擇USART外設
輸入參數 2 NewState: USART靜默模式的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* USART3 in normal mode */
USART_ReceiverWakeUpCmd(USART3, DISABLE);
函數原型如下:
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the USART mute mode by setting the RWU bit in the CR1 register */
USARTx->CR1 |= CR1_RWU_Set;
}
else
{
/* Disable the USART mute mode by clearing the RWU bit in the CR1 register */
USARTx->CR1 &= CR1_RWU_Reset;
}
}
21.2.10 【10】函數USART_LINBreakDetectiLengthConfig
Table 729. 函數 USART_LINBreakDetectiLengthConfig
函數名 USART_LINBreakDetectiLengthConfig
函數原形 void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx,u16 USART_LINBreakDetectLength)
功能描述 設置USART LIN中斷檢測長度
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_LINBreakDetectLength:LIN中斷檢測長度
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_LINBreakDetectLength:選擇USART 的喚醒方式。
Table 730. USART_LINBreakDetectLength 值
USART_LINBreakDetectLength 描述/CR2
USART_LINBreakDetectLength_10b 10位中斷檢測 0x0000
USART_LINBreakDetectLength_11b 11位中斷檢測 0x0020
例:
/* Selects 10 bit break detection for USART1 */
USART_LINBreakDetectLengthConfig(USART1,
USART_LINDetectLength_10b);
函數原型如下:
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, u16 USART_LINBreakDetectLength)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
USARTx->CR2 &= CR2_LBDL_Mask;
USARTx->CR2 |= USART_LINBreakDetectLength;
}
【11】函數USART_LINCmd
Table 731. 函數 USART_LINCmd
函數名 USART_LINCmd
函數原形 void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 使能或失能USARTx的LIN模式
輸入參數 1 USARTx:x可以是 1,2或3,來選擇USART外設
輸入參數 2 NewState: USART LIN模式的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enable the USART2 LIN mode */
USART_LINCmd(USART2, ENABLE);
函數原型如下:
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the LIN mode by setting the LINEN bit in the CR2 register */
USARTx->CR2 |= CR2_LINEN_Set;
}
else
{
/* Disable the LIN mode by clearing the LINEN bit in the CR2 register */
USARTx->CR2 &= CR2_LINEN_Reset;
}
}
【12】函數USART_SendData
Table 732. 函數 USART_ SendData
函數名 USART_ SendData
函數原形 void USART_SendData(USART_TypeDef* USARTx, u8 Data)
功能描述 通過外設USARTx發送單個資料
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 Data: 待發送的資料
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Send one HalfWord on USART3 */
USART_SendData(USART3, 0x26);
函數原型如下:
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (u16)0x01FF);
}
【13】函數USART_ReceiveData
Table 733. 函數 USART_ReceiveData
函數名 USART_ ReceiveData
函數原形 u8 USART_ReceiveData(USART_TypeDef* USARTx)
功能描述 返回USARTx最近接收到的資料
輸入參數 USARTx:x=1/2/3,來選擇USART外設
輸出參數 無
返回值 接收到的字
先決條件 無
被調用函數 無
例:
/* Receive one halfword on USART2 */
u16 RxData;
RxData = USART_ReceiveData(USART2);
函數原型如下:
u16 USART_ReceiveData(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Receive Data */
return (u16)(USARTx->DR & (u16)0x01FF);
}
【14】函數USART_SendBreak
Table 734. 函數 USART_SendBreak
函數名 USART_SendBreak
函數原形 void USART_SendBreak(USART_TypeDef* USARTx)
功能描述 發送中斷字
輸入參數 USARTx:x=1/2/3,來選擇USART外設
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Send break character on USART1 */
USART_SendBreak(USART1);
函數原型如下:
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Send break characters */
USARTx->CR1 |= CR1_SBK_Set;
}
【15】函數USART_SetGuardTime
Table 735. 函數 USART_SetGuardTime
函數名 USART_SetGuardTime
函數原形 void USART_SetGuardTime(USART_TypeDef* USARTx, u8 USART_GuardTime)
功能描述 設置指定的USART保護時間
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_GuardTime: 指定的保護時間
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Set the guard time to 0x78 */
USART_SetGuardTime(0x78);
函數原型如下:
void USART_SetGuardTime(USART_TypeDef* USARTx, u8 USART_GuardTime)
{
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
/* Clear the USART Guard time */
USARTx->GTPR &= GTPR_LSB_Mask;
/* Set the USART guard time */
USARTx->GTPR |= (u16)((u16)USART_GuardTime << 0x08);
}
【16】函數USART_SetPrescaler
Table 736. 函數 USART_SetPrescaler
函數名 USART_SetPrescaler
函數原形 void USART_SetPrescaler(USART_TypeDef* USARTx, u8 USART_Prescaler)
功能描述 設置USART時鐘預分頻
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_Prescaler: 時鐘預分頻
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Set the system clock prescaler to 0x56 */
USART_SetPrescaler(0x56);
函數原型如下:
void USART_SetPrescaler(USART_TypeDef* USARTx, u8 USART_Prescaler)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Clear the USART prescaler */
USARTx->GTPR &= GTPR_MSB_Mask;
/* Set the USART prescaler */
USARTx->GTPR |= USART_Prescaler;
}
【17】函數USART_SmartCardCmd
Table 737. 函數 USART_SmartCardCmd
函數名 USART_SmartCardCmd
函數原形 void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 使能或失能指定USART的智慧卡模式
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 NewState: USART 智慧卡模式的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enable the USART1 Smart Card mode */
USART_SmartCardCmd(USART1, ENABLE);
函數原型如下:
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the SC mode by setting the SCEN bit in the CR3 register */
USARTx->CR3 |= CR3_SCEN_Set;
}
else
{
/* Disable the SC mode by clearing the SCEN bit in the CR3 register */
USARTx->CR3 &= CR3_SCEN_Reset;
}
}
【18】函數USART_SmartCardNackCmd
Table 738. 函數 USART_SmartCardNackCmd
函數名 USART_SmartCardNackCmd
函數原形 void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 使能或失能NACK傳輸
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 NewState: NACK 傳輸的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enable the USART1 NACK transmission during parity error */
USART_SmartCardNACKCmd(USART1, ENABLE);
函數原型如下:
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the NACK transmission by setting the NACK bit in the CR3 register */
USARTx->CR3 |= CR3_NACK_Set;
}
else
{
/* Disable the NACK transmission by clearing the NACK bit in the CR3 register */
USARTx->CR3 &= CR3_NACK_Reset;
}
}
【19】函數USART_HalfDuplexCmd
Table 739. 函數 USART_HalfDuplexCmd
函數名 USART_HalfDuplexCmd
函數原形 void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 使能或失能USART半雙工模式
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 NewState: USART半雙工模式傳輸的新狀態(ENABLE 或 DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enabe HalfDuplex mode for USART2 */
USART_HalfDuplexCmd(USART2, ENABLE);
函數原型如下:
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
USARTx->CR3 |= CR3_HDSEL_Set;
}
else
{
/* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */
USARTx->CR3 &= CR3_HDSEL_Reset;
}
}
【20】函數USART_IrDAConfig
Table 740. 函數 USART_IrDAConfig
函數名 USART_IrDAConfig
函數原形 void USART_IrDAConfig(USART_TypeDef* USARTx, u16 USART_IrDAMode)
功能描述 設置USART IrDA模式
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_IrDAMode:LIN中斷檢測長度
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
USART_IrDAMode: 選擇IrDA的模式。
Table 741. USART_IrDAMode 值
USART_IrDAMode 描述
USART_IrDAMode_LowPower IrDA低功耗模式 0x0004
USART_IrDAMode_Normal IrDA正常模式 0x0000
例:
/* USART2 IrDA Low Power Selection */
USART_IrDAConfig(USART2,USART_IrDAMode_LowPower);
函數原型如下:
void USART_IrDAConfig(USART_TypeDef* USARTx, u16 USART_IrDAMode)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
USARTx->CR3 &= CR3_IRLP_Mask;
USARTx->CR3 |= USART_IrDAMode;
}
【21】函數USART_IrDACmd
Table 742. 函數 USART_IrDACmd
函數名 USART_IrDACmd
函數原形 void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState Newstate)
功能描述 使能或失能USART IrDA模式
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 NewState: USART IrDA模式的新狀態(ENABLE 或者DISABLE)
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Enable the USART1 IrDA Mode */
USART_IrDACmd(USART1, ENABLE);
函數原型如下:
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the IrDA mode by setting the IREN bit in the CR3 register */
USARTx->CR3 |= CR3_IREN_Set;
}
else
{
/* Disable the IrDA mode by clearing the IREN bit in the CR3 register */
USARTx->CR3 &= CR3_IREN_Reset;
}
}
【22】函數USART_GetFlagStatus
Table 743. 函數 USART_ GetFlagStatus
函數名 USART_ GetFlagStatus
函數原形 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
功能描述 檢查指定的USART標誌位元設置與否
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_FLAG:待檢查的USART標誌位元
輸出參數 無
返回值 USART_FLAG的新狀態(SET或RESET)
先決條件 無
被調用函數 無
USART_FLAG:Table 744.給出了所有可以被函數USART_ GetFlagStatus 檢查的標誌位元清單
Table 744. USART_FLAG 值
USART_FLAG 描述/SR.bit9-0 #Val 位置
USART_FLAG_CTS CTS標誌位元 0x0200 bit9
USART_FLAG_LBD LIN中斷檢測標誌位元 0x0100 bit8
USART_FLAG_TXE 發送資料寄存器空標誌位元 0x0080 bit7
USART_FLAG_TC 發送完成標誌位元 0x0040 bit6
USART_FLAG_RXNE 接收資料寄存器非空標誌位元 0x0020 bit5
USART_FLAG_IDLE 空閒匯流排標誌位元 0x0010 bit4
USART_FLAG_ORE 溢出錯誤標誌位元 0x0008 bit3
USART_FLAG_NE 雜訊錯誤標誌位元 0x0004 bit2
USART_FLAG_FE 幀錯誤標誌位元 0x0002 bit1
USART_FLAG_PE 奇偶錯誤標誌位元 0x0001 bit0
例:
/* Check if the transmit data register is full or not */
FlagStatus Status;
Status = USART_GetFlagStatus(USART1, USART_FLAG_TXE);
函數原型如下:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */
if ((USARTx->SR & USART_FLAG) != (u16)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
21.2.23 【23】函數USART_ClearFlag
Table 745. 函數 USART_ ClearFlag
函數名 USART_ ClearFlag
函數原形 void USART_ClearFlag(USART_TypeDef* USARTx, u16 USART_FLAG)
功能描述 清除USARTx的待處理標誌位元
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_FLAG:待清除的USART標誌位元
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Clear Overrun error flag */
USART_ClearFlag(USART1,USART_FLAG_OR);
函數原型如下:
void USART_ClearFlag(USART_TypeDef* USARTx, u16 USART_FLAG)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */
USARTx->SR = (u16)~USART_FLAG;//參看上述USART_FLAG取值。另:這些標誌位元,有些可通過序列操作清除~!
}
【24】函數USART_GetITStatus
Table 746. 函數 USART_ GetITStatus
函數名 USART_ GetITStatus
函數原形 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, u16 USART_IT)
功能描述 檢查指定的USART中斷發生與否
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_IT:待檢查的USART中斷源
輸出參數 無
返回值 USART_IT的新狀態
先決條件 無
被調用函數 無
USART_IT:Table 747. 給出了所有可以被函數USART_ GetITStatus 檢查的中斷標誌位元清單。
Table 747. USART_IT 值
USART_IT 描述 #define Val
USART_IT_PE 奇偶錯誤中斷 0x0028
USART_IT_TXE 發送中斷 0x0727
USART_IT_TC 發送完成中斷 0x0626
USART_IT_RXNE 接收中斷 0x0525
USART_IT_IDLE 空閒匯流排中斷 0x0424
USART_IT_LBD LIN中斷探測中斷 0x0846
USART_IT_CTS CTS中斷 0x096A
USART_IT_ERR 0x0060
USART_IT_ORE 溢出錯誤中斷 0x0360
USART_IT_NE 噪音錯誤中斷 0x0260
USART_IT_FE 幀錯誤中斷 0x0160
例:
/* Get the USART1 Overrun Error interrupt status */
ITStatus ErrorITStatus;
ErrorITStatus = USART_GetITStatus(USART1, USART_IT_OverrunError);
函數原型如下:
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, u16 USART_IT)
{
u32 bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_IT(USART_IT));
assert_param(IS_USART_PERIPH_IT(USARTx, USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */
/* Get the USART register index */
usartreg = (((u8)USART_IT) >> 0x05);
/* Get the interrupt position */
itmask = USART_IT & IT_Mask;
itmask = (u32)0x01 << itmask;
if (usartreg == 0x01) /* The IT is in CR1 register */
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
itmask &= USARTx->CR2;
}
else /* The IT is in CR3 register */
{
itmask &= USARTx->CR3;
}
bitpos = USART_IT >> 0x08;
bitpos = (u32)0x01 << bitpos;
bitpos &= USARTx->SR;
if ((itmask != (u16)RESET)&&(bitpos != (u16)RESET))
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
【25】函數USART_ClearITPendingBit
Table 748. 函數 USART_ ClearITPendingBit
函數名 USART_ ClearITPendingBit
函數原形 void USART_ClearITPendingBit(USART_TypeDef* USARTx, u16 USART_IT)
功能描述 清除USARTx的中斷待處理位
輸入參數 1 USARTx:x=1/2/3,來選擇USART外設
輸入參數 2 USART_IT:待檢查的USART中斷源
輸出參數 無
返回值 無
先決條件 無
被調用函數 無
例:
/* Clear the Overrun Error interrupt pending bit */
USART_ClearITPendingBit(USART1,USART_IT_OverrunError);
函數原型如下:
void USART_ClearITPendingBit(USART_TypeDef* USARTx, u16 USART_IT)
{
u16 bitpos = 0x00, itmask = 0x00;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_IT(USART_IT));
assert_param(IS_USART_PERIPH_IT(USARTx, USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */
bitpos = USART_IT >> 0x08;
itmask = (u16)((u16)0x01 << bitpos);
USARTx->SR = (u16)~itmask;
}
/*【26】函數USART_ClockInit
******************************************************************************
* Function Name : USART_ClockInit
* Description : Initializes the USARTx peripheral Clock according to the
* specified parameters in the USART_ClockInitStruct .
* Input : - USARTx: where x can be 1, 2, 3 to select the USART peripheral.
* Note: The Smart Card mode is not available for UART4 and UART5.
* - USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
* structure that contains the configuration information for
* the specified USART peripheral.
* Output : None
* Return : None
*******************************************************************************/
結構體如下:
typedef struct
{
u16 USART_Clock;
u16 USART_CPOL;
u16 USART_CPHA;
u16 USART_LastBit;
} USART_ClockInitTypeDef;
結構體參數設置:
1.USART_Clock參數取值:
USART_Clock 描述/CR2. CLKEN/bit11 #define
USART_Clock_Disable ((u16)0x0000)
USART_Clock_Enable ((u16)0x0800)
2.USART_CPOL參數取值:
USART_CPOL 描述/CR2. CPOL/bit10 #define
USART_CPOL_Low 匯流排空閒時CK引腳上保持低電平 ((u16)0x0000)
USART_CPOL_High 匯流排空閒時CK引腳上保持高電平 ((u16)0x0400)
3.USART_CPHA參數取值:
USART_CPHA 描述/CR2.CPHA/bit9 #define
USART_CPHA_1Edge 在時鐘的第一個邊沿進行資料捕獲 ((u16)0x0000)
USART_CPHA_2Edge 在時鐘的第二個邊沿進行資料捕獲 ((u16) 0x0200)
4.USART_LastBit參數取值:
USART_LastBit 描述/CR2. LBCL/bit8 #define
USART_LastBit_Disable 最後一位元資料的時鐘脈衝不從CK輸出 ((u16)0x0000)
USART_LastBit_Enable 最後一位元資料的時鐘脈衝會從CK輸出 ((u16) 0x0100)
函數原型如下:
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)
{
u32 tmpreg = 0x00;
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock));
assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));
assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));
assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));
/*---------------------------- USART CR2 Configuration -----------------------*/
tmpreg = USARTx->CR2;
/* Clear CLKEN, CPOL, CPHA and LBCL bits */
tmpreg &= CR2_CLOCK_CLEAR_Mask;
/* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/
/* Set CLKEN bit according to USART_Clock value */
/* Set CPOL bit according to USART_CPOL value */
/* Set CPHA bit according to USART_CPHA value */
/* Set LBCL bit according to USART_LastBit value */
tmpreg |= (u32)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL |
USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;
/* Write to USART CR2 */
USARTx->CR2 = (u16)tmpreg;
}
/*【27】函數USART_ClockStructInit
******************************************************************************
* Function Name : USART_ClockStructInit
* Description : Fills each USART_ClockInitStruct member with its default value.
* Input : - USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
* structure which will be initialized.
* Output : None
* Return : None
*******************************************************************************/
填充時鐘配置結構體位元缺省值。
函數原型如下:
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)
{
/* USART_ClockInitStruct members default value */
USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;
USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;
USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;
USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;
}
沒有留言:
張貼留言