你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

楼主: mantishell

基于freemodbus的控制器

[复制链接]

11

主题

49

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
 楼主| 发表于 2015-1-25 11:43:50 | 显示全部楼层
帖子太长,接着上一篇帖子:

串口助手测试modbus


    (2)测试命令,测试读多个输入寄存器的值,即eMBFuncReadInputRegister

发送地址为:0A ,发送命令代码为04,寄存器开始地址为00 00 (GPIOA),寄存器个数为0001(GPIOA)

发送0a 04 00 00 00 01 30 B1,无反应,无任何数据返回。

    看一下出现这个问题可能的原因。一是modbus接收不到数据帧,这个通过debug已经排除,可以接收到CRC验证码正确的数据帧,那么一定是modbus不能发送数据,先看看简单串口能不能发送数据,在main里通过USART1Write()进行测试发现发送没问题。

    在上一节的分析可以看出,只有满足两个条件MB协议栈才可以返回数据,一是当接收的数据处理完调用了 eMBRTUSend(&STATE_RX_IDLE)—>STATE_TX_XMIT 使接收状态机进入STATE_TX_XMIT状态;二是 串口发送完成中断 ,从而调用发送状态机进行发送数据。那么先验证第一条,在eMBPoll:peMBFrameSendCur 位置设置断点,看看有没有调用 eMBRTUSend 。可以看到确实可以满足这一条件,由 eMBRTUSend 触发STATE_TX_XMIT状态。



    排除了这一可能,会不会进不到 串口发送完成中断 中断呢?同样在中断函数中设置断点查看仿真结果。果然问题出现在无法进入中断语句去调用发送状态机,那么这个中断触发需要满足什么条件呢?

    //发生发送完成中断

   if(USART_GetITStatus(USART1, USART_IT_TC) == SET)

   {

       prvvUARTTxReadyISR();

       //清除中断标志

       USART_ClearITPendingBit(USART1, USART_IT_TC);

   }

    网上搜了一下,发现在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束。当USART_DR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,所有位发送结束时(送出停止位后)硬件会设置TC标志。

    试试改成USART_IT_TXE这个标准来引发中断,果然就好用了!

    发送0a 04 00 00 0001 30 B1,返回0A 04 02 00 00 1C F1

    那么为什么可以进入USART_IT_TXE中断就不能进入USART_IT_TC中断呢?

    原来在vMBPortSerialEnable中断控制使能函数中控制的是USART_ITConfig(USART1, USART_IT_TXE, ENABLE)这个中断,并不是USART_IT_TC这个中断,没有使能进了中断才怪呢。

    究其USART_IT_TC,即Transmission Complete,需要先发送一个字节后才进入中断,这里称为“发送后中断”。原来是发送完数据引发中断去处理一些事情的意思,而USART_IT_TXE,即发送寄存器空中断,当使能TXEIE后,只要Tx DR空了,就会产生中断。所以,发送完字符串后必须关掉,否则会导致重复进入中断。这也是和TC不同之处。

    数据是返回来了,但是读取GPIOA的数据怎么是全0呢,这显然不正确,再回到eMBRegInputCB()函数中去看一下,接收的地址怎么从1开始而不是设定的从0开始?去eMBFuncReadInputRegister看一下,原来不知道什么原因解析完地址以后出现了usRegAddress++,百度看别人也有类似的问题导致通信格式不正确,注释即可。

    到这里关于freemodbus RTU在STM32上的移植就算结束了,移植的工作不多,但想把协议栈是如何工作的搞清楚需要花一点时间,本文如有错误和不妥的地方还希望请多交流指正。


回复 支持 反对

使用道具 举报

13

主题

106

回帖

0

蝴蝶豆

中级会员

最后登录
2018-4-5
发表于 2015-1-28 08:31:25 | 显示全部楼层
学习了…… 感谢分享…………
回复 支持 反对

使用道具 举报

11

主题

49

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
 楼主| 发表于 2015-2-13 12:41:49 | 显示全部楼层
硬件图纸

HardWareOfModbus.zip

下载

1.15 MB, 下载次数: 70, 下载积分: ST金币 -1

硬件图纸

回复 支持 反对

使用道具 举报

11

主题

49

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
 楼主| 发表于 2015-2-13 12:43:21 | 显示全部楼层
拍了个视频,可惜文件太大,上传不了了
回复 支持 反对

使用道具 举报

14

主题

505

回帖

9

蝴蝶豆

金牌会员

最后登录
2020-11-26
发表于 2017-12-22 10:00:10 | 显示全部楼层
借鉴借鉴
回复 支持 反对

使用道具 举报

5

主题

320

回帖

39

蝴蝶豆

高级会员

最后登录
2020-5-30
发表于 2018-8-9 16:50:21 | 显示全部楼层
不错。学习了.谢谢!
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2019-11-29
发表于 2018-10-23 16:16:19 | 显示全部楼层
好贴,没有积分下载了
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2019-11-29
发表于 2018-10-23 16:25:07 | 显示全部楼层
哪个是pcb图啊
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版