使用的是旧版官方库2.2.0,如果用的是新版库的话需修改,应该差不多
01 确认使用的引脚
需要通过F460数据手册的2.2章节【引脚功能表】确认引脚在功能组里,最后一列不为空的引脚就是可使用的
根据分组自行确认使用的是UARTx
02 初始化串口
通过官方的串口轮询例程【uart_polling】修改,首先初始化要使用的串口
/* Print测试用 */
#define USART_BAUDRATE (115200ul)
#define USART2_CH (M4_USART2)
#define USART2_TX_PORT (PortD)
#define USART2_TX_PIN (Pin01)
#define USART2_TX_FUNC (Func_Usart2_Tx)/* USART2初始化 printf调试用 */
static void USART2_Initialize(void)
{uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART2;const stc_usart_uart_init_t stcInitCfg = {UsartIntClkCkNoOutput,UsartClkDiv_1,UsartDataBits8,UsartDataLsbFirst,UsartOneStopBit,UsartParityNone,UsartSampleBit8,UsartStartBitFallEdge,UsartRtsEnable,};/* Enable peripheral clock */PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);/* Initialize USART IO *///PORT_SetFunc(USART2_RX_PORT, USART2_RX_PIN, USART2_RX_FUNC, Disable);PORT_SetFunc(USART2_TX_PORT, USART2_TX_PIN, USART2_TX_FUNC, Disable);/* Initialize UART */USART_UART_Init(USART2_CH, &stcInitCfg);/* Set baudrate */USART_SetBaudrate(USART2_CH, USART_BAUDRATE);USART_FuncCmd(USART2_CH, UsartTx, Enable);}
printf初始化使用的是hc32_utility.c中定义的函数UART_PrintfInit
,该函数的参数分别是使用的串口通道,波特率以及前面所写的串口初始化函数:
extern void USART_Initialize(void)
{UART_PrintfInit(USART2_CH, USART_BAUDRATE, USART2_Initialize); /* 串口2初始化 printf输出 *///printf("hello");
}
调用了上述官方的printf初始化函数就不需要改动重定向hc32_utility.c中的fputc
函数了,因为默认就是重定向到UART_PrintfInit
所使用的串口的.
库里原先写的fputc
重定向函数如下:
/*********************************************************************************** \brief Re-target fputc function.**** \param [in] ch** \param [in] f**** \retval int32_t********************************************************************************/
int32_t fputc(int32_t ch, FILE *f)
{(void)f; /* Prevent unused argument compilation warning */return (Ok == UartPutChar(m_PrintfDevice, (char)ch)) ? ch: -1;
}
然后就可以通过使用printf函数在串口进行输出调试了
结束