本帖最后由 火辣西米秀 于 2021-3-24 20:56 编辑
华大单片机HC32L110//HC32F003/HC32F005 系列芯片具有相同的UART外设资源,它们的printf代码可以通用。
本例程中使用P35引脚为printf输出引脚,波特率为19200,数据格式:1位起始位+8位数据位+1位停止位。
UART初始化代码如下:
void Debug_UartInit(void)
{
uint32_t u32Pclk1 = 0;
uint32_t u32ReloadVal = 0;
///UART0_TXD/P35, 19200bps
M0P_GPIO->P3ADS_f.P35 = 0;
M0P_GPIO->P35_SEL_f.SEL = 3;
M0P_GPIO->P3DIR_f.P35 = 0;
u32Pclk1 = Sysctrl_GetPClkFreq();
u32ReloadVal = 65536 - u32Pclk1 * 2 / 19200 / 32;
M0P_TIM0->CR_f.CT = 0;
M0P_TIM0->CR_f.MD = 1;
M0P_TIM0->CR_f.TOGEN = 1;
M0P_TIM0->ARR = u32ReloadVal;
M0P_TIM0->CNT = u32ReloadVal;
M0P_TIM0->CR_f.CTEN = 1;
M0P_UART0->SCON_f.DBAUD = 1;
M0P_UART0->SCON_f.SM01 = 1;
}
UART发送单字节代码如下:
void Debug_Output(uint8_t u8Data)
{
M0P_UART0->SCON_f.REN = 0;
M0P_UART0->SBUF = u8Data;
while (TRUE != M0P_UART0->ISR_f.TI)
{
;
}
M0P_UART0->ICR_f.TICLR = 0;
}
printf函数重映射代码如下:
int fputc(int ch, FILE *f)
{
if (((uint8_t)ch) == '\n')
{
Debug_Output('\r');
}
Debug_Output(ch);
return ch;
}
/******以上代码在ddl.c中,也可以根据自己的架构放到用户自己相应文件中*******/
主程序中代码如下:
int32_t main(void)
{
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralBt, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0, TRUE);
Debug_UartInit();
while (1)
{
printf("printf test \r\n");
delay1ms(1000);
}
}
运行结果如下:
|