打印
[其他]

华大单片机HC32L136实现printf

[复制链接]
7322|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、华大的库
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         //测试成功

使用特权

评论回复
5
雨果喝水|  楼主 | 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       
               
}

使用特权

评论回复
6
雨果喝水|  楼主 | 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);
        }
}


使用特权

评论回复
7
雨果喝水|  楼主 | 2021-9-28 20:57 | 只看该作者

使用特权

评论回复
8
kkzz| | 2021-10-2 15:57 | 只看该作者
printf的声明如下:

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

使用特权

评论回复
9
hudi008| | 2021-10-2 15:57 | 只看该作者
在C语言中,变参函数的声明是放在atdarg.h标准库中的

使用特权

评论回复
10
lzmm| | 2021-10-2 15:58 | 只看该作者
#include<stdin.h>  

使用特权

评论回复
11
minzisc| | 2021-10-2 15:58 | 只看该作者
rintf(char* ForMat,...)  

使用特权

评论回复
12
selongli| | 2021-10-2 15:59 | 只看该作者
标准库中的printf 函数原型   

使用特权

评论回复
13
fentianyou| | 2021-10-2 15:59 | 只看该作者
自己实现printf函数  

使用特权

评论回复
14
xiaoyaodz| | 2021-10-2 15:59 | 只看该作者
这个重映射了吗   

使用特权

评论回复
15
febgxu| | 2021-10-2 16:00 | 只看该作者
fput这个代码吗?     

使用特权

评论回复
16
sdlls| | 2021-10-2 16:00 | 只看该作者
做一个简单的类似于printf的实现  

使用特权

评论回复
17
pixhw| | 2021-10-2 16:00 | 只看该作者
如何实现Printf()  

使用特权

评论回复
18
jimmhu| | 2021-10-4 22:19 | 只看该作者
需要重新映射吗   

使用特权

评论回复
19
cemaj| | 2021-10-4 22:19 | 只看该作者
好像是fput重新写就行。   

使用特权

评论回复
20
youtome| | 2021-10-4 22:19 | 只看该作者
用studio.h   

使用特权

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

本版积分规则

87

主题

1171

帖子

0

粉丝