搜索
bottom↓
楼主: xukai871105

STM32 移植FreeModbus 详细过程

  [复制链接]

出0入0汤圆

发表于 2013-12-26 19:19:47 | 显示全部楼层
没有看到你的工程文件哦!我想移植到LPC1768中

出0入0汤圆

发表于 2013-12-26 19:23:15 | 显示全部楼层
有成功移植到LPC17XX的朋友吗?

出0入0汤圆

 楼主| 发表于 2013-12-27 11:02:21 | 显示全部楼层
liuqianren 发表于 2013-12-26 19:23
有成功移植到LPC17XX的朋友吗?

应该不难,一个定时器,一个串口中断即可!

出0入0汤圆

发表于 2013-12-27 13:00:03 | 显示全部楼层
xukai871105 发表于 2013-12-27 11:02
应该不难,一个定时器,一个串口中断即可!

有工程文件吗?通讯是比较复杂的东西,我想具体看看通讯软件框架是如何构成的!

出0入0汤圆

发表于 2013-12-30 15:54:45 | 显示全部楼层
mark 狠狠的标记了。。
马上要用

出0入0汤圆

发表于 2013-12-30 22:30:29 | 显示全部楼层
linlingpeng 发表于 2013-10-2 15:53
经过两个星期的学习,终于搞明白了,在stm32f103vct6上移植freemodbus(程序实测stm32f103rbt6下也能用)。遇 ...

老大在哪找的视频,可否给推荐下,谢谢

出0入0汤圆

发表于 2013-12-31 08:53:40 | 显示全部楼层
真是好资料,谢谢你这么细心的整理!

出0入8汤圆

发表于 2013-12-31 12:57:53 | 显示全部楼层
好贴, mark

出0入0汤圆

发表于 2013-12-31 19:52:01 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2013-12-31 20:14:53 | 显示全部楼层
好味好味好味好味

出0入0汤圆

发表于 2013-12-31 21:28:00 | 显示全部楼层
xukai871105 发表于 2012-9-19 15:41
FreeModbus的uCOS应用,我争取这周整理出来!

多谢各位提的意见,我好好改正,希望大家可以满意! ...

楼主怎么不继续写稿子了呢? 期待中。。。

出0入0汤圆

 楼主| 发表于 2014-1-1 10:52:01 | 显示全部楼层
zxc2769 发表于 2013-12-31 21:28
楼主怎么不继续写稿子了呢? 期待中。。。

应该是在这个帖子里面的,我自己都找不到了!
你可以关注CSDN中的xukai871105!

出0入0汤圆

发表于 2014-1-11 10:38:28 | 显示全部楼层
赞,谢谢分享!!!

出0入0汤圆

发表于 2014-1-18 11:49:10 | 显示全部楼层
学习!!!!!!!!!!!

出0入0汤圆

发表于 2014-1-18 20:34:39 | 显示全部楼层
mark         

出0入13汤圆

发表于 2014-2-7 07:16:34 来自手机 | 显示全部楼层
楼主这个真心不错,学习了

出0入0汤圆

发表于 2014-2-15 15:56:36 | 显示全部楼层
收藏了,再看看

出0入0汤圆

发表于 2014-2-22 10:39:05 | 显示全部楼层
hejiang177 发表于 2013-11-26 10:08
兄弟,其实我也有这个疑问因为在这个函数中usAddress 变量在上一个调用这个函数时,自加了一,所 以这里u ...

你在程序里把地址改为1就可以了

出0入0汤圆

发表于 2014-2-22 12:07:01 | 显示全部楼层
这似乎是能用can bus,不过不知道支不支持无线数据传输。。

出0入0汤圆

 楼主| 发表于 2014-2-23 10:49:59 | 显示全部楼层
bli19 发表于 2014-2-22 12:07
这似乎是能用can bus,不过不知道支不支持无线数据传输。。

CAN BUS上也有相应的应用层协议,例如CANOPEN

无线的话也有自身的应用层协议,例如基于802.15.4的zigbee

出0入0汤圆

发表于 2014-2-23 11:33:50 | 显示全部楼层
留着以后用

出0入0汤圆

发表于 2014-2-26 12:49:53 | 显示全部楼层
看过楼主网络学习资料 也写的很好

出0入0汤圆

发表于 2014-3-1 11:36:33 | 显示全部楼层
好文章,没玩过modbus,
mark,有空移植玩玩  
谢谢大神

出0入0汤圆

发表于 2014-3-1 17:06:28 | 显示全部楼层
谢谢楼主,辛苦了

出0入0汤圆

发表于 2014-3-1 22:59:51 | 显示全部楼层
标记,有空再细看……

出0入0汤圆

发表于 2014-3-2 03:07:28 | 显示全部楼层
mark
标记,有空再细看……

出0入0汤圆

发表于 2014-3-2 12:04:20 | 显示全部楼层
感觉lz的细心,觉得发送可以用dma方式

出0入0汤圆

发表于 2014-3-6 14:48:11 | 显示全部楼层
怎么还不出第十页TCP,等了一年了。

出0入0汤圆

 楼主| 发表于 2014-3-7 12:15:14 | 显示全部楼层
dz_xinyu 发表于 2014-3-6 14:48
怎么还不出第十页TCP,等了一年了。

要不放个代码,我就不写的那么详细了!邮箱拿来!

出0入0汤圆

发表于 2014-3-7 16:25:49 | 显示全部楼层
modbus竟然有这货,一直在工程中用modbus,都是自己实现的,顶一个,有时间研究下。

出0入0汤圆

发表于 2014-3-9 22:55:41 | 显示全部楼层
擦,顶一下,楼主牛逼,COOL逼了,顶一下备用!!!~~~~~~~

出0入0汤圆

发表于 2014-3-10 01:13:58 | 显示全部楼层
javabean 发表于 2012-9-19 13:24
我在51上移植过freemodbus,在STM上直接搞个RTOS做个任务就差不多了吧

顶一下”。。。。。。。

出0入0汤圆

发表于 2014-3-10 09:48:07 | 显示全部楼层
不错的看看呀

出0入0汤圆

发表于 2014-3-10 09:54:19 | 显示全部楼层
文章相当不错

出0入0汤圆

发表于 2014-3-13 12:13:43 | 显示全部楼层
wushaofei1985 发表于 2012-9-21 23:52
很早以前看过,一直没用过,自己通过大段的switch套switch语句解析MOSBUS。呵呵,这个我感觉也就那样吧,可 ...

不错,自己解析更能理解协议

出0入0汤圆

发表于 2014-3-13 21:29:24 | 显示全部楼层
非常感谢,最近正在做这个东东,谢谢了!

出0入0汤圆

发表于 2014-3-13 22:35:41 | 显示全部楼层
楼主你好,请教下,移植了FreeeModbus后,只有刚开始第一次通信才能成功,后面的都成功不了,貌似就第一次进入了接收中断,后面的都没有进去,仔细看了下代码,貌似发送完后开了接收中断啊。。。

出0入0汤圆

发表于 2014-3-14 08:53:19 | 显示全部楼层
xukai871105 发表于 2014-3-7 12:15
要不放个代码,我就不写的那么详细了!邮箱拿来!

dz_xinyu@sina.com    多谢大神!!!!

出0入0汤圆

 楼主| 发表于 2014-3-14 09:20:58 | 显示全部楼层
dz_xinyu 发表于 2014-3-14 08:53
多谢大神!!!!

今天晚上上传到github,并通过邮件给你一份,如何!!!

出0入0汤圆

 楼主| 发表于 2014-3-14 09:22:04 | 显示全部楼层
dz_xinyu 发表于 2014-3-14 08:53
多谢大神!!!!

我就不写详细的说明了!要有说明的话,我也写到csdn里面吧!

出0入0汤圆

发表于 2014-3-14 09:31:06 | 显示全部楼层
xukai871105 发表于 2014-3-14 09:20
今天晚上上传到github,并通过邮件给你一份,如何!!!

谢谢!!!

出0入0汤圆

 楼主| 发表于 2014-3-14 22:44:30 | 显示全部楼层

git工程,请clone
https://github.com/xukai871105/uip_freemodbus_tcp

出0入0汤圆

 楼主| 发表于 2014-3-14 22:46:05 | 显示全部楼层
min2004 发表于 2013-10-4 00:32
等待 modbus tcp发布!

请clone
https://github.com/xukai871105/uip_freemodbus_tcp

出0入0汤圆

 楼主| 发表于 2014-3-14 22:47:46 | 显示全部楼层
gtiger.9898 发表于 2013-6-7 16:06
谢谢楼主,已经搞定!!另外希望楼主做下  tcp modbus?可以吗

modbus tcp 请clone
https://github.com/xukai871105/uip_freemodbus_tcp

出0入0汤圆

发表于 2014-3-19 01:23:37 | 显示全部楼层
maek 留个记号

出0入0汤圆

发表于 2014-3-19 10:33:58 | 显示全部楼层
xukai871105 发表于 2014-3-14 22:47
modbus tcp 请clone
https://github.com/xukai871105/uip_freemodbus_tcp

楼主,没用过IAR,你给的例子用IAR编译一下好多错误,求指教!!

出0入0汤圆

发表于 2014-3-19 11:10:41 | 显示全部楼层
是个好东西,先做个标记

出0入0汤圆

发表于 2014-3-19 16:37:05 | 显示全部楼层
很给力的帖子~·

出0入0汤圆

 楼主| 发表于 2014-3-20 20:13:20 | 显示全部楼层
dz_xinyu 发表于 2014-3-19 10:33
楼主,没用过IAR,你给的例子用IAR编译一下好多错误,求指教!!

IAR 6.5 难道大家用的都是Keil

出0入0汤圆

发表于 2014-3-21 09:08:18 | 显示全部楼层
我在网上找了很多关于怎么配置IAR文件路径,但是配置了很多种方式,都是以失败告终,还有为什么我在网上下载别的iar的例程,直接编译就没有错误,也不需要配置,求大神指点一二。

出0入0汤圆

发表于 2014-3-21 12:33:22 | 显示全部楼层
感觉好困难,要学好久,

出0入0汤圆

发表于 2014-3-21 12:40:16 | 显示全部楼层
不明觉厉

出0入0汤圆

 楼主| 发表于 2014-3-21 21:19:56 | 显示全部楼层
dz_xinyu 发表于 2014-3-21 09:08
我在网上找了很多关于怎么配置IAR文件路径,但是配置了很多种方式,都是以失败告终,还有为什么我在网上下 ...

错误提示是什么!你用的是哪个IAR版本!

出0入0汤圆

 楼主| 发表于 2014-3-21 21:20:13 | 显示全部楼层
dz_xinyu 发表于 2014-3-21 09:08
我在网上找了很多关于怎么配置IAR文件路径,但是配置了很多种方式,都是以失败告终,还有为什么我在网上下 ...

你平时用什么,我可以再做一个!

出0入0汤圆

发表于 2014-3-24 10:13:21 | 显示全部楼层
xukai871105 发表于 2014-3-21 21:20
你平时用什么,我可以再做一个!

我用MDK4.12,你能用这个编译器写一个吗?大神

出0入0汤圆

 楼主| 发表于 2014-3-24 10:47:48 | 显示全部楼层
dz_xinyu 发表于 2014-3-24 10:13
我用MDK4.12,你能用这个编译器写一个吗?大神

既然群众需要,我只能照做了!

出0入0汤圆

 楼主| 发表于 2014-3-24 10:51:35 | 显示全部楼层
dz_xinyu 发表于 2014-3-24 10:13
我用MDK4.12,你能用这个编译器写一个吗?大神

不过你需要等段时间,我下面比较忙!

出0入0汤圆

发表于 2014-3-24 14:44:39 | 显示全部楼层
大神,还有个问题,就是你这个程序下载到板子里之后,用modbus poll测试,一般在20分钟左右就会出现timeout error这个错误。就是不太稳定

出0入0汤圆

发表于 2014-3-28 04:28:10 | 显示全部楼层
好贴,刚开始还在想自己写个简单协议,有了这个modbus可以移植试试看

出0入0汤圆

 楼主| 发表于 2014-3-28 14:11:28 | 显示全部楼层
dz_xinyu 发表于 2014-3-24 14:44
大神,还有个问题,就是你这个程序下载到板子里之后,用modbus poll测试,一般在20分钟左右就会出现timeout ...

我在项目中一直使用freemodbus,最长的差不多1年半吧,20分钟出现问题的情况我并没有多次遇到过!

出0入0汤圆

发表于 2014-3-29 18:55:10 | 显示全部楼层
必须留名,这个要顶。

出0入0汤圆

发表于 2014-4-8 17:28:04 | 显示全部楼层
xukai871105 发表于 2012-8-12 20:00
五 定时器相关部分代码编写
        定时器的作用前面已经说明了,在这里就罗列一下相关的移植代码。定时器 ...

楼主,发现问题哦!
控制线圈总是不对,测试结果如下:
01 0F 00 00 00 0A 02 CD 01 70 68命令过去,xMBUtilSetBits函数出来的结果是0x00cd
01 0F 00 00 00 0A 02 CD 02 70 68命令过去,xMBUtilSetBits函数出来的结果是0x00ce

出0入0汤圆

发表于 2014-4-9 08:55:19 | 显示全部楼层

非常好,非常好。
佩服楼主的开源精神。

出0入0汤圆

 楼主| 发表于 2014-4-9 11:05:35 | 显示全部楼层
bondxie3 发表于 2014-4-8 17:28
楼主,发现问题哦!
控制线圈总是不对,测试结果如下:
01 0F 00 00 00 0A 02 CD 01 70 68命令过去,xMBU ...

是这样的,控制线圈部分的代码超过8个就会有问题,以前有网友提出了问题修改了该代码!
你可以找找,这个论坛有点不好,没有代码仓库即使我发现问题现在也无法修改我上传的代码!

出0入0汤圆

 楼主| 发表于 2014-4-9 11:06:44 | 显示全部楼层
bondxie3 发表于 2014-4-8 17:28
楼主,发现问题哦!
控制线圈总是不对,测试结果如下:
01 0F 00 00 00 0A 02 CD 01 70 68命令过去,xMBU ...

你可以看看我freemodbus modbus TCP的帖子里面就修正了这个问题!

出0入0汤圆

发表于 2014-4-9 11:37:02 | 显示全部楼层
有中文注释,支持!

出0入0汤圆

发表于 2014-4-9 14:40:43 | 显示全部楼层
xukai871105 发表于 2014-4-9 11:06
你可以看看我freemodbus modbus TCP的帖子里面就修正了这个问题!

找到问题了,eMBRegCoilsCB函数修改如下:
//写操作
      case MB_REG_WRITE:
        while( iNCoils > 0 )
        {
          xMBUtilSetBits( s_u8CoilBuf, usBitOffset,
                        ( uint8_t )( iNCoils > 8 ? 8 : iNCoils ),
                        *pucRegBuffer++ );
                  iNCoils -= 8;
                usBitOffset += 8;//增加
        }

出0入0汤圆

发表于 2014-4-9 14:51:11 | 显示全部楼层
留作以后学习用

出0入0汤圆

发表于 2014-4-9 20:51:06 | 显示全部楼层
绝世好贴!STM32的modbus,mark下!

出0入0汤圆

 楼主| 发表于 2014-4-9 21:00:35 | 显示全部楼层
bondxie3 发表于 2014-4-9 14:40
找到问题了,eMBRegCoilsCB函数修改如下:
//写操作
      case MB_REG_WRITE:

对了就是这里,向你说一声抱歉!

出0入0汤圆

发表于 2014-4-10 10:02:54 | 显示全部楼层
支持楼主这种一丝不苟搞技术的精神!更难能可贵的是乐于助人,开源共享的精神!

出0入0汤圆

发表于 2014-4-10 10:43:00 | 显示全部楼层
mark 稍后研究··········

出0入0汤圆

发表于 2014-4-10 12:50:43 | 显示全部楼层
又学到不少东西!

出0入0汤圆

发表于 2014-4-11 01:04:03 | 显示全部楼层
标记一下!谢谢楼主!

出0入0汤圆

发表于 2014-4-11 10:33:24 | 显示全部楼层
mark free modbus

出0入0汤圆

发表于 2014-4-16 20:37:20 | 显示全部楼层
单单看帖都是学习啊

出0入0汤圆

发表于 2014-4-22 19:12:13 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2014-4-22 22:48:25 | 显示全部楼层
好东西,顶起了

出0入0汤圆

发表于 2014-4-22 23:11:27 | 显示全部楼层
先收下 好东西

出0入0汤圆

发表于 2014-4-26 11:22:52 | 显示全部楼层
不错,mark,有时间在看看

出0入0汤圆

发表于 2014-5-7 09:55:22 | 显示全部楼层
你好  我想问一下  移植freemodbus 的时候 port.h 中部分变量类型的重定义 我在我的工程里面已经有了  我该如何修改  free modbus 中的头文件 该如何包含   就是文件路径

出0入0汤圆

发表于 2014-5-8 08:58:52 | 显示全部楼层
我和楼主一样用屏通的屏,呵呵

出0入0汤圆

发表于 2014-5-14 11:18:25 | 显示全部楼层
请问连读寄存器功能我怎么只能读取3个寄存器内容 没法读取3个以上的

出0入0汤圆

发表于 2014-5-16 10:11:18 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2014-5-22 17:11:55 | 显示全部楼层
昨天自己写的个modbus的从机,支持03  06  10功能号,刚测试了一天,通信正常,暂时没发现bug,感觉freemodbus功能比较全面,但是处理机制比较繁琐。其实,只要帧识别出来了,解析就相对容易了。我的硬件平台是STM32+232,识别帧的思路是这样的: 关发送中断,开接收中断,开辟一个接收区,接收到数据就存入缓存,然后单片机空闲时就检测缓存,发现有数据进来,等待N个ms后(不是采用延时的方式,等待的原因,是因为有这种情况,MCU刚接收到第一个字节,就开始处理数据,处理第二个字节的数据时,实际上第二个字节还未进入接收区,即接收数据的速度跟不上处理数据的速度),对数据进行处理,由于没有采用3.5、1.5个字节帧识别的方式,处理数据时,收到的是两帧数据,或者更多,只解析第一个完整帧,其他的数据丢掉,对于03  06  10功能号,帧的长度是能够解析出来,对于其他的功能号应该也可以吧,帧识别出来后,解析就容易了。 感觉这种识别帧的方式还是不妥,欢迎各位拍砖,提出更好的方案,发几段相关的代码

void main(void)
{
    bsp_ModbusRTUSlave_Init();
    bsp_InitTimer();
    LED_Init();
    bsp_StartTimer(1,10);
    bsp_StartTimer(2,500);
    for(;;)
    {
        bsp_ModbusRTUSlave_decode();
        if(bsp_CheckTimer(2) == 1)
        {
            bsp_StartTimer(2,500);
            GPIOB->ODR ^=GPIO_Pin_9;  
        }
    }
}


void USART2_ISR(void)
{
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
        /* Read one byte from the receive data register */
        usart.data[usart.write] = USART_ReceiveData(USART2);
        usart.write++;
        if(usart.write==USART_DATA_SIZE)  usart.write = USART_DATA_SIZE - 1; //防止缓冲区溢出出错
        
        USART_ClearITPendingBit(USART2, USART_IT_RXNE);
    }
}

void bsp_ModbusRTUSlave_decode(void)
{
    uint16_t dat_buff;
    if(usart.write > 0 && usart.Rx_delay_CNT > 200)//缓冲区接收到数据  延时200ms再处理
    {
        usart.slaveID = usart.data[0];
        usart.function = usart.data[1];
        usart.exceptionCode = 0x00; // 错误类型清零
        switch(usart.function)
        {
            //case 0x01:ReadCoils_Handle();break;  //Read Coils 这种"位"是可读写的,在PLC中为可读写的线圈,如数字量输出、中间继电器等
            //case 0x02:ReadDiscreteInputs_Handle();break;  //Read Discrete Inputs 这种"位"是只读的,不能进行写操作,在PLC中为只读的线圈,如数字量输入
            case 0x03:ReadHoldingRegisters_Handle();break;  //Read Holding Registers  这种寄存器可读写  0x0001 <= Quantity of Registers <= 0x007D
            //case 0x04:ReadInputRegisters_Handle();break;  //Read Input Registers    这种寄存器只能读,不能写
            //case 0x05:WriteSingleCoil_Handle();break;  //Write Single Coil
            case 0x06:WriteSingleRegister_Handle();break;  //Write Single Register
            //case 0x0F:WriteMultipleCoils_Handle();break;  //Write Multiple Coils
            case 0x10:WriteMultipleregisters_Handle();break;  //Write Multiple registers   0x0001 <= Quantity of Registers <= 0x007B
            default : break; //usart.exceptionCode = 0x01;注释掉了,用不着,而且还会有误判的情况,错误类型:功能号不支持
        }
        
        if(usart.exceptionCode != 0 && usart.slaveID == SLAVE_ID)
        {
            usart.send[0] = SLAVE_ID;
            usart.send[1] = usart.function | 0x80;//function + 0x80
            usart.send[2] = usart.exceptionCode;
            
            dat_buff = ModbusRTU_CRC(usart.send,3);
            
            usart.send[3] = (uint8_t)(dat_buff & 0x00FF);
            usart.send[4] = (uint8_t)(dat_buff >> 8);
            
            bsp_ModbusRTUSlave_Tx(usart.send, 5); //发送相应的消息给主机
        }
        
        UART_clear_buf();
    }
}

static void WriteMultipleregisters_Handle(void)
{
    uint8_t i;
    uint16_t dat_CRC,dat_Address,dat_Quantity;
    dat_CRC = ModbusRTU_CRC(usart.data, usart.data[6] + 7); // 检验前N个字节
    //CRC添加到消息中时,低字节先加入,然后高字节。
    if(dat_CRC == (uint16_t)(usart.data[usart.data[6] + 8] << 8 | usart.data[usart.data[6] + 7])) usart.CRCerror = 0; //CRC校验正确
    else                                                          usart.CRCerror = 1; //CRC校验出错
   
    if(usart.slaveID == SLAVE_ID && usart.CRCerror == 0)//从机地址正确  CRC校验正确  接着往下处理
    {
        dat_Quantity = (uint16_t)(usart.data[4] << 8 | usart.data[5]); //Quantity of Outputs 在消息中  高位在前  低位在后
        if(dat_Quantity >= 0x0001 && dat_Quantity <= 0x007B && usart.data[6] == (dat_Quantity * 2))  //0x0001 <= Quantity of Outputs <= 0x007B
        {
            dat_Address = (uint16_t)(usart.data[2] << 8 | usart.data[3]); //Address在消息中  高位在前  低位在后
            if((dat_Address + dat_Quantity) <= HOLDINGREG_DATA_SIZE)  //Address 要在范围之内
            {
                for(i = 0; i < dat_Quantity; i++) //写入相应的寄存器的值
                {
                    HoldingReg_data[dat_Address + i] = (uint16_t)(usart.data[i * 2 + 7] << 8 | usart.data[i * 2 + 8]);
   
                }
               
                for(i = 0; i < 6; i++) usart.send[i] = usart.data[i]; //将接收到的消息的前一部分+CRC反馈给主机
                dat_CRC = ModbusRTU_CRC(usart.send,6);
                usart.send[6] = (uint8_t)(dat_CRC & 0x00FF);
                usart.send[7] = (uint8_t)(dat_CRC >> 8);
               
                bsp_ModbusRTUSlave_Tx(usart.send, 8); //发送相应的消息给主机
            }
            else usart.exceptionCode = 0x02; //错误类型:Address 不在范围之内
        }
        else  usart.exceptionCode = 0x03; //错误类型:Quantity of Outputs 不在范围之内
    }
}

出0入0汤圆

发表于 2014-5-22 17:14:50 | 显示全部楼层
void SysTick_ISR(void) //1ms定时
{
    uint8_t i;
   
    for (i = 0; i < TMR_COUNT; i++) bsp_SoftTimerDec(&g_Tmr[i]);
    g_iRunTime++;        /* 全局运行时间每1ms增1 */
   
    if(usart.write > 0) usart.Rx_delay_CNT++;
    else                usart.Rx_delay_CNT = 0;
   
}

系统定时器中断

出0入0汤圆

发表于 2014-5-27 17:03:37 | 显示全部楼层
bin060117 发表于 2013-2-5 15:10
首先感谢楼主无私的开源精神,本人跟着楼主的步骤成功将freemodbus移植到C8T6,但是一旦使能IIC后MODBUS就 ...

亲,我最近学modbus,你的将freemodbus移植到C8T6的代码能否发一份给我?谢谢!邮箱:lvwei1990@qq.com

出0入0汤圆

发表于 2014-5-27 17:30:05 | 显示全部楼层
标记,STM32 移植FreeModbus 详细过程

出0入0汤圆

 楼主| 发表于 2014-5-31 21:26:09 | 显示全部楼层
timemaker 发表于 2014-5-22 17:11
昨天自己写的个modbus的从机,支持03  06  10功能号,刚测试了一天,通信正常,暂时没发现bug,感觉freemod ...

我觉得虽然freemodbus的库复杂了些,但是思想还是值得借鉴的!
如果你有时间的话,可以看看python写的modbus库,用起来要简单的多了,而且主机从机都有!

出0入0汤圆

发表于 2014-6-2 18:46:04 | 显示全部楼层
亲爱的楼主,我按照你附件的FreeModbus Code一直到STM32F103ZET6上,可是弄了好几天都没成功,烦请在百忙之中看一下我的代码。期待回复,谢谢。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-6-5 16:50:22 | 显示全部楼层
楼主很强大,学习了!!

出0入0汤圆

发表于 2014-6-9 14:47:18 | 显示全部楼层
楼主,请问后来有没有用MDK写的,对IAR不是很熟悉啊

出0入0汤圆

发表于 2014-6-9 16:22:56 | 显示全部楼层
mark                  

出0入0汤圆

发表于 2014-6-10 14:21:56 | 显示全部楼层
你好,通讯用的USART1可以修改为USART3吗?如果能修改,程序里面要修改哪些地方?我修改后通讯显示timeout error

出0入0汤圆

发表于 2014-6-10 15:49:19 | 显示全部楼层
楼主我想咨询你的文章里面的“四   串口相关部分代码编写”,你用的串口1,端口是PA9和PA10,但是
为什么最后配置485发送和接收模式用到PD8?
你的硬件是端口PA9和PA10出来接MAX485吗?

出5入42汤圆

发表于 2014-6-10 20:58:57 | 显示全部楼层
先收藏 现在使用M4,储备储备。

出0入0汤圆

发表于 2014-6-10 22:01:53 | 显示全部楼层
学习了              

出0入0汤圆

发表于 2014-6-10 22:45:39 | 显示全部楼层
PLD的东东,没搞过

出0入0汤圆

发表于 2014-6-11 08:38:17 | 显示全部楼层
好东西,有没有can方面的资料

出0入0汤圆

 楼主| 发表于 2014-6-11 12:44:44 | 显示全部楼层
baoyt 发表于 2014-6-10 15:49
楼主我想咨询你的文章里面的“四   串口相关部分代码编写”,你用的串口1,端口是PA9和PA10,但是
为什么最 ...

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

本版积分规则

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

GMT+8, 2024-3-28 21:23

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

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