From f3a5db74be11bfdf08812095444dd88aab0f0b14 Mon Sep 17 00:00:00 2001 From: hm-thinkbook14p Date: Sun, 26 Apr 2026 22:43:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20main.cpp=E4=B8=ADUART=E5=85=A8?= =?UTF-8?q?=E9=9D=A2=E6=94=B9=E7=94=A8C++=20UartBus=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main.cpp | 117 +++++++++++++-------------------------------------- 1 file changed, 30 insertions(+), 87 deletions(-) diff --git a/app/main.cpp b/app/main.cpp index f36e66c..0dbd7ca 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -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");