HC32L196 芯片 串口输出 printf

1. 首先 配置 keil 项目 option 

HC32L196 芯片 串口输出 printf_第1张图片

选择 Code Generation ARM Compiler :Use default compiler version 5

2. 取消 Use MicroLIB 选项

3. 在uart 代码中 增加


/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)

/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
    x = x;
}

/* 标准库需要的支持类型 */
struct __FILE
{
    int handle;
};

FILE __stdout;

int fputc(int ch, FILE *f)
{
    (void)f;

	Uart_SendDataPoll(M0P_UART3,ch);
	
	return ch;
}

 4. 提供一下完整的uart 配置文件

/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)

/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
    x = x;
}

/* 标准库需要的支持类型 */
struct __FILE
{
    int handle;
};

FILE __stdout;

int fputc(int ch, FILE *f)
{
    (void)f;

	Uart_SendDataPoll(M0P_UART3,ch);
	
	return ch;
}

void uart_init(){

	//串口引脚配置
    App_PortInit();
    
    //串口配置
    App_UartCfg();
}

//UART1中断函数
void Uart3_IRQHandler(void)
{
    if(Uart_GetStatus(M0P_UART3, UartRC))         //UART1数据接收
    {
        Uart_ClrStatus(M0P_UART3, UartRC);        //清中断状态位
       
    }

}

//串口引脚配置
void App_PortInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    
    DDL_ZERO_STRUCT(stcGpioCfg);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟
    
    ///

以上步骤就可以完成 串口的格式化打印输出

如果还需要串口接收,那么就把 RX 的 中断开启,使能中断 

测试效果:

int i = 0 ;
while(1){

	printf("i:%d \r\n",i++);
	
	delay1ms(1000);
		
		
}

HC32L196 芯片 串口输出 printf_第2张图片

你可能感兴趣的:(单片机,嵌入式硬件)