886|1

88

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

[STM32H7R/S]测评 ③串口printf输出日志 [复制链接]

本帖最后由 不爱胡萝卜的仓鼠 于 2024-10-12 00:40 编辑

        在日常调试中日志输出是一个非常重要的功能,今天我们就在上一篇文章工程的基础上增加串口功能。本来这种基础的功能我想跳过,但是调试过程中发现了一个很有意思的事情,想写出来与大家分享

 

一.配置CubeMX

       在配置cubemx前,我们需要知道开发板上ST-Link虚拟串口与H7的那个uart连接,并使用的是哪两个引脚。这个信息可以在《DM01038846_ENV2.0》这个文档中找到,如下图所示

        使用的是PD0、PD1

        接下来我们双击打开cubemx的ioc文件

        在Connectivity中打开UART4,选择“App”的那个框。mode选择“Asynchronous”。接下来还要改一下右边的引脚图,RX默认是PB8,我们要改成PD0(虽然我们待会儿只用于打印日子,暂时用不到RX,不过还是给他配置正确)

        然后点击右上角的生成代码即可

        因为上一篇中ld的那个问题,每次cubemx生成后,都要记得回去把那个文件给变回去

 

二.CubeIDE中代码修改

2.1 发送测试

        首先我们现在测试一下数据能不能发出去,我们直接调用HAL_UART_Transmit函数即可发送数据。我在while1中放了以下测试代码

    unsigned char data[] = "123";
    HAL_UART_Transmit(&huart4, data, sizeof(data), 0xFFFF);

        串口日志正常输出,说明配置没问题

2.2 printf

        想要使用printf函数,需要做一下重定向,首先需要增加以下头文件,否则编译会报错

#include "stdio.h"

        

    然后写一下printf重定向函数

int __io_putchar(int ch)
{
    HAL_UART_Transmit(&huart4 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}

        然后针对float类型的数据,还需要额外再做一个操作

 

把这两个勾上即可

 

然后我们替换刚才的测试函数,换上printf来试试

	printf("666\r\n");
    float a = 3.14;
    printf("a = %.2f\r\n", a);

 

结果如下

 

三.有意思的事情

        我今天调试一开始使用的串口工具是正点原子的XCOM,平时我默认打开的是sscom,不知道咋了,今天鬼使神差的点了XCOM,既然都打开了,就用他吧。然后这个软件我之前还打开了时间戳

结果发现他一直不出数据,我以为是我的代码有问题,给我一顿好找。最终发现下方的R:的数字是一直在上涨的,但是界面不显示。那我的程序应该没问题,串口是有东西输出的

接下来我换了SSCOM,就正常了(SSCOM我也勾选了时间戳)

 

经过我反复的尝试,我发现XCOM的时间戳功能可能有点小问题,当向XCOM定时发送数据时,我的发送频率超过某个值后(这个值的边界是多少我没测试),他就会一直接收,不打印出来。

我猜测他是接收完数据后,要多少时间没有新的数据,他就认为接收完毕,然后把它打印出来,但是这个时间他写的比较大(我代码里400ms的delay发送一次数据,他这个至少是大于400ms的),就导致了这个问题。

 

解决策略:

1.关闭时间戳功能

2.一定要时间戳的,要么换软件,要么保证不要很快的定时发送

3.XCOM开发人员修改一下代码,当RX buffer到达一定值后,例如50字节,就强制输出一次,不要一直收

 

 

此帖出自stm32/stm8论坛

最新回复

CubeIDE中代码修改是技术活哈   详情 回复 发表于 2024-10-13 09:06
点赞 关注
 

回复
举报

6815

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

CubeIDE中代码修改是技术活哈

此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表