RS232

  • 硬件直接对接,程序完全来自于USART
  • 由sp3232将TTL电平转化为RS232的标准电平
  • 实际应用中需要注意RS232对于2脚和3脚的直连或交叉接,现成的RS232当然不会有这个问题,但是自己DIY的时候要注意防止接反(如图3 图4)





RS485

  • 基于usart
  • 通过sp3485将数据的收发集成到一根线上,转而由RS485_RE(B口)判断/切换数据的收发模式


RS232和RS485的理论极限使用场景

即短距离传输,中距离传输和远距离传输

程序示例

rs485.c

#include "sys.h"
#include "usart.h"
#include "rs485.h"void RS485_Init(void){ //RS485接口初始化GPIO_InitTypeDef  GPIO_InitStructure;    GPIO_InitStructure.GPIO_Pin = RS485_RE; //选择端口号(0~15或all)                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    GPIO_Init(RS485PORT, &GPIO_InitStructure);GPIO_ResetBits(RS485PORT,RS485_RE); //RE端控制接收/发送状态,RE为1时发送,为0时接收。}/*
RS485总线通信,使用USART3,这是RS485专用的printf函数
调用方法:RS485_printf("123"); //向USART3发送字符123
*/
void RS485_printf (char *fmt, ...){ char buffer[USART3_REC_LEN+1];  // 数据长度u8 i = 0;va_list arg_ptr;GPIO_SetBits(RS485PORT,RS485_RE); //为高电平(发送)//RS485收发选择线    va_start(arg_ptr, fmt);  vsnprintf(buffer, USART3_REC_LEN+1, fmt, arg_ptr);while ((i < USART3_REC_LEN) && (i < strlen(buffer))){USART_SendData(USART3, (u8) buffer[i++]);while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); }va_end(arg_ptr);GPIO_ResetBits(RS485PORT,RS485_RE); //为低电平(接收)//RS485收发选择线
}

可以将上面的程序与
usart_c.usart_printf(char * fmt);
做对比
不能说一模一样,只能说完全一致

RS485_Init()
更是不用多说

RS485的数据接收倒是没有再“套壳”
而是同usart一样
交由主程序
USART_GetFlagStatus 判断后
直接处理

main.c

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "touch_key.h"
#include "relay.h"
#include "oled0561.h"#include "usart.h"
#include "rs485.h"int main (void){//主程序u8 a;delay_ms(100); //上电时等待其他器件就绪RCC_Configuration(); //系统时钟初始化 TOUCH_KEY_Init();//触摸按键初始化RELAY_Init();//继电器初始化I2C_Configuration();//I2C初始化OLED0561_Init(); //OLED初始化OLED_DISPLAY_8x16_BUFFER(0,"   YoungTalk "); //显示字符串OLED_DISPLAY_8x16_BUFFER(2,"  RS485 TEST "); //显示字符串OLED_DISPLAY_8x16_BUFFER(6,"TX:    RX:   "); //显示字符串USART3_Init(115200);//串口3初始化并启动RS485_Init();//RS485总线初始化,需要跟在USART3初始化下方while(1){if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){RS485_printf("%c",'A');OLED_DISPLAY_8x16(6,4*8,'A');} //向RS232串口发送字符并在OLED上显示       else if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){RS485_printf("%c",'B');OLED_DISPLAY_8x16(6,4*8,'B');} //向RS232串口发送字符并在OLED上显示      else if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){RS485_printf("%c",'C');OLED_DISPLAY_8x16(6,4*8,'C');} //向RS232串口发送字符并在OLED上显示else if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){RS485_printf("%c",'D');OLED_DISPLAY_8x16(6,4*8,'D');} //向RS232串口发送字符并在OLED上显示//查询方式接收if(USART_GetFlagStatus(USART3,USART_FLAG_RXNE) != RESET){  //查询串口待处理标志位a =USART_ReceiveData(USART3);//读取接收到的数据OLED_DISPLAY_8x16(6,11*8,a);//在OLED上显示}}
}

RS2323 RS485相关推荐

  1. RS485通信如何设计EMC电路?

    目录 1.RS-485标准 2.电磁兼容性 2.1.静电放电测试 2.2.电快速瞬变测试 2.3.电涌瞬变测试 3.通过/失败标准 4.瞬变保护 5.RS-485瞬变抑制网络 5.1.保护方案1 5. ...

  2. 串口服务器支持多台上位机,RS485多机通信一台上位机两台下位机问题,

    RS485一主机两个下位机,上位机通过发送下位机地址查询下位机两个按钮的状态,仿真时同时在P1口和P2口显示按钮状态 一.原理图 (原文件名:1.jpg) 二.程序 1.上位机程序 #include ...

  3. 串口与COM口 USB口、TTL、RS-232、RS-485区别 释疑

    Point: 1.串口.COM口是指的物理接口形式(硬件),COM口简称是串口.而TTL.RS-232.RS-485是指的电平标准(电信号). 2.接设备的时候,一般只接GND RX TX.不会接Vc ...

  4. db9针232接口波特率标准_RS232和RS485与RS422接口的基础知识详细介绍

    一.RS232基础知识计算机 与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用 ...

  5. 虚拟串口最大传输速率_【干货】详解RS232、RS485、RS422、串口amp;amp;握手

    RS232.RS485和RS422基础知识 一.RS232基础知识计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输 ...

  6. 总线制和多线制示意图_知识||RS485简介及与其他总线网络的区别

    点击关注仪表之家,实际可行的为仪表工/自控/热工解决检修时问题 一.RS485简介 智能仪表是随着80年代初单片机技术的成熟而发展起来的,现在世界仪表市场基本被智能仪表所垄断.究其原因就是企业信息化的 ...

  7. MAX487制作RS485总线接口模块

    ■ MAX487简介 MAX487是用于低功耗RS-485总线收发器. ▲ MAX487管脚配置和典型应用电路 存在的问题: 是否需要增加偏置电阻?在MAX487输出低电平的时候两线的差分是多少? 测 ...

  8. 三菱的触摸屏usb驱动_资深工程师一步一步教你PLC与西门子触摸屏的RS485通信

    点击上方"蓝字"关注我们 今天为大家带来的是PLC与西门子触摸屏的RS485通信,RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485.R ...

  9. RS485,RS232,USB,Ethernet 传输速度分别是多少

    通讯速度,跟通讯用介质.通讯距离以及通讯环境等多项因素有关,一般情况下:1.RS-485的数据最高传输速率为10M 2.RS-232规定的速率为:50.75.100.150.300600.1200.2 ...

最新文章

  1. oracle导入时提示IMP-00010:不是有效的导出文件,头部验证失败
  2. 一条数据的HBase之旅,简明HBase入门教程-Write全流程
  3. sts (eclipse)安装配置lombok
  4. 解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法...
  5. perl连接oracle的方法,Perl 连接Oracle 数据库
  6. 嵌入式系统实时仿真解决方案SkyEye
  7. 从入门到入土:Nessus出击:使用nessus扫描某台靶机
  8. 为什么有些大厂的技术弱爆了?
  9. 098 元类(metaclass)
  10. android个人日记本论文,手机app移动开发论文-个人心情日记本的设计实现 毕设论文.doc...
  11. 各种神经网络的应用领域,神经网络还有哪些应用
  12. 电视机当计算机屏幕,电视机能不能当电脑显示器?告诉你正确答案
  13. 有米科技股份有限公司
  14. System Silencer – 离开时 让电脑自动开始任务
  15. CAN总线技术在石油工程行业中的应用
  16. secureCRT无法输入
  17. ECDSA 和 ECDH
  18. cartographer建图,重定位及发布消息结构为nav_msgs::Odometry的odom话题
  19. 膏肓痛的自疗法-------为久坐者
  20. 基于ArrayList实现HashMap代码

热门文章

  1. LDA在资讯推荐的应用
  2. gitee创建项目到多人协作
  3. Ehr系统是如何帮助企业优化组织架构的
  4. 小哈机器人新年照片_“机器人太空之旅”欢庆元旦科普主题活动精彩回顾
  5. 小明工具箱Excel 插件VSTO 插件
  6. NXP的uboot编译\烧写体验
  7. 合肥工业大学oj 算法实训(1)【此后无良辰】
  8. vue+大文件上传控件
  9. 支付系统中的对账处理
  10. scrapy 智联 mysql_Python利用Scrapy爬取智联招聘和前程无忧的招聘数据