OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6379|回复: 7

基于STM32的Modbus/RTU从站,完成01与03功能命令

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-6-13
在线时间
0 小时
发表于 2015-6-13 11:41:05 | 显示全部楼层 |阅读模式
5金钱
各位大神,小弟刚入门STM32,在做标题中的实验,用PC做上位机,战舰STM32做下位机,用Modbus调试精灵验证,希望各位给以指导,最好能有源代码。重点是通信过程消息帧的接收,中断服务程序的编写。谢谢了!

既然选择了远方、就应风雨兼程
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-6-13 18:40:23 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-6-13
在线时间
0 小时
 楼主| 发表于 2015-6-17 17:45:41 | 显示全部楼层
大家帮忙看一下,这是我的
[mw_shl_code=c,true]void USART1_IRQHandler(void) //?®??1????·??????ò { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //???????? { Rcv_Data=USART_ReceiveData(USART1); //???????????????? HaveMes=1;//±í?????????????? if(Comu_Busy==0)//?????????????????????????? { TIM_Cmd(TIM3,DISABLE); //??±??¨?±?÷2???¨???®?????????????????¨?±?÷ TIM_SetCounter(TIM3,0); //?????÷???? if((Tim_Out==1)&&(Rcv_Data==Mod_Id))//?????????±??????3.5??×?·??????±??????×?????×????????????????ò???????????? { Rcv_Complete=0;//±í???????????????? Rcv_Num=0;//?????????????????? Rcv_Num++;//???±???????? } if((0==Tim_Out)&&(0==Rcv_Complete))//???????????????????????????? { if(Rcv_Num<10) { Rcv_Buffer[Rcv_Num+1]=Rcv_Data;//??????·?????????×é?? Rcv_Num++;//???±???????? } else { Rcv_Complete=1; Comu_Busy=1; Rcv_Buffer[0]=Rcv_Num; *(PointToSendBuf+2)=*(PointToRcvBuf+2);//?????????? ErrorHandle(6,PointToSendBuf);//±í????????×??????¨???ú?è±??????© Rcv_Num=0; } } Tim_Out=0; TIM_Cmd(TIM3, ENABLE);//?????¨?±?÷??????????4.5ms???±?¨????°?×?·???±????????© } } if(USART_GetITStatus(USART1,USART_IT_TC)!=RESET) //·??????? { Send_Data=*(PointToSendBuf+Send_Num); USART_SendData(USART1,Send_Data); Send_Num++; if(Send_Num>(*PointToSendBuf))//·????????ê?? { Comu_Busy=0; *PointToSendBuf=0; Rcv_Num=0; Send_Num=1; //????????·??? USART_ITConfig(USART1, USART_IT_TC, DISABLE);//??±?????·??????? } } } #endif void MessageHandle(u8 *pointer_in,u8 *pointer_out) { u16 CalKey;//?????????????é?? u16 RcvKey;//???????????é?? HaveMes=0;//?????????? //???????????????é?? RcvKey=(u16)*(pointer_in+(*pointer_in-1)); RcvKey=RcvKey<<8; RcvKey=RcvKey|(u16)*(pointer_in+(*pointer_in)); CalKey=CRC16(pointer_in+1,*pointer_in-2); if(CalKey==RcvKey) { switch(*(pointer_in+2))//??????×??????????? { case 0x01:ReadOutputBit(pointer_in,pointer_out);//?????????? break; case 0x03:ReadHoldingReg(pointer_in,pointer_out);//??±????????÷ break; default: { *(pointer_out+2)=*(pointer_in+2);//?????????? ErrorHandle(1,pointer_out);//???????í?ó } break; } } else { Comu_Busy=0; } } [/mw_shl_code]

工程代码,编程实现了,为何用modbus调试精灵实现不了呢?

modbus.zip

12.37 MB, 下载次数: 9425

既然选择了远方、就应风雨兼程
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-5-16
在线时间
0 小时
发表于 2015-6-20 22:36:28 | 显示全部楼层
不懂帮顶。哈哈哈
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-6-13
在线时间
0 小时
 楼主| 发表于 2015-6-22 15:48:00 | 显示全部楼层
回复【4楼】铜牌之路:
---------------------------------
多谢捧场*_*
既然选择了远方、就应风雨兼程
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-9-18
在线时间
15 小时
发表于 2015-11-12 14:22:06 | 显示全部楼层
回复【5楼】静静地主宰:
---------------------------------
没有后文了么?怎么解决的?
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-5-28
在线时间
0 小时
发表于 2016-5-28 15:40:59 | 显示全部楼层
请问你的MODBUS代码可以发给我一份吗我的邮箱是320533980@qq.com
回复

使用道具 举报

7

主题

23

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-7-24
在线时间
14 小时
发表于 2019-8-1 19:37:38 | 显示全部楼层
你用的是什么芯片?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 09:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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