社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 精华区
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
搜索
查看: 1046|回复: 11

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

[复制链接]

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

回复

使用道具 举报

1万

TA的帖子

146

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

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

点评

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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

点评

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

回复

使用道具 举报

57

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-10 09:28:24 | 显示全部楼层
是使用MDK编程的吗 ?不知道是不是设置里没有打开微库导致的printf不好用的问题,可以进MDK魔术棒Target里勾上USE MicroLIB  重新编译下载试一试

点评

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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

点评

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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

点评

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-2-10 11:19:53 | 显示全部楼层
sysjtlwx 发表于 2017-2-10 09:28
是使用MDK编程的吗 ?不知道是不是设置里没有打开微库导致的printf不好用的问题,可以进MDK魔术棒Target里 ...

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

回复

使用道具 举报

1万

TA的帖子

146

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

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

那就是典型的软件错误。
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

146

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

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

不会,这是纯粹的软件问题。
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

146

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

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

仔细分析程序流程,弄明白每条指令的意义。

点评

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

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-2-13 09:30:20 | 显示全部楼层
chunyang 发表于 2017-2-10 15:21
仔细分析程序流程,弄明白每条指令的意义。

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

回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-9-20 02:53 , Processed in 0.451578 second(s), 16 queries , Redis On.

快速回复 返回顶部 返回列表