串口和中断写完

This commit is contained in:
2026-05-25 23:53:39 +08:00
parent 42ceefc5ad
commit 4f108bc26a
9 changed files with 33254 additions and 444 deletions
+31 -57
View File
@@ -3,37 +3,21 @@
/**
* @brief 初始化UART口外设的时钟
* @note void
* @param void
* @param ComX:串口号
* @retval void
*/
void UartClockEnable(const COM_MAP_T *ComX)
{
if (ComX->Periph == USART1)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}
if (ComX->Periph == USART2) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}
if (ComX->Periph == USART3) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
}
if (ComX->Periph == UART4) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
}
if (ComX->Periph == UART5) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
}
ComX->ClockCmd(ComX->ClockTree,ENABLE);
}
/**
* @brief 初始化USART口
* @param ComId 串口号 baud 波特率 DataBits 数据位 StopBits 停止位 Parity校验位
* @note void
* @param Comx 串口号 baud 波特率 DataBits 数据位 StopBits 停止位 Parity校验位
* @retval void
* @note void
* @example void
*/
void UartInit(const COM_MAP_T *Comx, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
void ComInit(const COM_MAP_T *ComX, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{
USART_InitTypeDef UsartInitSt;
@@ -45,76 +29,66 @@ void UartInit(const COM_MAP_T *Comx, uint32_t baud, uint8_t DataBits, uint8_t St
UsartInitSt.USART_Parity = Parity;
UsartInitSt.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
UsartInitSt.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(Comx->Periph, &UsartInitSt);
UartClockEnable(ComX);
USART_Init(ComX->Periph.UartId, &UsartInitSt);
//配置中断
USART_ITConfig(Comx->Periph, USART_IT_RXNE, ENABLE);
USART_ITConfig(ComX->Periph.UartId, USART_IT_RXNE, ENABLE);
//启用串口
USART_Cmd(Comx->Periph, ENABLE);
USART_Cmd(ComX->Periph.UartId, ENABLE);
}
/**
* @brief USART口发送数据
* @param ComId 串口号 Data数据
* @note void
* @param ComX 串口号 Data数据
* @retval void
* @note void
* @example void
*/
void UartSendChar(uint32_t ComId,uint8_t Data)
void ComSendChar(const COM_MAP_T *ComX,uint8_t Data)
{
USART_SendData((USART_TypeDef*)ComId, Data);
while (USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC) != SET);
USART_SendData(ComX->Periph.UartId, Data);
while (USART_GetFlagStatus(ComX->Periph.UartId, USART_FLAG_TC) != SET);
}
/**
* @brief USART口发送字符串
* @param ComId 串口号 Data数据 Len 长度
* @note void
* @param ComX 串口号 Data数据 Len 长度
* @retval void
* @note void
* @example void
*/
void UartSendStr(uint32_t ComId,uint8_t* Data, uint64_t Len)
void ComSendStr(const COM_MAP_T *ComX,uint8_t *Data, uint64_t Len)
{
for (uint64_t i = 0;i < Len;i++)
{
USART_SendData((USART_TypeDef*)ComId, Data[i]);
while (USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC) != SET);
USART_SendData(ComX->Periph.UartId, Data[i]);
while (USART_GetFlagStatus(ComX->Periph.UartId, USART_FLAG_TC) != SET);
}
}
/**
* @brief USART口发送数据
* @param ComId 串口号
* @note void
* @param ComX 串口号
* @retval 读取的数据
* @note void
* @example void
*/
uint8_t UartReceiveChar(uint32_t ComId)
uint8_t ComReceiveChar(const COM_MAP_T *ComX)
{
return USART_ReceiveData((USART_TypeDef*)ComId);
return USART_ReceiveData(ComX->Periph.UartId);
}
/**
* @brief 通用USART配置
* @note void
* @param ComId 串口号 baud 波特率
* @note void
* @param ComX 串口号 baud 波特率
* @retval void
*/
void UartStdConfig(COM_MAP_T ComX, uint32_t baud)
void ComStdConfig(const COM_MAP_T *ComX, uint32_t Baud)
{
UartInit(&ComX, baud, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No);
ComInit(ComX, Baud, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No);
}
/**
* @brief 高级串口配置
* @note void
* @param ComId 串口号 baud 波特率 Data Bits 数据位 StopBits 停止位 Parity校验位
* @param ComX 串口号 baud 波特率 Data Bits 数据位 StopBits 停止位 Parity校验位
* @retval void
*/
void UartAdvConfig(const COM_MAP_T *ComX, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
void ComAdvConfig(const COM_MAP_T *ComX, uint32_t Baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{
UartInit(ComX, baud, DataBits, StopBits, Parity);
}
ComInit(ComX, Baud, DataBits, StopBits, Parity);
}