完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近因为学习任务的原因需要使用matlab做上位机程序与stm32单片机通信,可是实现过程中出现了奇怪的问题,具体描述如下:
在烧录好stm32端程序后,可以通过各种串口调试助手实现数据的收发,功能正常。可是在使用matlab进行串口操作时,却什么信息也收不到,也无法向单片机写入数据。 以下分别是当时我使用的stm32端和matlab端的试验性程序: stm32端试验性程序: matlab端试验性程序: 在进行了多天尝试以后,终于发现了问题所在:普中PZ6806L开发板的硬件设计出了问题。在通过USB进行串口通信时,matlab打开串口的方式会使得单片机DTR被持续拉高,致使无法正常收发数据。如果多尝试使用几种串口助手与这个型号的开发板通信的话,可能也会遇到换一种串口助手就没有办法正常通信的情况。 找到问题之后解决方法就非常简单:就是通过上位机将DTR的电平拉高之后再释放。如果是使用串口助手时遇到了这样的问题,就在串口助手的选项里选中DTR再将其取消选中。 如果是使用matlab通信时遇到这样的问题,就通过控制serial对象的DataTerminalReady属性来达到同样的效果: s.DataTerminalReady = ‘on’; s.DataTerminalReady = ‘off’;` 在matlab 2019b以上版本可以使用setDTR(device,true) setDTR(device,false)函数来直接设置DTR状态。 一般情况下,在使用matlab与单片机实现串口通信时,只要设置好了合适的波特率,上位机端和下位机端的数据格式,matlab程序里的响应触发方式(查询方式或中断方式),还有数据位数,停止位,校验位这些参数之后,一般都不会出现什么问题。如果你也很不幸的遇到了各种奇奇怪怪的问题,请不要心急,先尝试使用一个功能简单的试验性程序测试,逐项排查问题。在排查matlab端问题时要多关注serial对象的属性,使用get(obj)函数来查看串口对象的属性,查看属性是否设置正确。实在找不出问题可以考虑换一块单片机和数据线试试来排除硬件故障的可能。 |
|
|
|
只有小组成员才能发言,加入小组>>
2177 浏览 0 评论
1158浏览 3评论
635浏览 2评论
[求助]atmega1280与atmega2560在程序上有什么区别?
2238浏览 1评论
323浏览 1评论
1183浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-18 07:49 , Processed in 1.046120 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号