3赞

13回答

0收藏

Freemodbus在051开发板移植成功

   

#开源分享 #开源分享 15995 人阅读 | 13 人回复 | 2013-01-26

从21号开始计划移植Freemodbus到清风051的开发板上,找了一些资料,主要是参考了《STM32 移植FreeModbus 详细过程》这篇文字,http://www.amobbs.com/thread-5491615-1-1.html,阿莫是个比较不错的论坛,建议大家多去转转,会很有帮助。
详细的解释就不说了,上文提到的那篇帖子已经讲的很详细了,这里就说说移植过程中遇到的问题:
开始移植的时候我对定时器就不是很了解,于是看了版主的文档,也在群里问了一下,知道了定时器工作频率分频器和定时器内部分频器是两个不同的分频器,当时觉得反正两个都可以分频,随便用一个好了,选了外部那个分频器,TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);  然后再调试的时候一直出现在收到一个数据后就进入了3.5T的超时中断,怎么搞也搞不定,耗费了很多时间,后来没办法了,想想要不试试只用内部那个分频器,就把这句话注释掉了,用了分频器内部做了预分频,结果居然就可以了,完整的一帧收到了,而且CRC校验也正确,真是有点无语了,有没有人知道为啥?

当接收数据正确之后发现modbuspoll还是收不到数据,再设中断找原因,有个小插曲:发现居然发送帧也并不是预期的帧,而是一个地址错误帧,后来回想起起始地址的问题,因为PLC系统起始地址为1,而很多单片机系统都是0,这个在上述那个帖子里也有提到,而freemodbus又是按起始1开始的,超出了地址边界了,所以出现地址错误帧,于是在回调函数中再将地址减一,这样回复帧的数据就正确了。

但是modbupoll还是收不到数据,仔细查了软件代码,端口设置,什么的都应该没问题,因为485之前调的也比较多了,感觉软件也不会出问题了,怀疑是不是硬件有问题,就打算用万用表量一下485芯片读写控制引脚的电平,发送时的高电平应该为高,可是一量居然2、3引脚没连着一起,后来看了版主的原理图,原来也没有黑点点,确实没连,这个确实很容易出错,各位做硬件设计的以后也要小心。最后补锡,上电,开modbuspoll终于看到了正确的回复。

另外,在串口中断处理函数中增加了一些错误处理,貌似发生溢出错误时会一直进中断,这是个小bug?参考http://blog.csdn.net/love_maomao/article/details/8234039 这篇文章。

还有如果用IAR的编译是出现大量Error[Pa045]: function "xxx" has no prototype这种错误时,在Options里去掉Require prototype选项就可以了



评分

参与人数 1与非币 +5 收起 理由
小菜儿 + 5 赞一个!

查看全部评分

分享到:
回复

使用道具 举报

回答|共 13 个

倒序浏览

沙发

gwtaa

发表于 2013-1-26 14:26:48 | 只看该作者

上一下IAR的工程代码

testFreeModbus_STM32F051.zip

9.76 MB, 下载次数: 611

IAR工程代码

板凳

GY@艳

发表于 2013-1-26 14:38:19 | 只看该作者

gwtaa 发表于 2013-1-26 14:26
上一下IAR的工程代码

干嘛自己做沙发。下次让我来抢哈
爱板  爱板  爱板     https://www.cirmall.com
地板

青风

发表于 2013-1-26 14:43:37 | 只看该作者

相当不错
我的淘宝店:http://qfv5.taobao.com/
5#

gwtaa

发表于 2013-1-26 15:10:32 | 只看该作者

刚才用modbus poll测试了10000多个数据包,没有错误

2013-1-26 15-08-27.jpg (139.29 KB, 下载次数: 178)

2013-1-26 15-08-27.jpg
6#

青风

发表于 2013-1-26 15:49:57 | 只看该作者

gwtaa 发表于 2013-1-26 15:10
刚才用modbus poll测试了10000多个数据包,没有错误

学习了~~~~~~
我的淘宝店:http://qfv5.taobao.com/
7#

fangchangqing

发表于 2013-1-27 10:31:14 | 只看该作者

来看看   
8#

gwtaa

发表于 2013-2-2 15:47:00 | 只看该作者

折腾啊,在stm8s207上也算差不多了,但是有个小bug:就是上电后第一次发送过来的数据,再回复主机时,主机收到那帧的第一个字节(从地址)丢掉了,之后的包都是好的。
9#

fj1161

发表于 2013-9-7 12:11:23 | 只看该作者

学习了~~~~~~~~~~
第五年了,这次一定要坚持到底,不留遗憾!!!
10#

arnogsm

发表于 2013-9-28 10:58:21 | 只看该作者

多謝樓主!!加緊練功!!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条