0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32串口实现485双机通信的原理

GReq_mcu168 来源:未知 作者:李倩 2018-05-21 17:27 次阅读

RS485通信想必大家都知道,在学习RS232时,都会拿485(RS485下文就用485代替)和其作对比。485优缺点不说,网上有。

我用的是STM32库函数学的485通信,所以接下来就讲讲STM32串口实现485双机通信的原理:

485和232都是基于串口的通讯接口,在数据的收发操作上都是一致的。但是他两的通讯模式却大不相同~!232是全双工(例:A->B的同时B->A,瞬时同步)工作模式,而485是半双工(发时不能收,收时不能发)工作模式。在232通信中,主机在发送数据的同时可以收到从机发过来的数据;但在485通信中,收发要经过模式位的切换来进行,譬如,发送数据时,会把模式为置‘1’,表示为发送模式,此时不能接收;当接收数据时,会把模式位置‘0’,表示为接收模式,此时不能发送。

在讲STM32串口实现485双机通信的原理之前,先来复习一下串口中的中断知识点:

串口的中断类型有很多种。这里主要讲两种:接收到数据中断和发送数据完成中断。这两个中断跟两个标志位有密切关系:RXNE(读数据寄存器非空)和TC(发送完成)。譬如在接收到数据的时候(RXNE,读数据寄存器非空),我们要产生中断。在发送数据结束的时候(TC,发送完成)要产生中断。这两种中断的产生方法都是在开启串口中断函数(USART_ITConfig();)中配置。并在获取中断状态函数(USART_ITStatus();)中判断是发送中断还是接受中断。

注意:

01、有人问当产生接收中断时,没看到程序中清除中断标志啊,那不就一直中断下去了吗?这里官方规定有两种方法清除中断标志(书里面也有):1、尽快读取USART_DR(数据寄存器),通过读USART_DR可以将该位清零;2、可以直接向该位写‘0’,直接清零。02、两块板子的串口波特率一定要相同,否则将得不到想要的数据。

STM32串口实现485双机通信的原理(库函数):

1、在主函数中,扫描按键。一旦key0按下,首先将5个字节的数据存入rs485buf[]数组中,然后调用RS485_Send_Data(rs485buf,5);函数将5个字节的数据发送到串口。

2、进入RS485_Send_Data();函数中,先通过标志位将485设置为发送模式(RS485_TX_EN=1),然后循环5次,将这5个字节数据,通过库函数:USART_Send_Data();发送到USART_DR寄存器(自动发送),最后通过标志位将485设置为接收模式(RS485_TX_EN=0)。

3、前两个是发送。现在是接收了。主函数中通过RS485_Receive_Data();不停的接收。4、进入RS485_Receive_Data();函数中,如果一直没有按按键,则不会发送数据,也就不会产生接收中断,也就不会往我们定义的接收缓冲区(RS485_RX_BUF[64])里写数据。RS485_RX_CNT计数器的值也就是‘0’,对应在RS485_Receive_Data();函数中就不会进入里面的if语句(下图中红框)

如果按键按下了,就会发送数据,就会产生接收中断,就会往我们定义的接收缓冲区(RS485_RX_BUF[64])里写数据,RS485_RX_CNT计数器的值也就开始自增,对应在RS485_Receive_Data();函数中就会进入里面的if语句,从之前定义的接收缓冲区(RS485_RX_BUF[64])里面取数据。

5、最后就将取出来的数据(接收到的数据)显示出来。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2232

    文章

    10650

    浏览量

    347870
  • RS232
    +关注

    关注

    13

    文章

    702

    浏览量

    93359
  • 串口
    +关注

    关注

    14

    文章

    1478

    浏览量

    74329

原文标题:当STM32遇到串口RS485双机通信,如何处理最便捷?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    8051双机通信简例

    8051双机通信简例
    发表于 08-20 23:48

    求助,MAX485双机通信如何检测通信的误码率

    各位技术达人,我遇到了这样一个问题。我用两片AT89S51单片与两片MAX485芯片做成了一个双机通信系统,现在苦于不知怎么检测该系统的通信
    发表于 04-15 15:58

    STM32串口实现485双机通信的原理看了就知道

    STM32串口实现485双机通信的原理
    发表于 03-18 08:17

    STM32串口实验,从入门到放弃 精选资料分享

    STM32串口实验文章目录STM32串口实验前言一、串口串口是什么?并行
    发表于 08-03 06:17

    myM485 485双机通信例程分享

    一、定义变量/**********************myM485 485双机通信例程测试型号:STC15F2K60S2 主频:11.0592MHz
    发表于 11-26 06:51

    stm32串口1和RS485通信串口2的配置过程是怎样的?

    stm32串口1和RS485通信串口2的配置过程是怎样的?
    发表于 12-08 06:49

    STM32串口是如何去实现485双机通信

    STM32串口实现485双机通信的原理是什么?STM32串口
    发表于 12-08 06:39

    STM32通过串口实现双机通信的方法是什么

    STM32通过串口实现双机通信的方法是什么
    发表于 12-16 06:27

    STM32实现SPI双机通信的方法

    STM32实现SPI双机通信的一些细节(1)背景介绍双机通信需要考虑哪些内容SPI简介主从
    发表于 12-24 08:06

    USB转TTL实现双机通信

    USB转TTL实现双机通信一、串口通信电平简介(一)TTL标准电平(二)Rs232标准(三)Rs232标准与TTL标准的区别二、USB转TT
    发表于 02-17 08:01

    51单片如何实现双机串口通信

    51单片如何实现双机串口通信
    发表于 11-03 07:42

    如何通过STM32串口实现简易脱机编程器

    如何通过STM32串口实现简易脱机编程器如何通过STM32串口实现简易脱机编程器如何通过STM32
    发表于 04-25 09:38 59次下载

    STM32串口实现485双机通信原理

    串口的中断类型有很多种。这里主要讲两种:接收到数据中断和发送数据完成中断。这两个中断跟两个标志位有密切关系:RXNE(读数据寄存器非空)和TC(发送完成)。譬如在接收到数据的时候(RXNE,读数据寄存器非空),我们要产生中断。
    的头像 发表于 10-19 07:30 1.5w次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口实现</b><b class='flag-5'>485</b><b class='flag-5'>双机</b><b class='flag-5'>通信</b>原理

    STM32串口实现485双机通信的原理资料下载

    电子发烧友网为你提供STM32串口实现485双机通信的原理资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料
    发表于 04-05 08:41 17次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>串口实现</b><b class='flag-5'>485</b><b class='flag-5'>双机</b><b class='flag-5'>通信</b>的原理资料下载

    串口实现双机通信

    。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。在这里主要通过RS-232实现双击通信
    发表于 12-20 19:28 0次下载
    <b class='flag-5'>串口实现</b><b class='flag-5'>双机</b><b class='flag-5'>通信</b>