搜索
bottom↓
楼主: xukai871105

STM32 移植FreeModbus 详细过程

  [复制链接]

出0入0汤圆

发表于 2015-12-7 10:48:00 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2015-12-7 14:47:37 | 显示全部楼层
好文章,留着学!

出0入0汤圆

发表于 2015-12-13 22:28:40 | 显示全部楼层
收藏备用,谢谢楼主共享

出0入0汤圆

发表于 2015-12-13 23:40:24 | 显示全部楼层
楼主,你好,这个帖子你已经维持回复了几年,真不简单,辛苦你了。
参照了你的帖子,移植到stm32中已经通讯成功,现有一问题。
我的下位机设备,上电后,modbus通讯正常。
当通过通讯协议,让下位机触发执行一个复合动作(包括很多内容,如AD,比较、继电器切换、相位控制,double类型的浮点数运算,等等)
此时modbus通讯不正常,下位机没有返回正确的指令。

我先检查了串口的中断优先级,为比较高的级别,并且调试模式下,确认在复合动作时,有收到查询指令。
void USART1_IRQHandler(void)
{
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {
                prvvUARTRxISR();//接受中断   <-----上位机的查询指令,有触发到这里
                USART_ClearITPendingBit(USART1, USART_IT_RXNE);               
        }
。。。
能跑到这个位置。但下面这个位置,不会被触发(mb.c中)

    /* Check if there is a event available. If not return control to caller.
     * Otherwise we will handle the event. */
    if( xMBPortEventGet( &eEvent ) == TRUE )
    {
        switch ( eEvent )
        {
        case EV_READY:
            break;

        case EV_FRAME_RECEIVED:
            eStatus = peMBFrameReceiveCur( &ucRcvAddress, &ucMBFrame, &usLength );    <-----不能触发到这里
            if( eStatus == MB_ENOERR )
            {
                /* Check if the frame is for us. If not ignore the frame. */
                if( ( ucRcvAddress == ucMBAddress ) || ( ucRcvAddress == MB_ADDRESS_BROADCAST ) )
                {
                    ( void )xMBPortEventPost( EV_EXECUTE );
                }
            }
            break;
当下位机的复合动作执行完,通讯又能恢复到正常,我估计是复合动作占用到系统很多资源,而影响到了modbus的接受时序要求,才出现这样的情况,
这个问题该如何下手去解决呢,暂时没有什么思路,你有碰到类似情况吗,希望能指导下,谢谢

出0入0汤圆

发表于 2015-12-14 11:35:44 | 显示全部楼层
modbus应用,标记。

出0入0汤圆

发表于 2016-1-9 12:16:36 | 显示全部楼层
很不错。

出0入0汤圆

发表于 2016-1-9 23:59:22 | 显示全部楼层
终于把这个帖子从头看到尾了,刚接触modbus,现也对它有点了解了,准备移植,谢谢LZ的辛苦维护!加油

出0入0汤圆

发表于 2016-2-23 22:01:41 | 显示全部楼层
nuncle 发表于 2015-10-13 16:08
永康程序猿发来贺电, 按照肉猪的, 在KEIL上成功了。原子mini开发板

兄弟帮忙共享下Keil下的工程呗,完成楼猪656楼的文字债

出0入0汤圆

发表于 2016-2-23 22:02:38 | 显示全部楼层
贴子、回帖都很精彩!,受益匪浅。楼主好人一生平安。

出0入0汤圆

发表于 2016-2-25 22:30:45 | 显示全部楼层
先MARK 过几天开始看Modbus

出0入0汤圆

发表于 2016-2-25 23:28:55 | 显示全部楼层
niuxxxxx

出0入0汤圆

发表于 2016-3-10 18:25:26 | 显示全部楼层
太好了, 看了代码,知道了线圈和离散

出0入0汤圆

发表于 2016-3-11 08:59:39 | 显示全部楼层
cgzasa 发表于 2015-12-13 23:40
楼主,你好,这个帖子你已经维持回复了几年,真不简单,辛苦你了。
参照了你的帖子,移植到stm32中已经通讯 ...

不知道你timer定时T35时间设置正确了

出0入0汤圆

发表于 2016-3-11 23:11:32 | 显示全部楼层
mark 一下

出0入0汤圆

发表于 2016-3-12 11:12:15 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2016-3-12 11:35:45 | 显示全部楼层
整个要慢慢细看啊,谢谢楼主

出0入0汤圆

发表于 2016-3-25 09:45:18 | 显示全部楼层
sklli 发表于 2016-3-11 08:59
不知道你timer定时T35时间设置正确了

这个问题,后来解决了,是因为没有调用        ( void )eMBPoll(  );
我开了个定时器,优先级较高,然后调用eMBPoll() 就能够通讯正常了。

出0入0汤圆

发表于 2016-3-25 10:09:21 | 显示全部楼层
mark modbus协议

出0入0汤圆

发表于 2016-4-8 15:10:56 | 显示全部楼层
freemodbus 有1.5个字符超时的处理吗?

出0入0汤圆

发表于 2016-4-8 23:31:37 | 显示全部楼层
楼主,一般移植这种事,英语是不是要学好…

出0入0汤圆

发表于 2016-4-10 08:22:34 | 显示全部楼层
呵呵,我小学没毕业移植一样弄好了,年轻人还是要多学学.

出0入0汤圆

发表于 2016-4-10 11:35:38 | 显示全部楼层
正在学习中

出0入0汤圆

发表于 2016-4-10 12:05:22 | 显示全部楼层
谢谢分享!!!

出0入0汤圆

发表于 2016-4-22 08:05:26 | 显示全部楼层
还是这个帖子经典!

出0入10汤圆

发表于 2016-4-22 08:18:35 | 显示全部楼层
绝世好资料,呵呵。打算移植到STM32平台上,刚好可以参考下

出0入0汤圆

发表于 2016-4-22 13:31:01 | 显示全部楼层
没接触过modbus,强帖!!!

出0入0汤圆

发表于 2016-5-6 13:33:27 | 显示全部楼层
很好的学习资料,顶顶顶

出0入0汤圆

发表于 2016-5-7 10:27:06 | 显示全部楼层
讲解的非常详细,受教了

出0入0汤圆

发表于 2016-5-7 12:40:30 | 显示全部楼层
谢谢楼主分享!

出0入0汤圆

发表于 2016-5-18 22:20:41 | 显示全部楼层
CRC校验应该是低位在先,高位在后。

出0入0汤圆

发表于 2016-5-20 18:51:00 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2016-5-20 23:02:48 来自手机 | 显示全部楼层
非常感谢楼主,期待楼主更好的应用

出0入0汤圆

发表于 2016-5-24 17:03:05 | 显示全部楼层
多谢分享 谢谢

出0入0汤圆

发表于 2016-7-15 10:22:31 | 显示全部楼层
好东西,谢谢分享,收藏!!!

出0入0汤圆

发表于 2016-7-22 17:07:01 | 显示全部楼层
请问一下 我只有在给寄存器赋值之后 程序采可以正常运行

        usSRegHoldBuf[0]=0;//
        usSRegHoldBuf[1]=0;//
        usSRegHoldBuf[2]=0;//
        usSRegHoldBuf[3]=0;//
        usSRegHoldBuf[4]=0;//

如果是不等于0的竖直,程序就不运行了 请问能指点一下吗?

出0入0汤圆

发表于 2016-7-26 15:03:14 | 显示全部楼层
将楼主的IAR工程移植到了MDK环境下,可惜没有板子,没法测试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-8-11 14:58:27 | 显示全部楼层
又看了一遍 ,好贴!

出0入0汤圆

发表于 2016-9-17 23:26:56 | 显示全部楼层
需要,谢谢

出0入0汤圆

发表于 2016-9-18 23:22:55 来自手机 | 显示全部楼层
好文章啊,

出0入0汤圆

发表于 2016-9-20 21:58:35 | 显示全部楼层
不错,想移植到STM8上...

出0入0汤圆

发表于 2016-9-21 15:02:53 | 显示全部楼层
说的很详细!有所了解

出0入0汤圆

发表于 2016-9-21 22:12:48 | 显示全部楼层
请教一下,函数eMBErrorCode eMBRegisterCB( unsigned char ucFunctionCode, pxMBFunctionHandler pxHandler )是干什么用的?似乎没用到啊。

出0入0汤圆

发表于 2016-9-22 10:26:01 | 显示全部楼层
eMBRTUSend()里面完全不需要ENTER_CRITICAL_SECTION去关闭全局中断,因为里面已经有vMBPortSerialEnable( FALSE, TRUE ); 。

出0入0汤圆

发表于 2016-10-26 21:01:44 | 显示全部楼层
mark   

出0入0汤圆

发表于 2016-11-4 17:29:56 | 显示全部楼层
很好 谢谢 收藏了

出0入0汤圆

发表于 2016-12-2 08:22:26 | 显示全部楼层
lz代码运行一段时间后freemodbus死掉 波特率越高死得越快  不知怎么才能让它自己恢复正常

出0入0汤圆

发表于 2016-12-2 09:01:18 | 显示全部楼层
很好的帖子,感谢楼主的分享

出0入0汤圆

发表于 2016-12-29 22:49:44 | 显示全部楼层
MARK,freemodbus讲得很详细

出0入0汤圆

发表于 2016-12-30 19:01:56 | 显示全部楼层
很好的学习资料,谢谢楼主

出0入0汤圆

发表于 2017-3-6 00:10:26 | 显示全部楼层
楼主,freemodbus是否支持主机?
我看有人改了一下就可以做主机!

出0入0汤圆

发表于 2017-3-14 22:26:27 | 显示全部楼层
楼主你好 ,看了你的freemodbus移植受益匪浅,有个问题想请教一下,如果想实现两个从机,需要更改那部分内容,除了串口初始化,定时器部分不用动,还有那些地方需要改动?

出0入0汤圆

发表于 2017-3-31 01:16:24 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2017-4-4 18:13:07 | 显示全部楼层
本帖最后由 circle_head 于 2017-4-5 15:12 编辑

   只用在这个数组 sSRegHoldBuf[]  中装数据就能够实现数据的传输了,非常好用。

出0入0汤圆

发表于 2017-4-7 15:54:30 | 显示全部楼层
收藏了, 需要 用到 MODbus

出0入0汤圆

发表于 2017-4-11 13:39:05 | 显示全部楼层
资料不错,收藏下

出0入0汤圆

发表于 2017-5-4 11:51:36 | 显示全部楼层
拜读楼主大作,在此感谢楼主
额,有个问题想请教下楼主...
就是串口发送使用TXE中断还是TC中断的问题,额,我使用TXE测试也是可以使用的.
楼主能解释下您推荐使用TC中断的具体原因嘛?再次感谢楼主...

出0入0汤圆

发表于 2017-5-4 12:49:45 | 显示全部楼层
五年后依然 好文,真心赞一个!

出0入0汤圆

发表于 2017-6-7 11:03:02 | 显示全部楼层
不知道自定义的 写指令函数的响应,应该在什么位置处编写代码?

出0入0汤圆

发表于 2017-6-16 14:11:25 | 显示全部楼层
我之前也移植过,都是靠着网上一些移植过的经验,感谢楼主分享给大家,让很多人可以少走弯路!

出590入992汤圆

发表于 2017-6-16 16:43:11 | 显示全部楼层
造福坛友!

出0入0汤圆

发表于 2017-6-22 16:34:06 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2017-6-23 00:15:02 | 显示全部楼层
收藏起,慢慢看,谢谢楼主分享

出0入0汤圆

发表于 2017-7-10 14:56:50 | 显示全部楼层
学习下,谢楼主

出0入0汤圆

发表于 2017-7-16 17:26:31 | 显示全部楼层

出0入0汤圆

发表于 2017-7-25 19:45:53 | 显示全部楼层
经典永恒!!!!!!!

出0入0汤圆

发表于 2017-7-27 17:54:50 | 显示全部楼层
6666,正好需要学习了

出0入0汤圆

发表于 2017-7-29 12:50:35 | 显示全部楼层
版主,请问怎么测试的?

出0入0汤圆

发表于 2017-7-29 12:51:27 | 显示全部楼层
cgzasa 发表于 2015-12-13 23:40
楼主,你好,这个帖子你已经维持回复了几年,真不简单,辛苦你了。
参照了你的帖子,移植到stm32中已经通讯 ...

你好,请问怎么测试的?

出0入0汤圆

发表于 2017-7-29 13:18:45 | 显示全部楼层
mark,这个有效

出0入0汤圆

发表于 2017-7-29 13:28:07 | 显示全部楼层
好东西,学习了

出0入0汤圆

发表于 2017-9-11 13:13:58 | 显示全部楼层
借鉴了一下,移植到stm8L上了。谢谢

出0入0汤圆

发表于 2017-9-17 09:54:45 | 显示全部楼层
mark 一下

出0入0汤圆

发表于 2017-9-26 15:18:30 | 显示全部楼层
最近刚好在搞这个,受益匪浅

出0入0汤圆

发表于 2017-10-19 14:12:02 | 显示全部楼层
线圈部分01号与05号功能是不是还是存在问题?

出0入0汤圆

发表于 2017-10-20 13:54:51 | 显示全部楼层
神帖,向楼主致敬!

出0入0汤圆

发表于 2017-12-29 11:18:16 | 显示全部楼层
受益匪浅,谢谢楼主的分亨精神!

出0入0汤圆

发表于 2017-12-29 15:15:55 | 显示全部楼层
同道中人,我也搞工控的,电力行业的。MODBUS现在基本要成为标配了

出0入0汤圆

发表于 2017-12-29 19:28:03 | 显示全部楼层
精华,一定要多看几次

出0入0汤圆

发表于 2017-12-30 10:05:33 | 显示全部楼层
FreeModbus  的移植过程~~

出0入0汤圆

发表于 2018-1-4 23:29:43 | 显示全部楼层
freemodbus代码看了些,再看看自己写的代码,差距很大啊!

出0入0汤圆

发表于 2018-3-31 16:15:11 | 显示全部楼层
收藏,果断收藏

出0入0汤圆

发表于 2018-4-11 17:56:17 | 显示全部楼层
pldjn 发表于 2013-1-25 10:19
一直在用自定义的协议,这个有利于节省开发时间。

,嗯,一样一样

出0入0汤圆

发表于 2018-4-11 21:30:39 来自手机 | 显示全部楼层
学习学习,好东西!

出0入0汤圆

发表于 2018-4-23 08:33:52 | 显示全部楼层
好东西,顶一下

出0入0汤圆

发表于 2018-5-2 11:41:51 | 显示全部楼层
这个绝对有收藏价值,感谢!

出0入0汤圆

发表于 2018-5-2 12:38:06 | 显示全部楼层
感谢分享,这个资料太实用了

出200入0汤圆

发表于 2018-5-2 17:28:23 | 显示全部楼层
谢谢分享,好好学习一下~

出0入0汤圆

发表于 2018-5-2 18:02:26 | 显示全部楼层
讲得很好,跟着学习

出0入0汤圆

发表于 2018-5-3 11:17:09 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2018-5-15 09:49:05 | 显示全部楼层
很好的资料,万分感谢

出0入0汤圆

发表于 2018-5-15 09:52:14 | 显示全部楼层
xukai871105 发表于 2012-8-21 11:18
工程代码,IAR 5.5  V3.4库函数

请配合MODBUS POLL工具使用,会有更好的效果!

楼主移植的版本是freemodbus V1.5的吗

出0入0汤圆

发表于 2018-5-17 13:19:19 | 显示全部楼层
mark。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2018-7-7 22:17:03 | 显示全部楼层
楼主是个好人

出0入0汤圆

发表于 2018-7-13 00:41:33 | 显示全部楼层
最近刚好搞搞modebus,收获很大,谢谢楼主。

出0入0汤圆

发表于 2018-7-20 16:06:11 | 显示全部楼层
移植楼主的这个代码,换成FREEMODBUSV1.5的就不行了。原因还在找。。。。看到有说楼主修改协议栈的代码? 有点纠结。。。

出0入0汤圆

发表于 2018-7-20 21:15:13 | 显示全部楼层
有机会搞搞

出0入0汤圆

发表于 2018-7-21 17:12:01 | 显示全部楼层
本帖最后由 技术宅 于 2018-7-21 17:14 编辑

楼主你好,我看了你的文档,在485使能端这我认为应该加上延时,防止第一个字节或者最后一个字节丢失。尤其在速度快如115.2K时,很有可能丢。
void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable ) //串口发送和接收的中断的使能(接收使能,发送使能)
{
    /* If xRXEnable enable serial receive interrupts. If xTxENable enable
     * transmitter empty interrupts.
     */
    if(xRxEnable == TRUE)
    {
        GPIO_WriteHigh(GPIOD, GPIO_PIN_4);
      
        UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);//允许接收中断和溢出中断
        
    }
    else
    {
        GPIO_WriteLow(GPIOD, GPIO_PIN_4);
         //开启485发送使能端,延时
  
        UART2_ITConfig(UART2_IT_RXNE_OR, DISABLE);
    }
   
    if(xTxEnable == TRUE)
    {
        UART2_ITConfig(UART2_IT_TC, ENABLE);   
    }
    else
    {
        UART2_ITConfig(UART2_IT_TC, DISABLE);
    }
   
   
}

出0入0汤圆

发表于 2018-7-21 20:15:59 | 显示全部楼层
新人报道,学习先

出0入0汤圆

发表于 2018-7-21 22:59:23 | 显示全部楼层
晕,楼主不是搞contiki的大神么,没想到在这里碰到了。

出0入0汤圆

发表于 2018-10-26 17:37:18 | 显示全部楼层
学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 00:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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