单片机反汇编 2024-02-04 21:48 采纳率: 11.1%
浏览 2
已结题

stm32 printf的问题

STM32发送下面的字符串
printf("G0X15.0Y16.0F8000\n");

想写个函数,可以随意改变X 和 Y ,有什么好办法

  • 写回答

5条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-04 21:52
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在STM32环境下,如果您想创建一个函数来动态地通过串口发送格式化的G代码字符串(如您给出的printf("G0X15.0Y16.0F8000\n");),其中X和Y坐标是可以改变的参数,可以定义一个自定义函数并使用可变参数功能。这里是一个基本示例:

    #include <stdio.h>
    #include "stm32f10x_usart.h" // 请根据实际使用的STM32库文件进行包含
    
    // 假设USART1已经初始化完成
    
    void send_GCode(float X, float Y, float FeedRate) {
        char buffer[64]; // 假设最大输出长度为64字节
        snprintf(buffer, sizeof(buffer), "G0X%.1fY%.1fF%d\n", X, Y, (int)FeedRate * 1000); // 根据需要调整精度并转换进给率单位至mm/min
    
        // 现在buffer中存储了格式化后的字符串
        USART_Send(USART1, (uint8_t*)buffer, strlen(buffer), 0xFFFF); // 发送整个字符串到USART1,超时设置为0xFFFF
    }
    
    int main(void) {
        // 初始化USART1...
    
        // 使用自定义函数发送G代码
        send_GCode(15.0, 16.0, 8000.0);
    
        while(1) {
            // 主循环...
        }
    }
    

    请注意:

    • snprintf()函数用于将浮点数格式化到字符串中,同时确保不会超出缓冲区大小。
    • USART_Send()是假设的一个通用USART发送函数,具体名称可能会因不同的STM32 HAL库或标准库实现而不同,请替换为您实际项目中的USART发送函数。

    这样,每次调用send_GCode()函数就可以轻松更改X、Y坐标以及进给率,并且通过串口发送出去。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月13日
  • 已采纳回答 2月5日
  • 创建了问题 2月4日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向