📄 stm32f10x_usart.c
字号:
* @参数 NewState: 指定的 USARTx 中断的新状态.
* 这个参数可以是: 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 请求源的新状态.
* 这个参数可以是: 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 节点的地址.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 USART_Address: 设置 USART 节点的地址.
* @返回 没有
*/
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 节点的地址 */
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 静默模式的新状态.
* 这个参数可以是: 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 模式的新状态.
* 这个参数可以是: 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 发送单个数据.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @参数 Data: 要发送的数据.
* @返回 没有
*/
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* 发送数据 */
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);
}
/**
* @简述 发送中断字.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @返回 没有
*/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* 发送中断字 */
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 智能卡模式的新状态.
* 这个参数可以是: 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 + -