[G32R] 【G32R501 Micro-EVB测评】2,添加printf打印函数,使调试更方便。

[复制链接]
50|5
stb988 发表于 2025-12-22 22:18 | 显示全部楼层 |阅读模式
       看了一下示例程序,并没有在工程中找到printf打印的示例,那好吧,我自已动手添加一个,复制了一个GPIO的工程,首先在初始化中添加初始化函数
  1.     // UARTA -> myUART0 Pinmux
  2.     //
  3.     GPIO_setPinConfig(myUART0_UARTRX_PIN_CONFIG);
  4.     GPIO_setDrivingCapability(myUART0_UARTRX_GPIO,GPIO_DRIVE_LEVEL_VERY_HIGH);
  5.     GPIO_setPadConfig(myUART0_UARTRX_GPIO, GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
  6.     GPIO_setQualificationMode(myUART0_UARTRX_GPIO, GPIO_QUAL_ASYNC);

  7.     GPIO_setPinConfig(myUART0_UARTTX_PIN_CONFIG);
  8.     GPIO_setDrivingCapability(myUART0_UARTTX_GPIO,GPIO_DRIVE_LEVEL_VERY_HIGH);
  9.     GPIO_setPadConfig(myUART0_UARTTX_GPIO, GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
  10.     GPIO_setQualificationMode(myUART0_UARTTX_GPIO, GPIO_QUAL_ASYNC);
上面的GPIO口初始化,再添加串口初始化程序
  1. void UART_init()
  2. {
  3.     //myUART0 initialization
  4.     UART_clearInterruptStatus(myUART0_BASE, UART_INT_TXFF | UART_INT_RXFF | UART_INT_RXERR | UART_INT_RXRDY_BRKDT | UART_INT_TXRDY | UART_INT_FE | UART_INT_OE | UART_INT_PE);
  5.     UART_clearOverflowStatus(myUART0_BASE);

  6.     UART_resetTxFIFO(myUART0_BASE);
  7.     UART_resetRxFIFO(myUART0_BASE);
  8.     UART_resetChannels(myUART0_BASE);

  9.     UART_setConfig(myUART0_BASE, DEVICE_LSPCLK_FREQ, myUART0_BAUDRATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
  10.     UART_disableLoopback(myUART0_BASE);
  11.     UART_performSoftwareReset(myUART0_BASE);
  12.     UART_setFIFOInterruptLevel(myUART0_BASE, UART_FIFO_TX0, UART_FIFO_RX0);
  13.     UART_enableFIFO(myUART0_BASE);
  14.     UART_enableModule(myUART0_BASE);
  15. }
需要注意的串口的GPIO口是GPIO28,GPIO29,
屏幕截图 2025-12-22 221516.png
  1. // UARTA_RX - GPIO Settings
  2. //
  3. #define GPIO_PIN_UARTA_RX 28
  4. #define myUART0_UARTRX_GPIO 28
  5. #define myUART0_UARTRX_PIN_CONFIG GPIO_28_UARTA_RX
  6. //
  7. // UARTA_TX - GPIO Settings
  8. //
  9. #define GPIO_PIN_UARTA_TX 29
  10. #define myUART0_UARTTX_GPIO 29
  11. #define myUART0_UARTTX_PIN_CONFIG GPIO_29_UARTA_TX
然后添加一个文件retarget.c
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stddef.h>
  4. #include "board.h"
  5. #include "uart.h"

  6. int fputc(int ch, FILE *f)
  7. {
  8.     uint8_t c = (uint8_t)ch;
  9.     UART_writeCharArray(myUART0_BASE, &c, 1);
  10.     return ch;
  11. }

  12. /* GCC/newlib: 提供 _write,以便 printf 重定向 */
  13. #if 1
  14. int _write(int fd, const void *buf, int count)
  15. {
  16.     (void)fd;
  17.     if (buf == NULL || count <= 0) return 0;
  18.     UART_writeCharArray(myUART0_BASE, (const uint8_t *)buf, (uint32_t)count);
  19.     return count;
  20. }
  21. #endif
最后在void example_main(void)中调用printf函数 屏幕截图 2025-12-22 220735.png
大功告成
星空魔法师 发表于 2026-1-21 08:49 | 显示全部楼层
非常实用的教程,特别是对于我们这些需要频繁调试硬件的人来说
 楼主| stb988 发表于 2026-2-15 08:36 | 显示全部楼层
星空魔法师 发表于 2026-1-21 08:49
非常实用的教程,特别是对于我们这些需要频繁调试硬件的人来说

作业天敌在此 发表于 2026-2-15 17:40 | 显示全部楼层
很高兴看到你分享了如何添加printf打印函数的详细步骤,这对于我们这些正在使用G32R501 Micro-EVB的人来说非常实用
HeartbeatEcho 发表于 2026-2-17 08:19 | 显示全部楼层
printf感觉一点也不实用
ShadowDance 发表于 2026-2-18 17:28 | 显示全部楼层
实时内核的串口打印也没有什么特别的地方嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

444

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0