重构BSP架构

This commit is contained in:
2026-05-24 16:29:34 +08:00
parent e0d75f4eb2
commit 15fd21eba6
66 changed files with 5320 additions and 0 deletions
+215
View File
@@ -0,0 +1,215 @@
#include "Bsp.h"
#ifdef USE_DIGITAL_OUTPUT
GPIO_ST DigiTalOutPut[DO_NUM] =
{
GPIOB,GPIO_Pin_8,RESET,
};
#endif
#ifdef USE_DIGITAL_INPUT
GPIO_ST DigiTalInPut[DI_NUM] =
{
GPIOF,GPIO_Pin_8,SET,
GPIOE,GPIO_Pin_4,SET,
GPIOE,GPIO_Pin_3,SET,
};
#endif
//LED灯数组
#ifdef USE_LED
GPIO_ST DigiTalLed[LED_NUM] =
{
GPIOB,GPIO_Pin_5,SET,
GPIOE,GPIO_Pin_5,SET,
};
#endif
/**
* @brief BSP的配置和初始化
* @param void
* @retval void
* @note void
* @example void
*/
void BspInit(void)
{
//关闭所有系统中断
INTERRUPT_DISABLE
//System Delay
SystemDelayConfig();
//Interrupt
SystemInterruptInit();
//Gpio
SystemGpioInit();
{
//DO
#ifdef USE_DIGITAL_OUTPUT
for (uint8_t i = 0; i < DO_NUM; i++) {
GpioConfig(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
GpioSetSts(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,DigiTalOutPut[i].DefaultStatus);
}
#endif
//DI
#ifdef USE_DIGITAL_INPUT
for (uint8_t i = 0; i < DI_NUM; i++) {
GpioConfig(DigiTalInPut[i].GpioPort,DigiTalInPut[i].GpioPin,GPIO_Mode_IPU,GPIO_Speed_50MHz);
}
#endif
//LED
#ifdef USE_LED
for (uint8_t i = 0; i < LED_NUM; i++) {
GpioConfig(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
GpioSetSts(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,DigiTalLed[i].DefaultStatus);
}
#endif
}
//Usart
SystemUsartInit();
{
//串口的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_IPU,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_IPU,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
}
#ifdef EXTRA_BSP
BspExtraInit();
#endif
}
void SystemStart(void)
{
//开启系统中断
INTERRUPT_ENABLE
#ifdef USE_RTOS
#ifdef USE_FREERTOS
#endif
#ifdef USE_UCOS
#endif
#ifdef USE_THREADX
#endif
#endif
}
/**
* @brief 扩展库初始化
* @param void
* @retval void
* @note 理论上扩展库要在BSP的最后加载
* @example void
*/
void BspExtraInit(void)
{
//LetterShell初始化
#ifdef USE_SHELL
LetterShellInit(TTY_COM,TTY_BAUD);
#endif
}
//用户层接口
void BspSystemReboot(void)
{
INTERRUPT_DISABLE
NVIC_SystemReset(); // 执行软件复位
}
/**
* @brief 打开LED灯
* @param Chnl 通道
* @retval void
* @note void
* @example void
*/
void LedOn(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
GpioSetSts(DigiTalLed[Chnl].GpioPort, DigiTalLed[Chnl].GpioPin, LED_ON);
}
/**
* @brief 关闭LED灯
* @param Chnl 通道
* @retval void
* @note void
* @example void
*/
void LedOff(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
GpioSetSts(DigiTalLed[Chnl].GpioPort, DigiTalLed[Chnl].GpioPin, LED_OFF);
}
void LedSet(uint8_t Chnl,uint8_t Sts)
{
if (Chnl >= LED_NUM)
return;
GpioSetSts(DigiTalLed[Chnl].GpioPort, DigiTalLed[Chnl].GpioPin, Sts);
}
/**
* @brief 切换LED灯状态
* @param Chnl 通道 Status 状态
* @retval void
* @note void
* @example void
*/
void LedToggle(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
if (GpioGetSts(DigiTalLed[Chnl].GpioPort, DigiTalLed[Chnl].GpioPin) == LED_ON)
{
GpioSetSts(DigiTalLed[Chnl].GpioPort,DigiTalLed[Chnl].GpioPin,LED_OFF);
}
else
{
GpioSetSts(DigiTalLed[Chnl].GpioPort,DigiTalLed[Chnl].GpioPin,LED_ON);
}
}
/**
* @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