GD32fRGT6单片机如何printf

复制代码
int fputc(int ch, FILE *f) {
    usart_data_transmit(EVAL_COM0,ch);//EVAL_COM0即为usrat0
    while(usart_flag_get(EVAL_COM0, USART_FLAG_TBE) == RESET);
    return ch;
}

在IAR8版本中用此fputc代码即可,而如果是IAR9就要用_write代码。此代码放在main外便可以,不过还需要在main函数内写usart初始化函数gd_eval_com_init(),该函数在eval.h文件里有;

EVAL_COM0是usart0,这个在eval.h文件里有写,该文件是各种硬件接口定义文件。

复制代码
#include "gd32f4xx.h"
#include "main.h"
#include "system_config.h"
#include "laser_distance.h"
#include "gd32f450i_eval.h"//提供所有外设接口,比如usrat0
#include <stdio.h>



int main(void)
{
  uint32_t AHB = rcu_clock_freq_get(CK_AHB);
  uint32_t APB2 = rcu_clock_freq_get(CK_APB2);
  uint32_t APB1 = rcu_clock_freq_get(CK_APB1);
  
    System_Init();
    LED_Init();
    gd_eval_com_init(EVAL_COM0);
    
    printf("GD32F405 Laser Distance Measurement\r\n");
    printf("Timer Frequency: %.1f MHz\r\n", TIMER_FREQUENCY / 1000000.0f);
    printf("Fiber Index: %.3f\r\n", FIBER_INDEX);
    printf("Ready for measurement...\r\n\r\n");
    
    while (1)
    {
        Start_Measurement();
        
        uint32_t timeout = 0;
        while (measure_state == MEASURE_WAITING_FOR_LASER || 
               measure_state == MEASURE_WAITING_FOR_ECHO)
        {
            timeout++;
            if (timeout > MEASUREMENT_TIMEOUT)
            {
                measure_state = MEASURE_TIMEOUT;
                break;
            }
        }
        
        if (measure_state == MEASURE_COMPLETED)
        {
            float dist = Get_Distance();
            Print_Distance(dist);
        }
//        else
//        {
//            printf("Measurement timeout!\r\n");
//        }
//        
//        for (volatile uint32_t i = 0; i < 1000000; i++);
    }
}

// 重定向printf到串口
int fputc(int ch, FILE *f) {
    usart_data_transmit(EVAL_COM0,ch);//EVAL_COM0即为usrat0
    while(usart_flag_get(EVAL_COM0, USART_FLAG_TBE) == RESET);
    return ch;
}
相关推荐
飞睿科技5 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天5 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)6 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术6 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao7 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报8 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110115 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋16 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
梁洪飞18 小时前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
进击的小头19 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机