first commit

This commit is contained in:
2025-06-20 23:33:55 +08:00
commit ebc9398eb5
102 changed files with 56294 additions and 0 deletions

125
Bsp/Inc/Bsp.h Normal file
View File

@@ -0,0 +1,125 @@
#ifndef __BSP_H__
#define __BSP_H__
/* BSP INCLUDE */
#include "Board.h"
/* STDC INCLUDE */
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* MCU INCLUDE */
#include <stm32f10x.h>
#include "stm32f10x_conf.h"
//SystemInit
void BspConfigInit(void);
//GPIO
#define IO_TYPE_DO 0
#define IO_TYPE_DI 1
#define IO_TYPE_AO 2
#define IO_TYPE_AI 3
#define IO_TYPE_LED 4
typedef enum {
false = 0,
true = 1,
} bool_t;
typedef struct
{
GPIO_TypeDef* GpioX;
uint16_t GpioPinX;
}GPIO_LIST;
void BspInitGpioClock(void);
void GpioConfig(GPIO_TypeDef* GpioX, uint16_t GpioPinX, GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed);
void SetGpioSts(GPIO_TypeDef* GpioX, uint16_t GpioPinX, bool_t state);
bool_t GetGpioSts(GPIO_TypeDef *GpioX, uint16_t GpioPinX);
//Delay
void DelayConfig(void);
uint32_t GetDwtCnt(void);
void DelayUs(uint32_t Us);
void DelayMs(uint32_t Ms);
//Interrupt
#define INTERRUPT_NUM 300
typedef struct
{
void(*CallBack)(uint32_t); //回调函数
int32_t IntId; //触发中断的外设id
} INT_DESC;
typedef struct
{
INT_DESC Adc_1_2;
INT_DESC Usb_Hp_Can1_Tx;
INT_DESC Usb_Hp_Can1_Rx0;
INT_DESC Can1_Rx1;
INT_DESC Can1_Sce;
INT_DESC Exti_9_5;
INT_DESC Tim_1_Brk;
INT_DESC Tim_1_Up;
INT_DESC Tim_1_Trg_Com;
INT_DESC Tim_1_Cc;
INT_DESC Tim_2;
INT_DESC Tim_3;
INT_DESC Tim_4;
INT_DESC I2c_1_Ev;
INT_DESC I2c_1_ER;
INT_DESC I2c_2_Ev;
INT_DESC I2c_2_ER;
INT_DESC Spi_1;
INT_DESC Spi_2;
INT_DESC Usart1;
INT_DESC Usart2;
INT_DESC Usart3;
INT_DESC Exti_15_10;
INT_DESC Rtc_Alarm;
INT_DESC Usb_WackUp;
INT_DESC Tim_8_Brk;
INT_DESC Tim_8_Up;
INT_DESC Tim_8_Trg_Com;
INT_DESC Tim_8_Cc;
INT_DESC Adc_3;
INT_DESC Fsmc;
INT_DESC Sdio;
INT_DESC Tim_5;
INT_DESC Spi_3;
INT_DESC Uart4;
INT_DESC Uart5;
INT_DESC Tim_6;
INT_DESC Tim_7;
INT_DESC Dma_2_Chnl_1;
INT_DESC Dma_2_Chnl_2;
INT_DESC Dma_2_Chnl_3;
INT_DESC Dma_2_Chnl_4;
} SYSTEM_INT_REG;
void DisAllowInt(void);
void AllowInt(void);
void IntCbInit(void);
void IntCbReg(uint32_t Vector, void(*Func)(uint32_t));
void IntSetLevel(uint32_t Vector, uint8_t NvicPrePriority, uint8_t NvicSubPriority);
//USART
#define DataBit_8 USART_WordLength_8b
#define DataBit_9 USART_WordLength_9b
#define StopBit_1 USART_StopBits_1
#define StopBit_0_5 USART_StopBits_0_5
#define StopBit_2 USART_StopBits_2
#define StopBit_1_5 USART_StopBits_1_5
#define Parity_No USART_Parity_No
#define Parity_Even USART_Parity_Even
#define Parity_Odd USART_Parity_Odd
void BspInitUsartClock(void);
void UsartStdConfig(uint32_t ComId, uint32_t baud);
void UsartAdvConfig(uint32_t ComId, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity);
void UsartSendChar(uint32_t ComId,uint8_t Data);
void UsartSendStr(uint32_t ComId,uint8_t* Data, uint64_t Len);
uint8_t UsartReceiveChar(uint32_t ComId);
//用户层接口
void IoCtlToggleDo(uint16_t IoChnl);
uint32_t IoCtl(uint8_t IoType, uint16_t IoChnl,uint32_t state);
void IoCtlLedToggle(uint16_t IoChnl);
#endif

0
Bsp/Inc/Interrupt.h Normal file
View File

204
Bsp/Src/Bsp.c Normal file
View File

@@ -0,0 +1,204 @@
#include "Bsp.h"
#ifdef USE_DIGITAL_OUTPUT
GPIO_LIST GpioOutputList[] =
{
{GPIOA,GPIO_Pin_0},
};
#endif
#ifdef USE_DIGITAL_INPUT
GPIO_LIST GpioInputList[] =
{
{GPIOA,GPIO_Pin_0},
};
#endif
#ifdef USE_LED
GPIO_LIST GpioLedList[] =
{
{GPIOB,GPIO_Pin_5},
{GPIOE,GPIO_Pin_5},
};
#endif
/**
* @brief BSP的配置和初始化
* @param void
* @retval void
* @note void
* @example void
*/
void BspConfigInit(void)
{
//Interrupt
IntCbInit();
//Delay
DelayConfig();
//SystemClock
{
#ifdef GPIO_ENABLE
BspInitGpioClock();
#endif
#ifdef USART_ENABLE
BspInitUsartClock();
#endif
}
//GPIO DO DI
{
//DO
#ifdef USE_DIGITAL_OUTPUT
for (uint8_t i = 0; i < DO_NUM; i++) {
GpioConfig(GpioOutputList[i].GpioX,GpioOutputList[i].GpioPinX,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
SetGpioSts(GpioOutputList[i].GpioX,GpioOutputList[i].GpioPinX,false);
}
#endif
//DI
#ifdef USE_DIGITAL_INPUT
for (uint8_t i = 0; i < DI_NUM; i++) {
GpioConfig(GpioInputList[i].GpioX,GpioInputList[i].GpioPinX,GPIO_Mode_IPU,GPIO_Speed_50MHz);
SetGpioSts(GpioInputList[i].GpioX,GpioInputList[i].GpioPinX,false);
}
#endif
//LED
#ifdef USE_LED
for (uint8_t i = 0; i < LED_NUM; i++) {
GpioConfig(GpioLedList[i].GpioX,GpioLedList[i].GpioPinX,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
SetGpioSts(GpioLedList[i].GpioX,GpioLedList[i].GpioPinX,(bool_t)SET);
}
#endif
}
//USART
{
//串口的TX引脚需要复用推挽模式RX引脚需要浮空输入模式
#ifdef USE_USART1
GpioConfig(COM0_TX_PORT,COM0_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
GpioConfig(COM0_RX_PORT,COM0_RX_PIN,GPIO_Mode_IN_FLOATING,GPIO_Speed_50MHz);
#endif
#ifdef USE_USART2
GpioConfig(COM1_TX_PORT,COM1_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
GpioConfig(COM1_RX_PORT,COM1_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
#endif
#ifdef USE_USART3
GpioConfig(COM2_TX_PORT,COM2_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
GpioConfig(COM2_RX_PORT,COM2_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
#endif
#ifdef USE_USART4
GpioConfig(COM3_TX_PORT,COM3_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
GpioConfig(COM3_RX_PORT,COM3_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
#endif
#ifdef USE_USART5
GpioConfig(COM4_TX_PORT,COM4_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
GpioConfig(COM4_RX_PORT,COM4_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
#endif
}
}
//用户层接口
/**
* @brief IO控制
* @param void
* @retval void
* @note void
* @example void
*/
uint32_t IoCtl(uint8_t IoType, uint16_t IoChnl,uint32_t state)
{
switch (IoType) {
#ifdef USE_DIGITAL_OUTPUT
case IO_TYPE_DO:
SetGpioSts(GpioOutputList[IoChnl].GpioX,GpioOutputList[IoChnl].GpioPinX,state);
return 0;
#endif
#ifdef USE_DIGITAL_INPUT
case IO_TYPE_DI:
return GetGpioSts(GpioInputList[IoChnl].GpioX,GpioInputList[IoChnl].GpioPinX);
#endif
#ifdef USE_ANALOG_OUTPUT
case IO_TYPE_AO:
break;
#endif
#ifdef USE_ANALOG_INPUT
case IO_TYPE_AI:
break;
#endif
#ifdef USE_LED
case IO_TYPE_LED:
SetGpioSts(GpioLedList[IoChnl].GpioX,GpioLedList[IoChnl].GpioPinX,(bool_t)state);
return 0;
#endif
default:
return 0;
}
return 0;
}
/**
* @brief 反转DO口
* @param void
* @retval void
* @note void
* @example void
*/
void IoCtlToggleDo(uint16_t IoChnl)
{
#ifdef USE_DIGITAL_OUTPUT
if (GetGpioSts(GpioOutputList[IoChnl].GpioX, GpioOutputList[IoChnl].GpioPinX) == 0)
{
SetGpioSts(GpioOutputList[IoChnl].GpioX,GpioOutputList[IoChnl].GpioPinX,1);
}
else
{
SetGpioSts(GpioOutputList[IoChnl].GpioX,GpioOutputList[IoChnl].GpioPinX,0);
}
#endif
}
/**
* @brief 反转LED口
* @param void
* @retval void
* @note void
* @example void
*/
void IoCtlLedToggle(uint16_t IoChnl)
{
#ifdef USE_LED
if (GetGpioSts(GpioLedList[IoChnl].GpioX, GpioLedList[IoChnl].GpioPinX) == 0)
{
SetGpioSts(GpioLedList[IoChnl].GpioX,GpioLedList[IoChnl].GpioPinX,true);
}
else
{
SetGpioSts(GpioLedList[IoChnl].GpioX,GpioLedList[IoChnl].GpioPinX,false);
}
#endif
}
/**
* @brief 重写Printf函数
* @param
* @retval void
* @note void
* @example void
*/
#if defined (__GNUC__) || defined (__SEGGER__)
#include <SysCall.c>
#elif defined(__CC_ARM) || defined(__CLANG_ARM)
int fputc(int ch, FILE *f)
{
UsartSendChar(TTY_COM, ch);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch;
ch = UsartReceiveChar(TTY_COM);
return ch;
}
#endif

64
Bsp/Src/Delay.c Normal file
View File

@@ -0,0 +1,64 @@
#include "Bsp.h"
#define DEM_CR *(volatile u32 *)0xE000EDFC
#define DWT_CR *(volatile u32 *)0xE0001000
#define DWT_CYCCNT *(volatile u32 *)0xE0001004
#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)
/**
* @brief 初始化延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void DelayConfig(void)
{
DEM_CR |= DEM_CR_TRCENA;
DWT_CR |= DWT_CR_CYCCNTENA;
DWT_CYCCNT = 0;
}
/**
* @brief 读取DWT计数器的值
* @param void
* @retval void
* @note void
* @example void
*/
uint32_t GetDwtCnt(void)
{
return((uint32_t)DWT_CYCCNT);
}
/**
* @brief 微秒级延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void DelayUs(uint32_t Us)
{
uint32_t Start = 0,End = 0,Ts = 0;
Start = GetDwtCnt();
Ts = Us * (SystemCoreClock / 1000000U);
End = Start + Ts;
while(GetDwtCnt() < End){;}
}
/**
* @brief 毫秒级延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void DelayMs(uint32_t Ms)
{
DelayUs(Ms * 1000);
}

122
Bsp/Src/Gpio.c Normal file
View File

@@ -0,0 +1,122 @@
#include "Bsp.h"
/**
* @brief 使能GPIO的时钟
* @param [in] GPIOx GPIO组
* @retval void
* @note void
* @example void
*/
void GpioClockEnable(uint32_t GpioX, FunctionalState State)
{
switch (GpioX) {
case GPIOA_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, State);
break;
case GPIOB_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, State);
break;
case GPIOC_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, State);
break;
case GPIOD_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, State);
break;
case GPIOE_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, State);
break;
case GPIOF_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, State);
break;
case GPIOG_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, State);
break;
default:
break;
}
}
/**
* @brief 初始化GPIO口外设的时钟
* @param void
* @retval void
* @note void
* @example void
*/
void BspInitGpioClock(void)
{
#ifdef USE_GPIOA
GpioClockEnable(GPIOA_BASE,ENABLE);
#endif
#ifdef USE_GPIOB
GpioClockEnable(GPIOB_BASE,ENABLE);
#endif
#ifdef USE_GPIOC
GpioClockEnable(GPIOC_BASE,ENABLE);
#endif
#ifdef USE_GPIOD
GpioClockEnable(GPIOD_BASE,ENABLE);
#endif
#ifdef USE_GPIOE
GpioClockEnable(GPIOE_BASE,ENABLE);
#endif
#ifdef USE_GPIOF
GpioClockEnable(GPIOF_BASE,ENABLE);
#endif
#ifdef USE_GPIOG
GpioClockEnable(GPIOG_BASE,ENABLE);
#endif
}
/**
* @brief 配置GPIO口
* @param
* @retval void
* @note void
* @example void
*/
void GpioConfig(GPIO_TypeDef *GpioX, uint16_t GpioPinX,
GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed)
{
GPIO_InitTypeDef GpioInitSt;
GpioInitSt.GPIO_Pin = GpioPinX;
GpioInitSt.GPIO_Mode = GpioMode;
GpioInitSt.GPIO_Speed = GpioSpeed;
GPIO_Init(GpioX, &GpioInitSt);
}
/**
* @brief 改变GPIO口状态
* @param
* @retval void
* @note void
* @example void
*/
void SetGpioSts(GPIO_TypeDef *GpioX, uint16_t GpioPinX, bool_t state)
{
if (state == RESET) {
GPIO_ResetBits(GpioX, GpioPinX);
} else if (state == SET){
GPIO_SetBits(GpioX, GpioPinX);
}
}
/**
* @brief 读取GPIO口状态
* @param
* @retval void
* @note void
* @example void
*/
bool_t GetGpioSts(GPIO_TypeDef *GpioX, uint16_t GpioPinX)
{
return (bool_t)GPIO_ReadInputDataBit(GpioX, GpioPinX);
}

176
Bsp/Src/Interrupt.c Normal file
View File

@@ -0,0 +1,176 @@
#include "Bsp.h"
SYSTEM_INT_REG SystemIntReg;
/**
* @brief 禁止中断
* @param
* @retval void
* @note void
* @example void
*/
void DisAllowInt(void)
{
__set_PRIMASK(1);
}
/**
* @brief 允许中断
* @param
* @retval void
* @note void
* @example void
*/
void AllowInt(void)
{
__set_PRIMASK(0);
}
/**
* @brief 中断回调函数初始化为空
* @param
* @retval void
* @note void
* @example void
*/
void IntCbInit(void)
{
NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL);
//memset(&SystemIntReg,NULL,sizeof(SYSTEM_INT_REG));
}
/**
* @brief 中断回调函数注册
* @param
* @retval void
* @note void
* @example void
*/
void IntCbReg(uint32_t Vector, void(*Func)(uint32_t))
{
switch (Vector)
{
#ifdef USE_USART1
case USART1_IRQn:
SystemIntReg.Usart1.CallBack = Func;
SystemIntReg.Usart1.IntId = USART1_BASE;
break;
#endif
#ifdef USE_USART2
case USART2_IRQn:
SystemIntReg.Usart1.CallBack = Func;
SystemIntReg.Usart1.IntId = USART2_BASE;
break;
#endif
#ifdef USE_USART3
case USART3_IRQn:
SystemIntReg.Usart1.CallBack = Func;
SystemIntReg.Usart1.IntId = USART3_BASE;
break;
#endif
#ifdef USE_USART4
case UART4_IRQn:
SystemIntReg.Usart1.CallBack = Func;
SystemIntReg.Usart1.IntId = UART4_BASE;
break;
#endif
#ifdef USE_USART5
case UART5_IRQn:
SystemIntReg.Usart1.CallBack = Func;
SystemIntReg.Usart1.IntId = UART5_BASE;
break;
#endif
default:
break;
}
}
/**
* @brief 中断NVIC配置
* @param
* @retval void
* @note void
* @example void
*/
void IntSetLevel(uint32_t Vector, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = Vector;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NvicPrePriority;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = NvicSubPriority;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief 关闭中断
* @param
* @retval void
* @note void
* @example void
*/
void SetIntDisable(uint32_t Vector)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = Vector;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
#ifdef USE_USART1
void USART1_IRQHandler(void)
{
if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART1, USART_FLAG_ORE);
}
(*SystemIntReg.Usart1.CallBack)(SystemIntReg.Usart1.IntId);
}
#endif
#ifdef USE_USART2
void USART2_IRQHandler(void)
{
if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART2, USART_FLAG_ORE);
}
(*SystemIntReg.Usart2.CallBack)((void*)SystemIntReg.Usart2.IntId);
}
#endif
#ifdef USE_USART3
void USART3_IRQHandler(void)
{
if (USART_GetFlagStatus(USART3, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART3, USART_FLAG_ORE);
}
(*SystemIntReg.Usart3.CallBack)((void*)SystemIntReg.Usart3.IntId);
}
#endif
#ifdef USE_USART4
void USART4_IRQHandler(void)
{
if (USART_GetFlagStatus(UART4, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(UART4, USART_FLAG_ORE);
}
(*SystemIntReg.Usart4.CallBack)((void*)SystemIntReg.Usart4.IntId);
}
#endif
#ifdef USE_USART5
void USART5_IRQHandler(void)
{
if (USART_GetFlagStatus(UART5, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(UART5, USART_FLAG_ORE);
}
(*SystemIntReg.Usart5.CallBack)((void*)SystemIntReg.Usart5.IntId);
}
#endif

153
Bsp/Src/Usart.c Normal file
View File

@@ -0,0 +1,153 @@
#include "Bsp.h"
/**
* @brief 使能GPIO的时钟
* @param [in] GPIOx GPIO组
* @retval void
* @note void
* @example void
*/
void UsartClockEnable(uint32_t ComId, FunctionalState State)
{
switch (ComId) {
case USART1_BASE:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, State);
break;
case USART2_BASE:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, State);
break;
case USART3_BASE:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, State);
break;
case UART4_BASE:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, State);
break;
case UART5_BASE:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, State);
break;
default:
break;
}
}
/**
* @brief 初始化USART口外设的时钟
* @param void
* @retval void
* @note void
* @example void
*/
void BspInitUsartClock(void)
{
#ifdef USE_USART1
UsartClockEnable(COM0,ENABLE);
#endif
#ifdef USE_USART2
UsartClockEnable(COM1,ENABLE);
#endif
#ifdef USE_USART3
UsartClockEnable(COM2,ENABLE);
#endif
#ifdef USE_USART4
UsartClockEnable(COM3,ENABLE);
#endif
#ifdef USE_USART5
UsartClockEnable(COM4,ENABLE);
#endif
}
/**
* @brief 配置USART口
* @param
* @retval void
* @note void
* @example void
*/
void UsartConfig(uint32_t ComId, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{
USART_InitTypeDef UsartInitSt;
//初始化串口
USART_StructInit(&UsartInitSt);
UsartInitSt.USART_BaudRate = baud;
UsartInitSt.USART_WordLength = DataBits;
UsartInitSt.USART_StopBits = StopBits;
UsartInitSt.USART_Parity = Parity;
UsartInitSt.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
UsartInitSt.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init((USART_TypeDef*)ComId, &UsartInitSt);
//配置中断
USART_ITConfig((USART_TypeDef*)ComId, USART_IT_RXNE, ENABLE);
//启用串口
USART_Cmd((USART_TypeDef*)ComId, ENABLE);
USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC);
}
/**
* @brief USART口发送数据
* @param
* @retval void
* @note void
* @example void
*/
void UsartSendChar(uint32_t ComId,uint8_t Data)
{
USART_SendData((USART_TypeDef*)ComId, Data);
while (USART_GetFlagStatus((USART_TypeDef*)ComId, USART_FLAG_TC) != SET);
}
/**
* @brief USART口发送字符串
* @param
* @retval void
* @note void
* @example void
*/
void UsartSendStr(uint32_t ComId,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);
}
}
/**
* @brief USART口发送数据
* @param
* @retval void
* @note void
* @example void
*/
uint8_t UsartReceiveChar(uint32_t ComId)
{
return USART_ReceiveData((USART_TypeDef*)ComId);
}
/**
* @brief 通用USART配置
* @param
* @retval void
* @note void
* @example void
*/
void UsartStdConfig(uint32_t ComId, uint32_t baud)
{
UsartConfig(ComId, baud, DataBit_8, StopBit_1, Parity_No);
}
/**
* @brief 高级串口配置
* @param
* @retval void
* @note void
* @example void
*/
void UsartAdvConfig(uint32_t ComId, uint32_t baud, uint8_t DataBits, uint8_t StopBits, uint8_t Parity)
{
UsartConfig(ComId, baud, DataBits, StopBits, Parity);
}