?? stm32f10x_usart.c
字號:
USARTx->CR3 &= CR3_SCEN_Reset;
}
}
/**
* @簡述 使能或者失能 NACK 傳輸.
* @參數 USARTx: x可以為1,2或3以選擇USART的外圍設備.
* @參數 NewState: NACK 傳輸的新狀態.
* 這個參數可以是: ENABLE 或 DISABLE.
* @注解 這個智能卡模式不能應用于 UART4 和 UART5 .
* @返回 沒有
*/
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR3寄存器的NACK位使能NACK傳輸 */
USARTx->CR3 |= CR3_NACK_Set;
}
else
{
/* 通過清零CR3寄存器的NACK位失能NACK傳輸 */
USARTx->CR3 &= CR3_NACK_Reset;
}
}
/**
* @簡述 使能或者失能 USART 半雙工模式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 NewState: USART 半雙工模式的新狀態.
* 這個參數可以是: ENABLE 或 DISABLE.
* @返回 沒有
*/
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR3寄存器的HDSEL位使能Half-Duplex模式 */
USARTx->CR3 |= CR3_HDSEL_Set;
}
else
{
/* 通過清零CR3寄存器的HDSEL位失能Half-Duplex模式 */
USARTx->CR3 &= CR3_HDSEL_Reset;
}
}
/**
* @簡述 設置 USART IrDA 模式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @參數 USART_IrDAMode: 指定 IrDA 模式.
* 這個參數可以是下面的值之一 :
* USART_IrDAMode_LowPower: 低功耗模式
* USART_IrDAMode_Normal : 正常模式
* @返回 沒有
*/
void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
USARTx->CR3 &= CR3_IRLP_Mask;
USARTx->CR3 |= USART_IrDAMode;
}
/**
* @簡述 使能或者失能 USART IrDA 模式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @參數 NewState: IrDA 模式的新狀態.
* 這個參數可以是: ENABLE 或 DISABLE.
* @返回 沒有
*/
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR3寄存器的IREN位使能IrDA模式 */
USARTx->CR3 |= CR3_IREN_Set;
}
else
{
/* 通過清零CR3寄存器的IREN位失能IrDA模式 */
USARTx->CR3 &= CR3_IREN_Reset;
}
}
/**
* @簡述 檢查指定的 USART 標志位設置與否.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_FLAG: 指定要檢測的標記.
* 這個參數可以是下面的值之一 :
* USART_FLAG_CTS: CTS 改變標志 (不能應用于 UART4 和 UART5)
* USART_FLAG_LBD: LIN 間隔偵測標志
* USART_FLAG_TXE: 發送數據寄存器為空標志
* USART_FLAG_TC: 傳輸完成標志
* USART_FLAG_RXNE: 接收數據寄存器不為空標志
* USART_FLAG_IDLE: 空閑總線標志
* USART_FLAG_ORE: 溢出錯誤標志
* USART_FLAG_NE: 噪聲錯誤標志
* USART_FLAG_FE: 幀錯誤標志
* USART_FLAG_PE: 奇偶錯誤標志
* @retval USART_FLAG 的新狀態(SET 或 RESET).
*/
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
/* CTS 標志不能應用于 UART4 和 UART5 */
if (USART_FLAG == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/**
* @簡述 清除 USARTx 的待處理標志位.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_FLAG: 指定要被清除的標記.
* 這個參數可以是下面的值的任意組合:
* USART_FLAG_CTS: CTS 改變標志 (不能應用于 UART4 和 UART5).
* USART_FLAG_LBD: LIN 間隔偵測標志.
* USART_FLAG_TC: 傳輸完成標志.
* USART_FLAG_RXNE: 接收數據寄存器不為空標志.
*
* @注解
* - PE (奇偶校驗錯誤), FE (楨錯誤), NE (噪聲錯誤),
* ORE (過速錯誤) 和 IDLE (找到空閑線) 標志標志被軟件按順序清除:
* 一個讀USART_SR寄存器操作(USART_GetFlagStatus())
* 接著一個讀USART_DR寄存器操作(USART_ReceiveData()).
* - RXNE標志也可以被一個讀USART_DR寄存器操作清除(USART_ReceiveData()).
* - TC標志標志被軟件按順序清除: 一個讀USART_SR寄存器操作(USART_GetFlagStatus())
* 接著一個讀USART_DR寄存器操作(USART_ReceiveData()).
* - TXE標志只能靠寫USART_DR寄存器清除(USART_SendData()).
* @返回 沒有
*/
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
/* CTS 標志不能應用于 UART4 和 UART5 */
if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
USARTx->SR = (uint16_t)~USART_FLAG;
}
/**
* @簡述 檢查指定的 USART 中斷發生與否.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_IT: 指定要檢測的USART中斷源.
* 這個參數可以是下面的值之一 :
* USART_IT_CTS: CTS 改變中斷 (不能應用于 UART4 和 UART5)
* USART_IT_LBD: LIN 間隔偵測中斷
* USART_IT_TXE: 發送數據寄存器為空中斷
* USART_IT_TC: 傳輸完成中斷
* USART_IT_RXNE: 接收數據寄存器不為空中斷
* USART_IT_IDLE: 空閑總線中斷
* USART_IT_ORE: 溢出錯誤中斷
* USART_IT_NE: 噪聲錯誤中斷
* USART_IT_FE: 幀錯誤中斷
* USART_IT_PE: 奇偶錯誤中斷
* @返回 USART_IT 的新狀態 (SET 或 RESET).
*/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_GET_IT(USART_IT));
/* CTS 中斷不能應用于 UART4 和 UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
/* 得到 USART 寄存器引索 */
usartreg = (((uint8_t)USART_IT) >> 0x05);
/*得到中斷位置 */
itmask = USART_IT & IT_Mask;
itmask = (uint32_t)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 = (uint32_t)0x01 << bitpos;
bitpos &= USARTx->SR;
if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/**
* @簡述 清除 USARTx 的中斷待處理位.
* @返回 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_IT: 指定要被清除的中斷掛起位.
* 這個參數可以是下面的值之一:
* USART_IT_CTS: CTS 改變中斷 (不能應用于 UART4 和 UART5)
* USART_IT_LBD: LIN 間隔偵測中斷
* USART_IT_TC: 發送完成中斷
* USART_IT_RXNE: 接收數據寄存器不為空中斷
*
* @注解
* - PE (奇偶校驗錯誤), FE (楨錯誤), NE (噪聲錯誤),
* ORE (過速錯誤) 和 IDLE (找到空閑線)掛起位
* 被軟件按順序清除: 一個讀USART_SR寄存器操作(USART_GetFlagStatus())
* 接著一個讀USART_DR寄存器操作(USART_ReceiveData()).
* - RXNE掛起位也可以被一個讀USART_DR寄存器操作清除(USART_ReceiveData()).
* - TC掛起位也可以被軟件按順序清除: 一個讀USART_SR寄存器操作(USART_GetFlagStatus())
* 接著一個讀USART_DR寄存器操作(USART_ReceiveData()).
* - TXE掛起位置可以被一個寫USART_DR寄存器清除(USART_SendData()).
* @返回 沒有
*/
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint16_t bitpos = 0x00, itmask = 0x00;
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_IT(USART_IT));
/* CTS 中斷不能應用于 UART4 和 UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
bitpos = USART_IT >> 0x08;
itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
USARTx->SR = (uint16_t)~itmask;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -