查看: 3941|回复: 5

[经验] 【GD32F207测评】3.不用MicroLib重定向Printf串口打印输出

[复制链接]
  • TA的每日心情
    开心
    2020-11-23 14:54
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-1-26 20:39:59 | 显示全部楼层 |阅读模式
    分享到:
    呵呵,有个函数很关键:
    1. static char _buffer[256];
    2. void EvbUart1Printf(char* fmt, ...)
    3. {
    4.     int i;
    5.     va_list ap;
    6.     va_start(ap, fmt);
    7.     vsprintf(_buffer, fmt, ap);
    8.     va_end(ap);

    9.     for (i = 0; _buffer[i] != '\0'; i++)
    10.     {
    11.         EvbUart1WriteByte(_buffer[i]);
    12.     }
    13. }
    复制代码
    该函数必须包含
    #include <stdio.h>#include <stdlib.h>
    #include <stdarg.h>

    以上三个头文件,有了它,你就可以直接用printf了,不需要选上MicroLib
    原理很简单,高手略过,见笑了,嘻嘻~~~
    1. /*************************************************************************************************
    2. *                                     Trochili RTOS Kernel                                      *
    3. *                                  Copyright(C) 2015 LIUXUMING                                  *
    4. *                                        www.trochili.com                                       *
    5. *************************************************************************************************/


    6. #include "colibri_bsp_uart.h"


    7. void Uart1Config(u32 buad)
    8. {
    9.     /* Configure the GPIO ports */
    10.     GPIO_InitPara  GPIO_InitStructure;
    11.     USART_InitPara  USART_InitStructure;
    12.     //NVIC_InitPara NVIC_InitStructure;

    13.     /* Enable GPIOA clock */
    14.     RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOB, ENABLE );
    15.     /* Enable USART1 APB clock */
    16.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1, ENABLE );
    17.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF, ENABLE);
    18.     GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_6 ;
    19.     GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_AF_PP;
    20.     GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
    21.     GPIO_Init( GPIOB , &GPIO_InitStructure);
    22.     GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_7;
    23.     GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_IN_FLOATING;;
    24.     GPIO_Init( GPIOB , &GPIO_InitStructure);

    25.     GPIO_PinRemapConfig(GPIO_REMAP_USART1, ENABLE);
    26.    
    27.     //USART_DeInit(USART1 );
    28.     USART_InitStructure.USART_BRR                 = 115200;
    29.     USART_InitStructure.USART_WL                  = USART_WL_8B;
    30.     USART_InitStructure.USART_STBits              = USART_STBITS_1;
    31.     USART_InitStructure.USART_Parity              = USART_PARITY_RESET;
    32.     USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
    33.     USART_InitStructure.USART_RxorTx              = USART_RXORTX_RX | USART_RXORTX_TX;
    34.     USART_Init(USART1, &USART_InitStructure);

    35.     /* USART enable */
    36.     USART_Enable(USART1, ENABLE);         
    37.                
    38. #if 0
    39.     /* Enable the USARTx Interrupt */
    40.     NVIC_InitStructure.NVIC_IRQ = USART1_IRQn;
    41.     NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    42.     NVIC_InitStructure.NVIC_IRQSubPriority = 0;
    43.     NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    44.     NVIC_Init(&NVIC_InitStructure);

    45.     /* Enable the USART1 Receive interrupt */
    46.     USART_INT_Set(USART1, USART_INT_RBNE, ENABLE );
    47.           USART_INT_Set(USART1, USART_INT_IDLEF, ENABLE );
    48.        
    49.           NVIC_InitPara NVIC_InitStructure;
    50.        
    51. #endif
    52. }


    53. /*************************************************************************************************
    54. *  功能:向串口1发送一个字符                                                                    *
    55. *  参数:(1) 需要被发送的字符                                                                   *
    56. *  返回:                                                                                       *
    57. *  说明:                                                                                       *
    58. *************************************************************************************************/
    59. void EvbUart1WriteByte(char c)
    60. {
    61.     USART_DataSend(USART1, c);
    62.     while (USART_GetBitState(USART1, USART_FLAG_TBE) == RESET);
    63. }

    64. void EvbUart1WriteByte2(char c)
    65. {
    66.     USART_DataSend(USART1, c);
    67. }
    68. /*************************************************************************************************
    69. *  功能:向串口1发送一个字符串                                                                  *
    70. *  参数:(1) 需要被发送的字符串                                                                 *
    71. *  返回:                                                                                       *
    72. *  说明:                                                                                       *
    73. *************************************************************************************************/
    74. void EvbUart1WriteStr(const char* str)
    75. {

    76.     while (*str)
    77.     {
    78.         USART_DataSend(USART1, * str++);
    79.         while (USART_GetBitState(USART1, USART_FLAG_TBE) == RESET);
    80.     }
    81. }


    82. /*************************************************************************************************
    83. *  功能:从串口1接收一个字符                                                                    *
    84. *  参数:(1) 存储接收到的字符                                                                   *
    85. *  返回:                                                                                       *
    86. *  说明:                                                                                       *
    87. *************************************************************************************************/
    88. void EvbUart1ReadByte(char* c)
    89. {
    90.     while (USART_GetBitState(USART1, USART_FLAG_RBNE) == RESET);
    91.     *c = (USART_DataReceive(USART1));
    92. }


    93. static char _buffer[256];
    94. void EvbUart1Printf(char* fmt, ...)
    95. {
    96.     int i;
    97.     va_list ap;
    98.     va_start(ap, fmt);
    99.     vsprintf(_buffer, fmt, ap);
    100.     va_end(ap);

    101.     for (i = 0; _buffer[i] != '\0'; i++)
    102.     {
    103.         EvbUart1WriteByte(_buffer[i]);
    104.     }
    105. }

    106. void EvbUart1EnableRxInt(void)
    107. {
    108.     /* Enable the USART1 Receive interrupt */
    109.     USART_INT_Set( USART1, USART_INT_RBNE, ENABLE );

    110. }

    111. void EvbUart1EnableTxInt(void)
    112. {
    113.     /* Enable the USART1 Transmoit interrupt */
    114.     USART_INT_Set( USART1, USART_INT_TBE, ENABLE );
    115. }

    复制代码
    头文件:
    1. #ifndef _TCL_COLIBRI_UART_H
    2. #define _TCL_COLIBRI_UART_H


    3. #include "gd32f20x.h"

    4. #include <stdio.h>
    5. #include <stdlib.h>
    6. #include <stdarg.h>

    7. #define printf EvbUart1WriteStr

    8. extern  void Uart1Config(u32 buad);

    9. extern void EvbUart1ReadByte(char* c);
    10. extern void EvbUart1WriteByte(char c);
    11. extern void EvbUart1WriteStr(const char* str);
    12. extern void EvbUart2Config(void);
    13. extern void EvbUart2ReadByte(char* c);
    14. extern void EvbUart2WriteByte(char c);
    15. extern void EvbUart2WriteStr(const char* str);


    16. extern void EvbUart1Printf(char* fmt, ...);

    17. #endif /* _TCL_COLIBRI_UART_H */
    复制代码
    QQ截图20160126202044.jpg

    原工程代码下载:


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-23 14:54
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-1-26 20:42:15 | 显示全部楼层
    来呗,同学们MDK5 1.Colibri_GD32F207-LCD.zip (5.98 MB, 下载次数: 9)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-23 14:54
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-1-26 20:43:27 | 显示全部楼层
             printf("\r\nHello,GD32!");
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-27 09:22:26 | 显示全部楼层
    好多代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-8-5 08:38
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2016-1-28 09:26:38 | 显示全部楼层
    学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-3-13 10:11
  • 签到天数: 1088 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2016-1-30 16:34:06 | 显示全部楼层
    这个重载实用性很高。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 13:30 , Processed in 0.155491 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.