?? stm32f10x_usart.c
字號:
* @參數 NewState: 指定的 USARTx 中斷的新狀態(tài).
* 這個參數可以是: ENABLE 或 DISABLE.
* @返回 沒有
*/
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
{
uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
uint32_t usartxbase = 0x00;
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CONFIG_IT(USART_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
/* CTS 中斷不能應用于 UART4 和 UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
usartxbase = (uint32_t)USARTx;
/* 得到 USART 寄存器變址 */
usartreg = (((uint8_t)USART_IT) >> 0x05);
/* 得到中斷位置 */
itpos = USART_IT & IT_Mask;
itmask = (((uint32_t)0x01) << itpos);
if (usartreg == 0x01) /* The IT is in CR1 register */
{
usartxbase += 0x0C;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
usartxbase += 0x10;
}
else /* The IT is in CR3 register */
{
usartxbase += 0x14;
}
if (NewState != DISABLE)
{
*(__IO uint32_t*)usartxbase |= itmask;
}
else
{
*(__IO uint32_t*)usartxbase &= ~itmask;
}
}
/**
* @簡述 使能或者失能指定 USART 的 DMA 請求.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3 or UART4.
* @參數 USART_DMAReq:指定 DMA 請求.
* 這個參數可以是下面任意值的組合:
* USART_DMAReq_Tx: USART DMA 傳輸請求
* USART_DMAReq_Rx: USART DMA 接收請求
* @參數 NewState: DMA 請求源的新狀態(tài).
* 這個參數可以是: ENABLE 或 DISABLE.
* @注解 DMA 模式不能應用于 UART5.
* @返回 沒有
*/
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_1234_PERIPH(USARTx));
assert_param(IS_USART_DMAREQ(USART_DMAReq));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過設置USART CR3 寄存器的DMAT、DMAT位組合,來使能選擇DMA傳輸請求 */
USARTx->CR3 |= USART_DMAReq;
}
else
{
/* 通過設置USART CR3 寄存器的DMAT、DMAT位組合,來失能選擇DMA傳輸請求 */
USARTx->CR3 &= (uint16_t)~USART_DMAReq;
}
}
/**
* @簡述 設置 USART 節(jié)點的地址.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_Address: 設置 USART 節(jié)點的地址.
* @返回 沒有
*/
void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_ADDRESS(USART_Address));
/* 清除 USART 地址 */
USARTx->CR2 &= CR2_Address_Mask;
/* 設置 USART 節(jié)點的地址 */
USARTx->CR2 |= USART_Address;
}
/**
* @簡述 選擇 USART 的喚醒方式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_WakeUp: 指定 USART 的喚醒方式.
* 這個參數可以是下面的值之一 :
* USART_WakeUp_IdleLine: 空閑總線喚醒
* USART_WakeUp_AddressMark: 地址標記喚醒
* @返回 沒有
*/
void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_WAKEUP(USART_WakeUp));
USARTx->CR1 &= CR1_WAKE_Mask;
USARTx->CR1 |= USART_WakeUp;
}
/**
* @簡述 檢查 USART 是否處于靜默模式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 NewState: USART 靜默模式的新狀態(tài).
* 這個參數可以是: ENABLE 或 DISABLE.
* @返回 沒有
*/
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR1寄存器的RWU位使能USART靜音模式 */
USARTx->CR1 |= CR1_RWU_Set;
}
else
{
/* 通過清零CR1寄存器的RWU位失能USART靜音模式 */
USARTx->CR1 &= CR1_RWU_Reset;
}
}
/**
* @簡述 設置 USART LIN 中斷檢測長度.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @參數 USART_LINBreakDetectLength: LIN 中斷檢測長度.
* 這個參數可以是下面的值之一 :
* USART_LINBreakDetectLength_10b: 10位間斷檢測
* USART_LINBreakDetectLength_11b: 11位間斷檢測
* @返回 沒有
*/
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)
{
/* 檢查參數 */
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;
}
/**
* @簡述 使能或者失能 USARTx 的 LIN 模式.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 NewState: USART LIN 模式的新狀態(tài).
* 這個參數可以是: ENABLE or DISABLE.
* @返回 沒有
*/
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR2寄存器的LINEN位使能LIN模式 */
USARTx->CR2 |= CR2_LINEN_Set;
}
else
{
/* 通過清零CR2寄存器的LINEN位失能LIN模式 */
USARTx->CR2 &= CR2_LINEN_Reset;
}
}
/**
* @簡述 通過外設 USARTx 發(fā)送單個數據.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @參數 Data: 要發(fā)送的數據.
* @返回 沒有
*/
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* 發(fā)送數據 */
USARTx->DR = (Data & (uint16_t)0x01FF);
}
/**
* @簡述 返回 USARTx 最近接收到的數據.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @返回 接收數據.
*/
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* 接收數據 */
return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}
/**
* @簡述 發(fā)送中斷字.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @返回 沒有
*/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* 發(fā)送中斷字 */
USARTx->CR1 |= CR1_SBK_Set;
}
/**
* @簡述 設置指定的 USART 保護時間.
* @參數 USARTx: x可以為1,2或3以選擇USART的外圍設備.
* @參數 USART_GuardTime: 指定的保護時間.
* @注解 這個保護時間位不能應用于 UART4 和 UART5.
* @返回 沒有
*/
void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)
{
/* 檢查參數 */
assert_param(IS_USART_123_PERIPH(USARTx));
/* 清除 USART 保護時間 */
USARTx->GTPR &= GTPR_LSB_Mask;
/* 設置 USART 保護時間 */
USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);
}
/**
* @簡述 設置 USART 時鐘預分頻.
* @參數 USARTx: 選擇 USART 或者 UART 的外圍設備.
* 這個參數可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @參數 USART_Prescaler: 指定預分頻器.
* @注解 這個函數是用于 UART4 和 UART5 的 IrDA 模式.
* @返回 沒有
*/
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)
{
/* 檢查參數 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* 清除 USART 預分頻器 */
USARTx->GTPR &= GTPR_MSB_Mask;
/* 設置 USART 預分頻器 */
USARTx->GTPR |= USART_Prescaler;
}
/**
* @簡述 使能或者失能指定 USART 的智能卡模式.
* @參數 USARTx: x可以為1,2或3以選擇USART的外圍設備.
* @參數 NewState: USART 智能卡模式的新狀態(tài).
* 這個參數可以是: ENABLE 或 DISABLE.
* @注解 這個智能卡模式不能應用于 UART4 和 UART5 .
* @返回 沒有
*/
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 檢查參數 */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通過置位CR3寄存器的SCEN位使能SC模式 */
USARTx->CR3 |= CR3_SCEN_Set;
}
else
{
/* 通過清零CR3寄存器的SCEN位失能SC模式 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -