refactor: main.cpp中UART全面改用C++ UartBus类

This commit is contained in:
2026-04-26 22:43:32 +08:00
parent e369d1ccaf
commit f3a5db74be
+30 -87
View File
@@ -35,62 +35,6 @@ static void led_pattern(uint8_t p)
lm.led(3).on();
}
static void init_usart0(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART0);
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9 | GPIO_PIN_10);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9 | GPIO_PIN_10);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
usart_deinit(USART0);
usart_baudrate_set(USART0, 9600U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}
static void uart_putchar(char c)
{
usart_data_transmit(USART0, (uint8_t)c);
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
}
static void uart_puts(const char *s)
{
while (*s)
uart_putchar(*s++);
}
static void uart_putdec(uint32_t val)
{
char buf[16];
int idx = 0;
if (val == 0)
{
uart_puts("0");
return;
}
while (val > 0)
{
buf[idx++] = '0' + (val % 10);
val /= 10;
}
while (idx > 0)
uart_putchar(buf[--idx]);
}
static void reinit_usart0_168m(void)
{
usart_deinit(USART0);
usart_baudrate_set(USART0, 9600U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}
static void test_sdram_driver(void)
{
printf("SDRAM 驱动测试开始...\r\n");
@@ -492,25 +436,27 @@ int main(void)
LedManager::instance().init_all();
led_pattern(0x01);
init_usart0();
{
UartConfig cfg;
cfg.baudrate = 9600;
UartBus::default_instance().init(cfg);
}
led_pattern(0x03);
uart_puts("\r\n===== LSPi Board Bring-Up =====\r\n");
uart_puts("Early boot: LED + UART at 16MHz\r\n");
printf("\r\n===== LSPi Board Bring-Up =====\r\n");
printf("Early boot: LED + UART at 16MHz\r\n");
uint32_t cs = RCU_CFG0 & RCU_CFG0_SCS;
uart_puts("Clock source: ");
printf("Clock source: ");
if (cs == RCU_SCSS_IRC16M)
uart_puts("IRC16M (16MHz)\r\n");
printf("IRC16M (16MHz)\r\n");
else if (cs == RCU_SCSS_HXTAL)
uart_puts("HXTAL (25MHz)\r\n");
printf("HXTAL (25MHz)\r\n");
else if (cs == RCU_SCSS_PLLP)
uart_puts("PLL (168MHz)\r\n");
printf("PLL (168MHz)\r\n");
else
uart_puts("UNKNOWN\r\n");
uart_puts("SystemCoreClock: ");
uart_putdec(SystemCoreClock);
uart_puts(" Hz\r\n");
printf("UNKNOWN\r\n");
printf("SystemCoreClock: %lu Hz\r\n", SystemCoreClock);
for (int i = 0; i < 3; i++)
{
@@ -519,40 +465,37 @@ int main(void)
LedManager::instance().led(1).off();
delay_16m(200);
}
uart_puts("LED blink OK\r\n");
printf("LED blink OK\r\n");
uart_puts("Initializing hardware...\r\n");
printf("Initializing hardware...\r\n");
led_pattern(0x05);
HardwareInit::init();
reinit_usart0_168m();
cs = RCU_CFG0 & RCU_CFG0_SCS;
uart_puts("Clock after init: ");
if (cs == RCU_SCSS_PLLP)
uart_puts("PLL (168MHz)\r\n");
else
uart_puts("UNKNOWN\r\n");
uart_puts("SystemCoreClock: ");
uart_putdec(SystemCoreClock);
uart_puts(" Hz\r\n");
led_pattern(0x07);
uart_puts("LedManager OK\r\n");
led_pattern(0x09);
{
UartConfig cfg;
cfg.baudrate = 9600;
UartBus::default_instance().init(cfg);
}
uart_puts("UartBus init OK\r\n");
cs = RCU_CFG0 & RCU_CFG0_SCS;
printf("Clock after init: ");
if (cs == RCU_SCSS_PLLP)
printf("PLL (168MHz)\r\n");
else
printf("UNKNOWN\r\n");
printf("SystemCoreClock: %lu Hz\r\n", SystemCoreClock);
led_pattern(0x07);
printf("LedManager OK\r\n");
led_pattern(0x09);
printf("UartBus init OK\r\n");
led_pattern(0x0B);
systick_config();
delay_1ms(500);
uart_puts("SysTick OK, delay_1ms available\r\n");
printf("SysTick OK, delay_1ms available\r\n");
led_pattern(0x0C);
printf("\r\n========================================\r\n");