bootloader中,使用串口打印
UART配置示例:
#include "bf0_hal.h"
#include "stdio.h"
/* UART handler declaration */
UART_HandleTypeDef UartHandle;
/* menuconfig configuration */
#ifdef CONSOLE_UART1
#define UART_INSTANCE hwp_usart1
#elif defined(CONSOLE_UART3)
#define UART_INSTANCE hwp_usart3
#elif defined(CONSOLE_UART4)
#define UART_INSTANCE hwp_usart4
#else
#error RT_CONSOL_DEVICE_NAME is not supported yet in this app.
#endif
#ifdef __CC_ARM /*ARMCC*/
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__ARMCC_VERSION)&&(__ARMCC_VERSION >= 6010050) /*ARMCLANG*/
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
#elif __ICCARM__ /*IAR**/
#error Not support yet
#else /*GCC*/
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
int write(int fd, char *ptr, int len)
{
if (fd > 2)
return -1;
HAL_UART_Transmit(&UartHandle, ptr, len, 0xFFFF);
return len;
}
#endif
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g, write a character to the USARTl and loop until the end of transmission */
HAL_UART_Transmit(&UartHandle,(uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/**
* @brief Configure the UART peripheral.
*/
void uart_config(void)
{
/* Step 1. select clock : 52x默认为RC48,bootloader里没有校准,需要配置为XT48M */
HAL_HPAON_EnableXT48();
#ifndef SOC_SF32LB52X
HAL_RCC_HCPU_ClockSelect(RCC_CLK_MOD_HP_PERI, RCC_CLK_PERI_HXT48);
#endif
#ifdef SOC_SF32LB56X
#ifdef CONSOLE_UART4
HAL_RCC_LCPU_ClockSelect(RCC_CLK_MOD_LP_PERI, RCC_CLK_PERI_HXT48);
#endif
#endif
/* Step 2. pinmux configuration. */
#ifdef SOC_SF32LB52X
HAL_PIN_Set(PAD_PA19, USART1_TXD, PIN_PULLUP, 1);
HAL_PIN_Set(PAD_PA18, USART1_RXD, PIN_PULLUP, 1);
#elif defined(SOC_SF32LB56X)
HAL_PIN_Set(PAD_PA34, USART1_TXD, PIN_PULLUP, 1);
HAL_PIN_Set(PAD_PA30, USART1_RXD, PIN_PULLUP, 1);
#else
#error PINMUX for USARTx is not set.
#endif
/* Step 3. UART initialization. */
/* UART configured as follows:
- Word Length = 8 Bits (8 data bit + o parity bit) :
BECAREFUL : Program 7 data bits + l parity bit in pc HyperTerminal
- Stop Bit = One stop bit
- Parity = No parity
- BaudRate = 1000000 baud
- Hardware flow control disabled (RTS and CTS signals) */
UartHandle.Instance = UART_INSTANCE;
UartHandle.Init.BaudRate = 1000000;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&UartHandle) != HAL_OK)
HAL_ASSERT(0); /* Initialization Error */
}
/**************************main**************************************/
#if defined(__CC_ARM) || defined(__CLANG_ARM)
int main(void)
#elif defined(__ICCARM__)
int __low_level_init(void)
#elif defined(__GNUC__)
int entry(void)
#endif
{
HAL_Delay_us(0);
/* UART configuration */
uart_config();
/* 使用printf打印 */
printf("This is test log.
");
... ...
说明:
调用
uart_config
初始化UART配置后,可使用printf
打印。如果打印无效,可确认以下信息:
配置的是哪个串口:CONSOLE_UART1/CONSOLE_UART2/CONSOLE_UART3等。
确认uart_config中的UART PIN脚配置是否正确。