请教关于rs485多机通信信

本帖子已过去太久远了,不再提供回复功能。后使用快捷导航没有帐号?
只需一步,快速开始
本车间有一个小伙子今年24岁,长得老么帅了,有车有房,家里看孩子老大不小了就着急给
孩子放假,除了拥有自己的玩乐时光,你会教些孩子们什么技能呢?
查看: 264|回复: 21
关于流量计用RS485通讯远传显示的问题请教
阅读权限10
积分帖子主题
注册海川与360万海川共分享
才可以下载或查看,没有帐号?
初学仪表,工作现场有台流量计,带有RS485通讯功能(MODBUS_RTU通讯协议);老板要求再远处的主控室能通过RS485通讯线读出“瞬时流量”和“累计流量”并显示出来。但是主控室没电脑,不知道用什么仪器可以简单省钱的实现。
请各位仪表大神支支招
鼓励新会员发言
已有&0&人打赏作者
阅读权限30
积分帖子主题
&成长值: 4576VIP5, 成长值 7200, 距离下一级还需 2624 成长值
主控室是什么啊,描述太简单
阅读权限10
积分帖子主题
就是一个房间离流量计大约30米距离,没什么特别的
阅读权限30
用触摸屏或者只能显示仪表
文本显示器可以吗,
另外显示仪表是什么东西呢?&
阅读权限10
积分帖子主题
用触摸屏或者只能显示仪表
文本显示器可以吗,&&另外显示仪表是什么东西呢?
阅读权限20
积分帖子主题
用带有RS485通讯功能输入的智能显示仪表。
听他狗嘴胡扯 。。。不解释&
请问这种表具体叫什么名字呢,或者私信也行&
阅读权限85
积分帖子主题
呵呵。买个二手破电脑去白,250个小元,会搞得你家老板心花怒放的挖~~~再找个人编程,开、5000,有人愿意给你家老板写程序,就好撒
阅读权限10
积分帖子主题
用带有RS485通讯功能输入的智能显示仪表。
请问这种表具体叫什么名字呢,或者私信也行
阅读权限30
积分帖子主题
带有485输入的智能仪表,或者是触摸屏,文本显示器也应该可以的
阅读权限30
具体可以私聊, qq
安全漫画(6.27)似曾相识罐坛风云暑期英语班哪里上好,吉的堡幼儿园怎么样?新发现,这个是干嘛的?看看这是怎么了?
罐坛是一个风云变幻,沧海横流,英雄辈出,令人神往的领域。不知多少罐坛厂家盖世英雄在那里大显身手,叱咤风云,正可谓江山如画
海川提示 /1
APP恢复访问;
同时,为感谢大家的支持,本周在线抽奖增加实物奖投放。
欢迎使用APP参与交流
广告投放&事务
事务联系邮箱:&&
日访客10万 欢迎您的参与 化工技术交流第一社区,共同学习 共同提高!
版权所有 海川云天-海川化工论坛 -2004基于RS485总线的多机通信系统设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于RS485总线的多机通信系统设计
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 5368|回复: 9
谁有STM32F103VB
的485多机通信的例程啊?
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间0 小时
STM32的485多机通信,做了好几天了,还是不行,哪位大神有例程给个参考,谢谢了!
就是RS485协议的,用的STM32103VB,现在已搞定。
原因是对STM32的串口操作不熟。我用了原子哥的例程改了一下,两台机器能手动和自动通信,有需要的朋友留言。
人生没有一帆风顺,只能勤勤恳恳。
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间0 小时
就是RS485协议的,用的STM32103VB,现在已搞定。
原因是对STM32的串口操作不熟。我用了原子哥的例程改了一下,两台机器能手动和自动通信,有需要的朋友留言。
人生没有一帆风顺,只能勤勤恳恳。
主题帖子精华
在线时间0 小时
什么协议的?
于停用该账号:http://www.microstar.club
主题帖子精华
初级会员, 积分 87, 距离下一级还需 113 积分
在线时间3 小时
回复【3楼】会飞的鱼333:
---------------------------------
大神,我需要,求程序!!!
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间0 小时
回复【4楼】jxmuestc:
---------------------------------
#include&&sys.h&
&&&&
#include&&rs485.h& &
#include&&delay.h&
#include&KEY.h&
#ifdef&EN_USART1_RX&&& //如果使能了接收&&& &&
//接收缓存区&
u8&RS485_RX_BUF[96];&& //接收缓冲,最大64个字节.
//接收到的数据长度
u8&RS485_RX_CNT=0;&&&
void&USART1_IRQHandler(void)
{
if(USART1-&SR&(1&&5))//接收到数据&&
/*也就是RXNE置位&相当于if(USART_GetITStatus(USART1,&USART_IT_RXNE)) &&*/
res=USART1-&DR;//读取接收到的值,相当于res=USART_ReceiveData(USART1)&
if(RS485_RX_CNT&96)
RS485_RX_BUF[RS485_RX_CNT]=
//记录接收到的值
RS485_RX_CNT++;
//接收数据增加1&
&
}&
#endif
&
//初始化IO&串口2
//pclk1CLK1时钟频率(Mhz)
//bound:波特率 &&
void&RS485_Init(u32&bound)
{&& &
/*关于波特率的计算
*/ &&&
/* temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
&//得到整数部分
fraction=(temp-mantissa)*16;&//得到小数部分 &
&&&&mantissa&&=4;
mantissa+=&
RCC-&APB2ENR|=1&&8;&&& //使能PORTG口时钟&&
& GPIOG-&CRH&=0XFFFFFF0F; //IO状态设置
GPIOG-&CRH|=0X; //IO状态设置 &&
&
RCC-&APB2ENR|=1&&2;&&& //使能PORTA口时钟&&
GPIOA-&CRL&=0XFFFF00FF; //IO状态设置
GPIOA-&CRL|=0X00008B00; //IO状态设置 &&
RCC-&APB1ENR|=1&&17;&& //使能串口时钟&
RCC-&APB1RSTR|=1&&17;&&&//复位串口2
RCC-&APB1RSTR&=~(1&&17);//停止复位 &&& &&&
//波特率设置
& USART2-&BRR=& //&波特率设置 &
USART2-&CR1|=0X200C;&& //1位停止,无校验位.
#ifdef&EN_USART2_RX
&& //如果使能了接收
//使能接收中断
USART2-&CR1|=1&&8;&&&& //PE中断使能
USART2-&CR1|=1&&5;&&&& //接收缓冲区非空中断使能 &&&&
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//组2,最低优先级&
#endif
RS485_TX_EN=0;
//默认为接收模式
GPIO_InitTypeDef&GPIO_InitS
USART_InitTypeDef&USART_InitS
NVIC_InitTypeDef&NVIC_InitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_USART1,&ENABLE);//使能&GPIOA,USART1&时钟
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能串口&2&时钟
&&& GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_8;&&&&&&&&&&//PA&端口配置&&控制接收模式
GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&&&&&&&//推挽输出
GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_9;&&//PA2
GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_AF_PP;&&//复用推挽
GPIO_Init(GPIOA,&&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_10;//PA3
GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_IN_FLOATING;&//浮空输入
GPIO_Init(GPIOA,&&GPIO_InitStructure);&&
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1,ENABLE);//复位串口&2
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1,DISABLE);//停止复位
#ifdef&EN_USART1_RX&&&&&&&&//如果使能了接收
USART_InitStructure.USART_BaudRate&=&//一般设置为&9600;
USART_InitStructure.USART_WordLength&=&USART_WordLength_8b;//8&位数据长度
USART_InitStructure.USART_StopBits&=&USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity&=&USART_Parity_No;///奇偶校验位
USART_InitStructure.USART_HardwareFlowControl=&
USART_HardwareFlowControl_N//无硬件数据流控制
USART_InitStructure.USART_Mode&=&USART_Mode_Rx&|&USART_Mode_Tx;//收发
USART_Init(USART1,&&USART_InitStructure);&;&//初始化串口
NVIC_InitStructure.NVIC_IRQChannel&=&USART1_IRQn;&//使能串口&2&中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&=&3;&//先占优先级&2&级
NVIC_InitStructure.NVIC_IRQChannelSubPriority&=&3;&//从优先级&2&级
NVIC_InitStructure.NVIC_IRQChannelCmd&=&ENABLE;&//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);&//根据指定的参数初始化&NVIC&寄存器
USART_ITConfig(USART1,&USART_IT_RXNE,&ENABLE);//开启中断
USART_Cmd(USART1,&ENABLE);&&&&&&&&&&&&&&&&&&&&&//使能串口
RS485_TX_EN=0;&&&&&&//默认为接收模式
}
//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void&RS485_Send_Data(u8&*buf,u8&len)
{
/*RS485_TX_EN=1;
//设置为发送模式
&& for(t=0;t&t++)
//循环发送数据
while((USART1-&SR&0X40)==0);//等待发送结束&判断TC位的值&1&发送完成&&
//TXE&的值1&&发送数据寄存器为空,它为1&&TC为1&&才是发送结束
USART1-&DR=buf[t]; //向数据缓冲器写入下一个要发送的数据
while((USART2-&SR&0X40)==0);//等待发送结束 发送完前TC一直为0&,进入死循环。
//发送结束TC为1&&结束死循环。
RS485_RX_CNT=0; &&
RS485_TX_EN=0;
//设置为接收模式
RS485_TX_EN=1;&&&&&//设置为发送模式
for(t=0;t&t++)&&&&//循环发送数据
while(USART_GetFlagStatus(USART1,&USART_FLAG_TC)&==&RESET);
USART_SendData(USART1,buf[t]);
while(USART_GetFlagStatus(USART1,&USART_FLAG_TC)&==&RESET);//等待发送完成&
RS485_RX_CNT=0;&
RS485_TX_EN=0;&&&&&&&//设置为接收模式&
}
//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void&RS485_Receive_Data(u8&*buf,u8&*len)
{
u8&rxlen=RS485_RX_CNT;
delay_ms(10);
//等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
/*if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
for(i=0;i&i++)
buf=RS485_RX_BUF;
LED_Show(i,buf)&;
*len=RS485_RX_CNT; //记录本次数据长度
RS485_RX_CNT=0;
if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
for(i=0;i&i++)
buf=RS485_RX_BUF;
LED_Show(i,buf)&;
*len=RS485_RX_CNT;&&//记录本次数据长度
RS485_RX_CNT=0;&&&&//清零
本程序是根据原子哥的程序改的,在此感谢原子哥!其它的你自己改一下就行,这个我用了,好用的。&
人生没有一帆风顺,只能勤勤恳恳。
主题帖子精华
初级会员, 积分 91, 距离下一级还需 109 积分
在线时间9 小时
回复【5楼】会飞的鱼333:
---------------------------------
··对于485一主多从的硬件连接应该怎么连接··程序上又应该怎么判断是哪个从机发送过来的信息??是分时间打开从机··然后单个读取数据吗?还是怎样?不像IIC有个选址的··485一主多从·我不懂··请指教下好吗··谢谢··
主题帖子精华
在线时间697 小时
回复【6楼】为怡而生:
---------------------------------
自己写协议&&或者&&百度一下&&MODBUS&&freemodbus&&&你会有收获的
道不同,不相与为谋
主题帖子精华
初级会员, 积分 159, 距离下一级还需 41 积分
在线时间10 小时
就是RS485协议的,用的STM32103VB,现在已搞定。
原因是对STM32的串口操作不熟。我用了原子哥的例程改了一 ...
参考一下,(*^__^*) 嘻嘻……
主题帖子精华
中级会员, 积分 299, 距离下一级还需 201 积分
在线时间231 小时
能把您的程序包给我发一份吗?万分感激
主题帖子精华
初级会员, 积分 59, 距离下一级还需 141 积分
在线时间8 小时
在吗楼主我也在做485主从机通信 能看下你的程序吗
Powered by

我要回帖

更多关于 rs485与上位机通信 的文章

 

随机推荐