[其他]

华大单片机HC32L136实现printf

[复制链接]
6662|26
手机看帖
扫描二维码
随时随地手机跟帖
雨果喝水|  楼主 | 2021-9-28 20:51 | 显示全部楼层 |阅读模式
一、华大的库
hc32l13x_ddl_Rev1.9.2 Lite
1.打开 hc32l13x_ddl_Rev1.9.2 Lite\driver\src\ddl.c 约208行
#if defined (__CC_ARM)          //KEIL
#pragma import(__use_no_semihosting)
void _sys_exit(int x)
{
    x = x;
}
struct __FILE
{
    int handle;
    /* Whatever you require here. If the only file you are using is */
    /* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef?d in stdio.h. */
FILE __stdout;

#endif

#ifdef __DEBUG
/**
******************************************************************************
** \brief  Re-target putchar function
******************************************************************************/
int fputc(int ch, FILE *f)
{

    if (((uint8_t)ch) == '\n')
    {
        Debug_Output('\r');
    }
    Debug_Output(ch);

    return ch;
}
#endif


使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:52 | 显示全部楼层
修改fputc函数

使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:52 | 显示全部楼层
int fputc(int ch, FILE *f)
{
        Uart_SendDataPoll(M0P_UART0,ch);        
    return ch;
}

使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:53 | 显示全部楼层
二、初始化串口

只是要串口0就行,和上面的fputc要对应.由于hc32l136k8有多pin都可以配置为串口0,所以用宏来定义,决定用哪个pin。
新建usart.h
//#define DEBUG_UART0_B6B7          //测试成功
#define DEBUG_UART0_B8B9            //测试成功
//#define DEBUG_UART0_A9A10         //测试成功

使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:54 | 显示全部楼层
三个pin随便用一个

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

    ///<TX
    stcGpioCfg.enDir = GpioDirOut;       
#if defined(DEBUG_UART0_B6B7)                       
    Gpio_Init(GpioPortB, GpioPin6, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin6, GpioAf2);          //配置Pb6 端口为 010 ---- UART0_TXD UART0模块TXD信号       
#elif defined(DEBUG_UART0_B8B9)
        Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin8, GpioAf7);          //配置Pb8 端口为 ---- UART0_TXD UART0模块TXD信号       
#elif defined(DEBUG_UART0_A9A10)
        Gpio_Init(GpioPortA, GpioPin9, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortA, GpioPin9, GpioAf1);   
#endif
       
    ///<RX
    stcGpioCfg.enDir = GpioDirIn;
#if defined(DEBUG_UART0_B6B7)               
    Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin7, GpioAf2);          //配置Pb7 端口010 ---- UART0_RXD UART0模块RXD信号
#elif defined(DEBUG_UART0_B8B9)
        Gpio_Init(GpioPortB, GpioPin9, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin9, GpioAf7);          //配置Pb9 端口 ---- UART0_RXD UART0模块RXD信号                       
#elif defined(DEBUG_UART0_A9A10)
        Gpio_Init(GpioPortA, GpioPin10, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortA, GpioPin10, GpioAf1);
#endif       
               
}

使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:54 | 显示全部楼层
三、测试
int32_t main(void)
{
        UART0_PortInit();
        Uart0Cfg(38400);
        printf("HC32L136K8TA-MINI \r\n");
        while(1)
        {
                printf("+++......\r\n");
                delay1ms(1000);
        }
}


使用特权

评论回复
雨果喝水|  楼主 | 2021-9-28 20:57 | 显示全部楼层
864856153109885d11.png

使用特权

评论回复
kkzz| | 2021-10-2 15:57 | 显示全部楼层
printf的声明如下:

int printf(const char *format, ...);  

使用特权

评论回复
hudi008| | 2021-10-2 15:57 | 显示全部楼层
在C语言中,变参函数的声明是放在atdarg.h标准库中的

使用特权

评论回复
lzmm| | 2021-10-2 15:58 | 显示全部楼层
#include<stdin.h>  

使用特权

评论回复
minzisc| | 2021-10-2 15:58 | 显示全部楼层
rintf(char* ForMat,...)  

使用特权

评论回复
selongli| | 2021-10-2 15:59 | 显示全部楼层
标准库中的printf 函数原型   

使用特权

评论回复
fentianyou| | 2021-10-2 15:59 | 显示全部楼层
自己实现printf函数  

使用特权

评论回复
xiaoyaodz| | 2021-10-2 15:59 | 显示全部楼层
这个重映射了吗   

使用特权

评论回复
febgxu| | 2021-10-2 16:00 | 显示全部楼层
fput这个代码吗?     

使用特权

评论回复
sdlls| | 2021-10-2 16:00 | 显示全部楼层
做一个简单的类似于printf的实现  

使用特权

评论回复
pixhw| | 2021-10-2 16:00 | 显示全部楼层
如何实现Printf()  

使用特权

评论回复
jimmhu| | 2021-10-4 22:19 | 显示全部楼层
需要重新映射吗   

使用特权

评论回复
cemaj| | 2021-10-4 22:19 | 显示全部楼层
好像是fput重新写就行。   

使用特权

评论回复
youtome| | 2021-10-4 22:19 | 显示全部楼层
用studio.h   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

1063

帖子

0

粉丝