新增 DebugSerialPort 支持,CommonCenter、CanMv 和 DfPlayer 改用智能指针
Some checks failed
Build and Upload Artifact / build and upload-artifact (push) Has been cancelled

This commit is contained in:
2025-05-12 13:17:44 +08:00
parent 21eec9089e
commit a7485fca40
5 changed files with 48 additions and 25 deletions

View File

@@ -4,6 +4,7 @@
#include "../Common/df_player.hpp"
#include "../Common/ultrasonic.hpp"
#include "../config.hpp"
#include "Common/serial_port.hpp"
class CommonCenter {
public:
@@ -31,4 +32,14 @@ public:
}
return *instance;
}
static SerialPort& GetDebugSerialPort() {
static constexpr auto kLength = 256;
static constexpr auto kTimeout = 1000;
static SerialPort* instance = nullptr;
if (instance == nullptr) {
instance = new SerialPort(Config::kDebugUart, kLength, kTimeout);
}
return *instance;
}
};

View File

@@ -1,19 +1,18 @@
#pragma once
#include <cstdint>
#include <memory>
#include "../Common/serial_port.hpp"
class CanMv {
public:
explicit CanMv(UART_HandleTypeDef* uart) : serialPort(new SerialPort(uart, kLength, kTimeout)) {}
explicit CanMv(UART_HandleTypeDef* uart) : serialPort(std::make_unique<SerialPort>(uart, kLength, kTimeout)) {}
~CanMv() {
delete serialPort;
}
~CanMv() = default;
private:
static constexpr uint32_t kLength = 128;
static constexpr uint32_t kTimeout = 10;
SerialPort* serialPort;
std::unique_ptr<SerialPort> serialPort;
};

View File

@@ -1,16 +1,15 @@
#pragma once
#include <cstdint>
#include <memory>
#include "../Common/serial_port.hpp"
class DfPlayer {
public:
explicit DfPlayer(UART_HandleTypeDef* uart) : serialPort(new SerialPort(uart, kLength, kTimeout)) {}
explicit DfPlayer(UART_HandleTypeDef* uart) : serialPort(std::make_unique<SerialPort>(uart, kLength, kTimeout)) {}
~DfPlayer() {
delete serialPort;
}
~DfPlayer() = default;
void Play();
void Stop();
@@ -52,7 +51,7 @@ private:
static constexpr uint32_t kLength = 128;
static constexpr uint32_t kTimeout = 10;
SerialPort* serialPort;
std::unique_ptr<SerialPort> serialPort;
void SendCommand(Command cmd, uint16_t param = 0);

View File

@@ -2,35 +2,45 @@
#include "stm32h563xx.h"
#include "Center/common_center.hpp"
#include "Common/serial_port.hpp"
#include "Helper/gpio_helper.hpp"
#include "Helper/delay_helper.h"
#include "config.hpp"
void TerminateHandler() {
auto led = GpioHelper::GpioInit(GPIOB, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_PIN_SET);
auto led = Config::kLed;
while (true) {
led.Toggle();
DelayS(1);
}
}
void Setup() {
void GpioSetup() {
GpioHelper::EnableAllGpioPeripheral();
GpioHelper::GpioInit(GPIOB, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_PIN_RESET);
}
void CommonSetup() {
CommonCenter::GetUltrasonic();
CommonCenter::GetDfPlayer();
CommonCenter::GetCanMv();
CommonCenter::GetDebugSerialPort();
}
void Setup() {
GpioSetup();
DelaySetup();
auto ultrasonic = CommonCenter::GetUltrasonic();
auto dfPlayer = CommonCenter::GetDfPlayer();
auto canMv = CommonCenter::GetCanMv();
CommonSetup();
}
extern "C" void AppStart() {
Setup();
auto ultrasonic = CommonCenter::GetUltrasonic();
auto dfPlayer = CommonCenter::GetDfPlayer();
auto canMv = CommonCenter::GetCanMv();
auto& ultrasonic = CommonCenter::GetUltrasonic();
auto& debugSerialPort = CommonCenter::GetDebugSerialPort();
while (true) {
// Example usage of the classes
ultrasonic.GetDistance();
dfPlayer.PlayTrack(1);
DelayMs(1000); // Delay for 1 second
auto disatnce = ultrasonic.GetDistance();
debugSerialPort.WriteLineBlocking("Distance: %.2f cm", disatnce);
DelayS(1); // Delay for 1 second
}
}

View File

@@ -12,7 +12,11 @@ struct Config {
uint32_t channel;
} kCaptureConfig = {{GPIOA, GPIO_PIN_0}, &htim7, TIM_CHANNEL_1};
static inline UART_HandleTypeDef* kDebugUart = &hcom_uart[COM1];
static inline UART_HandleTypeDef* kDfPlayerUart = &hcom_uart[COM1];
static inline UART_HandleTypeDef* kCanMvUart = &hcom_uart[COM1];
static inline UART_HandleTypeDef* kCanMvUart = &hcom_uart[COM1];
static inline GpioHelper::Gpio kLed = {GPIOB, GPIO_PIN_0};
};