welcom ! Handel home

2014年6月26日 星期四

ST32 USART 函數


 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;
}

沒有留言: