9533|11

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32F407 printf函数打印输出数据到串口调试助手出问题 [复制链接]

 
如题,楼主是STM32F407的板子,用DMA接收数据,DMA接收的数据存放在缓存数组中,然后用printf打印输出缓存数组存放的数据,程序刚加载运行的时候正常,DMA接收到什么数据,printf就打印输出什么数据在串口调试助手显示。但是程序运行一段时间后,就没有数据输出显示了,开始我还以为是因为DMA没有接收到新的数据,所以没有显示。
但是单步debug之后,发现DMA一直有接收到的新数据,因为存放数据的缓存数组里的数据在变化,但是printf不工作了,就是串口调试助手不显示输出了,想请教一下大神,这个是怎么回事,怎么解决,楼主刚做STM32开发没多久,小白一个,希望大神们给一些指点
此帖出自stm32/stm8论坛

最新回复

仔细分析程序流程,弄明白每条指令的意义。  详情 回复 发表于 2017-2-10 15:21
点赞 关注
 

回复
举报

1万

帖子

139

TA的资源

版主

沙发
 
如果程序没有重新烧录过,那检查串口相关部分电路、元件的焊接以及连接导线之类。
此帖出自stm32/stm8论坛

点评

刚又调试了一下,把DMA接收数据的程序语句注释掉就好使了,想知道这是为什么怎么能够解决  详情 回复 发表于 2017-2-10 11:19
板子是自己焊接的板子,刚刚又调试了一下,在while死循环中只执行 printf(“hello”)一开始串口调试助手有输出显示,然后就卡主没有输出了。想问一下版主,如果元器件焊接有问题,会出现这种情况吗  详情 回复 发表于 2017-2-10 10:42
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
chunyang 发表于 2017-2-9 18:01
如果程序没有重新烧录过,那检查串口相关部分电路、元件的焊接以及连接导线之类。

程序重新烧录过啊,每次都是重新编译通过,然后重新烧写到板子的。烧写后,一开始有数据输出显示在串口调试助手,一段时间,就没有输出显示了。
此帖出自stm32/stm8论坛

点评

那就是典型的软件错误。  详情 回复 发表于 2017-2-10 15:20
 
 

回复

109

帖子

2

TA的资源

一粒金砂(中级)

4
 
是使用MDK编程的吗 ?不知道是不是设置里没有打开微库导致的printf不好用的问题,可以进MDK魔术棒Target里勾上USE MicroLIB  重新编译下载试一试
此帖出自stm32/stm8论坛

点评

刚又调试了一下,把DMA接收数据的程序语句注释掉就好使了,想知道这是为什么怎么能够解决  详情 回复 发表于 2017-2-10 11:19
是使用的MDK编程,刚刚看了下魔术棒里的Target,USE MicroLIB已经勾选上了。 上午我又重新调试了一下,这次我把所有的程序都注释掉了,就写了在while(1)里执行printf(“hello”);情况也是一样,一开始串口调试  详情 回复 发表于 2017-2-10 10:15
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
sysjtlwx 发表于 2017-2-10 09:28
是使用MDK编程的吗 ?不知道是不是设置里没有打开微库导致的printf不好用的问题,可以进MDK魔术棒Target里 ...

是使用的MDK编程,刚刚看了下魔术棒里的Target,USE MicroLIB已经勾选上了。
上午我又重新调试了一下,这次我把所有的程序都注释掉了,就写了在while(1)里执行printf(“hello”);情况也是一样,一开始串口调试助手正常输出显示hello,输出一段时间后就不输出了。
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

6
 
chunyang 发表于 2017-2-9 18:01
如果程序没有重新烧录过,那检查串口相关部分电路、元件的焊接以及连接导线之类。

板子是自己焊接的板子,刚刚又调试了一下,在while死循环中只执行 printf(“hello”)一开始串口调试助手有输出显示,然后就卡主没有输出了。想问一下版主,如果元器件焊接有问题,会出现这种情况吗
此帖出自stm32/stm8论坛

点评

不会,这是纯粹的软件问题。  详情 回复 发表于 2017-2-10 15:20
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

7
 
chunyang 发表于 2017-2-9 18:01
如果程序没有重新烧录过,那检查串口相关部分电路、元件的焊接以及连接导线之类。

刚又调试了一下,把DMA接收数据的程序语句注释掉就好使了,想知道这是为什么怎么能够解决
此帖出自stm32/stm8论坛

点评

仔细分析程序流程,弄明白每条指令的意义。  详情 回复 发表于 2017-2-10 15:21
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

8
 
sysjtlwx 发表于 2017-2-10 09:28
是使用MDK编程的吗 ?不知道是不是设置里没有打开微库导致的printf不好用的问题,可以进MDK魔术棒Target里 ...

刚又调试了一下,把DMA接收数据的程序语句注释掉就好使了,想知道这是为什么怎么能够解决
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

139

TA的资源

版主

9
 
散飞雪 发表于 2017-2-10 09:04
程序重新烧录过啊,每次都是重新编译通过,然后重新烧写到板子的。烧写后,一开始有数据输出显示在串口调 ...

那就是典型的软件错误。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

139

TA的资源

版主

10
 
散飞雪 发表于 2017-2-10 10:42
板子是自己焊接的板子,刚刚又调试了一下,在while死循环中只执行 printf(“hello”)一开始串口调试助 ...

不会,这是纯粹的软件问题。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

139

TA的资源

版主

11
 
散飞雪 发表于 2017-2-10 11:19
刚又调试了一下,把DMA接收数据的程序语句注释掉就好使了,想知道这是为什么怎么能够解决

仔细分析程序流程,弄明白每条指令的意义。
此帖出自stm32/stm8论坛

点评

问题已经解决了,原先USART1选择的DMA是通道4数据流5,改成通道4数据流2就好使了,但是还是不明白为什么,STM32的数据手册里也没有写,这两个数据流的区别啊  详情 回复 发表于 2017-2-13 09:30
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

12
 
chunyang 发表于 2017-2-10 15:21
仔细分析程序流程,弄明白每条指令的意义。

问题已经解决了,原先USART1选择的DMA是通道4数据流5,改成通道4数据流2就好使了,但是还是不明白为什么,STM32的数据手册里也没有写,这两个数据流的区别啊
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表