精华内容
下载资源
问答
  • 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮盏LED。 4 、Esp8266之 ...

    • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板。仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

    基于C SDK的ESP8266开发技术全系列笔记

    一、NONOS SDK 无操作系统开发

    1、搭建开发环境,开始一个“hellow world”串口打印。
    2、利用GPIO开始使用按钮点亮你的“第一盏灯”。
    3、利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
    4 、了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
    5 、原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
    6 、了解 SmartConfig与Airkiss一键配网,无需把wifi名字密码写在固件里。
    7 、了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
    8、你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
    9、 [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
    10、 [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
    11、8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
    12、图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
    13、 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
    14、esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
    15、esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
    16、esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
    17、esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
    18、 esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
    19、 esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
    20、 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下彼此通讯交互数据。
    21、浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
    22、 esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。
    23、 乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。


    二、RTOS SDK 带操作操作系统开发

    23、再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
    24、 渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
    25、 深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
    26、 RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
    27、 跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
    28、 教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
    29、 百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
    30、 使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
    31、 当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
    32、 细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
    33、 如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
    34、 乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
    35、 乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
    36、 认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
    37、 你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
    38、 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
    39、 捋一捋微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 。
    40、 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
    43、esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!
    43、 我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!
    43、esp8266-12模块基于rtos3.0版本扫描周围获取附近可用的 Wi-Fi 热点路由器信息,同样适合esp32。
    43、整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。
    43、 内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品。
    43、 详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。
    43、 无需外网,如何实现在本地局域网与控制端做数据交换的一些开发经验。
    43、迟来的1024程序员祝福,开源分享一个驱动 ds18b20 获取温度的工程。
    43、aliyun sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制。
    43、esp产品量产方案初入门之 如何从外部读取 csv 文件的数据,比如从代码读取外部文件阿里云三元组。
    43、体验下 Linux搭建 ESP8266_RTOS_SDK 3.0 最新环境的搭建和编译吧。
    43、仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件
    43、分享在 esp8266 C SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。

    -------- 学习笔记持续更新,欢迎关注我…

    很多人怎么联系我一起学习进步,下面打个小小公告:
    玩转esp8266带你飞、加群QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
    esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
    esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32

    文章目录


    一、认识其本质与搭建开发环境。


    1.1 、 市面上无线模块有哪些。


    大家可知道目前的无线通信模块有哪几种? 主要有Wifi无线通讯BlueTooth蓝牙ZigBee,目前大多都是前二者,ZigBee现在用的很少了。据我所推断的,未来是属于物联网世界、智能家居领域,而蓝牙和zigbe局限于范围,蓝牙4.0仅仅最大支持100米,zigbee就不说了。


    1.2 、wifi模块Esp8266发展。


    2015年物联网处于爆发的一年,乐鑫的ESP8266WIFI 芯片成为强烈的催化剂。成功的将2014年前的40以上的WIFI成本压缩到现在的10元左右。内置WIFI前端和高性能的32位MCU,基本引爆物联网市场,几乎牵扯到电子的行业,都可以用上,比如WIFI开关 灯具 WIFI定位 电饭锅 空气净化器 等消费类小家电与大家电,都面临这一场技术革新,与新的用户体验!比如你仅仅增加10元的成本就可以把自己的产品被手机控制了。


    1.3 、Esp8266特点。


    • 要知道,在物联网世界里面的牛人,没有谁不认识 8266 。既然如此出色,那肯定有他存在的必然理由:

      • 低功耗、高集成度的 Wi-Fi 芯片。

      • 最小系统仅需 7 个元器件

      • 超宽工作温度范围:-40°C 至 +125°C

      • ESP8285 : ESP8266 内封 8 Mbit Flash。

      • ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。


    1.4 、搭建开发环境。


    方式1,利用安信可一体化环境【新手推荐

    • esp8266 经过这么多年的迭代,sdk从1.0到目前的 3.3版本,也有2种C语言开发方式:裸跑 nonos 以及 实时操作系统 freeRtos 的支持,安信可公司一直在着乐鑫步伐跟着走,推出了 前1.0版本1.0版本
    • 其中 前1.0版本 仅仅支持 2.0版本及以下,而 1.0版本支持3.0或以上。
    • 教程参考官网教程:添加链接描述

    方式2,自主搭建环境【支持 rtos和nonos】:

    • 环境搭建大家应该都几乎是选择 windows 的,作为一个老司机,和大家一样,我也是选择为 win10 的笔记本电脑游戏本,cpu i8 ,16g内存!
    • 下面我就以 windows 平台为大家搭建一个可以手动同步最新编译工具链、以及可编译 非操作系统nonos工程和 操作系统Rtos工程的代码,下面是搭建环境的三件套:
      • esp8266最新的编译工具链下载传送门(仔细看下面的截图): https://github.com/espressif/ESP8266_RTOS_SDK
      • 2019年的eclipse c++编辑器下载,请关注我的微信公众号后回复 8266环境搭建 或者群文件获取即可!
      • 感谢安信可提供的 window cywin 环境,下载可在我的微信公众号后回复 8266环境搭建 或者群文件获取即可!

    在这里插入图片描述


    • 待我们的三件套下载了之后,首先第一步是解压,注意是用WinRAR软件以管理员身份解压,可以得到完整的文件夹,其他解压软件有可能会得到不完整的压缩包!
    • 下面我们先设置下cywin和编译工具链的环境变量,注意替换为您的实际路径,如下:
      • E:\Espressif\IDE\AiThinkerIDE_V0.5\AiThinkerIDE_V0.5\cygwin\bin\
      • E:\Espressif\IDE\xtensa-lx106-elf\bin\

    在这里插入图片描述


    • 下面是我们的编辑器的打开,注意 eclipes的打开必须事先自行搭建 java 环境,因为eclipse是用 java开发的 !等你可以成功打开界面如下,说明您已经完成了一大半了!

    在这里插入图片描述



    二、开始我们基于 nonos 工程的第一个“Hello World”。


    第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:
    • ①、driver_lib文件夹下面的Makefile文件删除!
    • ②、整个third_party去掉,这是第三方的demo,我们很少用!
    • ③、把example文件夹下面的任意一个工程,比如smart_config复制到主目录(逼问主目录就是下载压缩包压缩后的目录),可重命名为app,或者不修改!
    • ④、以上做好了之后,可以导入IDE了!

    我这里演示一个串口实验,打印 hellow world字符到我们通讯串口助手。下载后解压,注意解压后的路径千万别带中文字符,解压请直接复制到一个没有中文字符的路径的文件夹下面。否则会影响到后面的编译结果!


    第二步:导入项目 选择 File→Import ,下面步骤:

    在这里插入图片描述


    第三步:点开C/C++分支,并选中Existing Code as Makefile Project:

    在这里插入图片描述


    第四步:去除C++支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。

    在这里插入图片描述


    第五步:此刻,成功进入到我们的主界面。

    第六步:开始编译工程前,我们装装逼,在其的 app ->user --> user_main.c 方法修改如下,让输出为 hello world。
    • 注意:从SDK1.4版本之后,已经移除了下面2个函数,我们只需要在user_init()里面敲写即可!
    • esp8266的非实时系统编程的打印函数尽量用os_printf(),切记切记!!!

    void user_init(void) {
    	os_printf("hello world");
    }
    
    

    第七步:开始编译前,按照官方的说法,我们看控制台时候,直接把 Problems 栏目关掉,解释说,这个Problems 栏目报的错误不准确,只有Console 栏目下的输出为准,所以建议大家把 Problems 栏目关闭。
    • 之后建议大家每次编译项目前先进行 clear project,再 build project ,这样就保证了正确的代码可以完全被编译,如果正确的代码没有clear project就直接build project ,可能会报错。

    • Build Project :编译项目 ; Clean Project:清理项目,可以清理下缓存。


    关闭problem栏


    先clear再build


    第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:

    这里写图片描述


    • 第三处修改:需要在project_template的Makefile里添加指定的SDK的路径。千万忘记了结尾的”/”。否则编译还是会找不到路径,比如我的工程路径为:C:\Project8266\8266All\8266ProjectCSDN\16_ESP8266_RTOS_SDK_V1.5.0

    export SDK_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/
    export BIN_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/bin/
    
    
    • 开始编译之后,便可看到console控制台输出如下,恭喜成功编译!

    三、基于 rtos 如何打开运行一个工程。


    • 第一处修改:此rtos工程导入和安信可的导进就是一模一样的,但是需要修改的是指定的工程编译目录 , 拿我github上的一个rtos工程,其编译目录为project_template, 所以需要修改如下:

    在这里插入图片描述


    • 第二处修改:修改编译指令,还记得我们的rtos编译时候需要选择一些选项吗?比如是user1.bin还是user2.bin。这里的话,我们需要手动的编辑此编译的指令:(下面的指令是生成可升级的user1.bin的32Mbit的8266模块,对应我们的8266-12f模块)
    COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6
    

    在这里插入图片描述


    • 开始编译之后,便可看到console控制台输出如下,恭喜成功编译!

      bin crc: 1b65b8de
      Support boot_v1.4 and +
      Generate user1.4096.new.6.bin successully in BIN_PATH
      boot.bin------------>0x00000
      user1.4096.new.6.bin—>0x01000
      !!!


    在这里插入图片描述


    四、让我们烧固件走起。


    • 如果您的8266是没有最小系统的话(如下),那么需要自己搭建最小系统来烧固件进去。

    这里写图片描述


    看我们的最小系统搭建(强调:烧录时候,一定要让GPIO0处于低电平,即接GND):


    这里写图片描述


    • 让我们开始烧录:根据上面第八步的生成的bin文件,我们看见了其烧录信息:

    • eagle.flash.bin-------->0x00000

    • eagle.irom0text.bin---->0x10000


    • 于是,我们就打开烧录软件,配置刚刚的路径,选择烧录地址(选择之后就是绿色的),各个参数如下:

    这里写图片描述


    • 下载完毕之后,我们给设备重新上电,打开串口助手,设置波特率74880:

    在这里插入图片描述


    • 上面的图是不是看见很清晰的 hellow world 呀 。

    • 由于 nonos 3.0 以上步骤不可行,则具体操作请访问我的B站视频教学:https://www.bilibili.com/video/av40065898

    • 后记:所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin blank.bin,烧录地址根据您的8266型号区别;

    • 我们最平常用的是安信可8266-12系列的,这个是32Mbit,也就是4M flash ,所以他们的地址分别是 0x3FC000 和 0x3FE000 , 最后2个的烧录文件地址看编译之后结果而决定!也即是不一定是0x10000,有可能是0x2000 , 这个根据SDK的版本有关系。所以大家还是留心点!

    • 的好多人问我这个SPI MODE应该怎么选择,这个其实是esp8266芯片和flash芯片的连接方式决定的,四根线就是QIO,而DIO就是六根线,至于后面还有QOUTDOUTflash芯片有关,平时最多的是DIO或者是QIO了!

    • 最后一点,本系列博客的NONOS SDK 都是 1.4~2.2的,在今年2018年七月左右,更新到了3.0版本,一些初始化代码都已经变了,大家入门的话,还是从我的GitHub下载吧。这样较快地入门学习esp8266;如果您的是最新的3.0或者以上的工程,可能汇报以下错误:

    user_main.c:45:2: error: #error "The flash map is not supported"
     #error "The flash map is not supported"
      ^
    xt-xcc -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf  -DICACHE_FLASH -DGLOBAL_DEBUG_ON -DSPI_FLASH_SIZE_MAP=0   -I include -I ./ -I ../include -I ../include/mqtt -I ../include/modules -I ../../include -I ../../include/eagle -I ../../driver_lib/include  -o .output/eagle/debug/obj/user_main.o -c user_main.c
    user_main.c:45:2: error: #error "The flash map is not supported"
     #error "The flash map is not supported"
      ^
    user_main.c:156:58: error: 'SYSTEM_PARTITION_OTA_SIZE' undeclared here (not in a function)
         { SYSTEM_PARTITION_OTA_1,         0x1000,            SYSTEM_PARTITION_OTA_SIZE},
                                                              ^
    user_main.c:157:39: error: 'SYSTEM_PARTITION_OTA_2_ADDR' undeclared here (not in a function)
         { SYSTEM_PARTITION_OTA_2,         SYSTEM_PARTITION_OTA_2_ADDR,       SYSTEM_PARTITION_OTA_SIZE},
                                           ^
    user_main.c:158:39: error: 'SYSTEM_PARTITION_RF_CAL_ADDR' undeclared here (not in a function)
         { SYSTEM_PARTITION_RF_CAL,        SYSTEM_PARTITION_RF_CAL_ADDR,       0x1000},
                                           ^
    user_main.c:159:40: error: 'SYSTEM_PARTITION_PHY_DATA_ADDR' undeclared here (not in a function)
         { SYSTEM_PARTITION_PHY_DATA,       SYSTEM_PARTITION_PHY_DATA_ADDR,      0x1000},
                                            ^
    user_main.c:160:46: error: 'SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR' undeclared here (not in a function)
         { SYSTEM_PARTITION_SYSTEM_PARAMETER,     SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR,    0x3000},
                                                  ^
    

    • 莫急,这是因为未定义造成的,一般地,根据我们最常用的esp8266-12系列的32Mbit的模块,那么只需要在根目录的Makefile文件的第25行的代码修改如下,重新编译即可!!烧录地址不变!!
    BOOT?=new
    APP?=1
    SPI_SPEED?=40
    SPI_MODE?=QIO
    SPI_SIZE_MAP?=6
    
    

    五、上电不跑程序,异常分析。


    ESP8266 上电时打印的 boot 模式信息代表什么?如何改变 boot 模式?

    ESP8266 上电时会判断 boot strapping 管脚的状态,并决定 boot 模式。例如,ESP8266 上电时打印的 boot 模式信息如下:

    ets Jan 8 2013,rst cause:1, boot mode:(3,2)
    
    • 其中打印的 boot mode 的第一位数字(3)代表当前的 boot 模式。
    • Boot 模式由 strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:
    Strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] Boot 模式
    7 [1,1,1] SDIO HighSpeed V2 IO
    6 [1,1,0] SDIO LowSpeed V1 IO
    5 [1,0,1] SDIO HighSpeed V1 IO
    4 [1,0,0] SDIO LowSpeed V2 IO
    3 [0,1,1] Flash Boot
    2 [0,1,0] Jump Boot
    1 [0,0,1] UART Boot
    0 [0,0,0] Remapping

    烧写失败定位
    确保 boot 模式在 UART boot.

    将 ESP8266 拨到烧写模式,看烧写口的 log(默认 74880 查看). 正常烧写应该是 boot mode:(1,n), 其中n任意,第二个参数和 SDIO 相关,不用关心!

    看 log 乱码/无打印定位,确保 boot 模式在 Flash boot!

    将 ESP8266 拨到运行模式,看 log 口的输出. 正常log应该是 boot mode:(3,n),第二个参数和 SDIO 相关,不用关心!

    • 1.确保波特率正确
    • 2.确保无串口占用

    另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

    • 玩转esp8266带你飞、加群QQ群,不喜的朋友勿喷勿加:434878850
    • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
    • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
    20190430143723867.png
    展开全文
  • 而串行口只能用1条线传输位数据,每次传输一个字节的位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。 1、25针并行口插口的针脚功能:  针脚 功能 针脚...

    •串口、并口接口定义

      并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。

    1、25针并行口插口的针脚功能:

      针脚 功能        针脚 功能

       1 选通 (STROBE低电平) 10 确认 (ACKNLG低电平)

       2 数据位0 (DATAO) 11 忙 (BUSY)

       3 数据位1 (DATA1) 12 却纸 (PE)

       4 数据位2 (DATA2) 13 选择 (SLCT)

       5 数据位3 (DATA3) 14 自动换行 (AUTOFEED低电平)

       6 数据位4 (DATA4) 15 错误观点(ERROR低电平)

       7 数据位5 (DATA5) 16 初始化成(INIT低电平)

       8 数据位6 (DATA6) 17 选择输入 (SLCTIN低电平)

       9 数据位7 (DATA7) 18-25 地线路(GND)

    2.串行口的典型代表是RS-232C及其兼容插口,有9针和25针两类。

    25针串行口具有20mA电流环接口功能,用9、11、18、25针来实现。其针脚功能如下:

     针脚 功能     针脚 功能

       1 未用

       2 发出数据(TXD) 11 数据发送(一)

       3 接受数据(RXD) 12-17 未用

       4 请求发送(RTS) 18 数据接收( )

       5 清除发送(CTS) 19 未用

       6 数据准备好(DSR) 20 数据终端准备好比(DTR)

       7 信号地线路 (SG) 21 未用

       8 载波检测 (DCD) 22 振铃指示精神 (RI)

       9 发送返回( ) 23-24 未用

       10 未用 25 接收返回(一)

    9针串行口的针脚功能:

       针脚 功能 针脚 功能

       1 载波检测(DCD) 6 数据准备好(DSR)

       2 接受数据(RXD) 7 请求发送(RTS)

       3 发出数据(TXD) 8 清除发送(CTS)

       4 数据终端准备好(DTR) 9 振铃指示(RI)

       5 信号地线(SG)

    • 串口通信基本原理及接线方法

    目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。

    1.DB9和DB25的常用信号脚说明

    9针串口(DB9) 25针串口(DB25)
    针号 功能说明 缩写 针号 功能说明 缩写
    1 数据载波检测 DCD 8 数据载波检测 DCD
    2 接收数据 RXD 3 接收数据 RXD
    3 发送数据 TXD 2 发送数据 TXD
    4 数据终端准备 DTR 20 数据终端准备 DTR
    5 信号地 GND 7 信号地 GND
    6 数据设备准备好 DSR 6 数据准备好 DSR
    7 请求发送 RTS 4 请求发送 RTS
    8 清除发送 CTS 5 清除发送 CTS
    9 振铃指示 DELL 22 振铃指示 DELL

    2.RS232C串口通信接线方法(三线制)

    首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连
    · 同一个串口的接收脚和发送脚直接用线相连 对9针串口和25针串口,均是2与3直接相连;
    · 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)
    上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。

    3.串口调试中要注意的几点:

    串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。
    单工、半双工和全双工的定义
    如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
    如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。
    如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。
    电话线就是二线全双工信道。 由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也将收、发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。
    奇偶校验
    串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:
    0100,0101=45H
    D7 D0
    由于干扰,可能使位变为1,这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。
    最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
    1 0110,0101
    0 0110,0001
    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
    1 0100,0101
    0 0100,0001
    奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。
    有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等。

    串口通讯流控制

    我们在串行通讯处理中,常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解一点这方面的知识是有好处的。那么,流控制在串行通讯中有何作用,在编制串行通讯程序怎样应用呢?这里我们就来谈谈这个问题。

    1.流控制在串行通讯中的作用

    这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过MODEM进行数据传输,这个问题就尤为突出。流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。 PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面分别说明。

    2.硬件流控制

    硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
    硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。
    常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性,我个人认为,当软件里用了流控制时,应做详细的说明,如何接线,如何应用。

    3.软件流控制

    由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。一般通过XON/XOFF来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。
    应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有。

    PS:

      DB9只有9根线,遵循RS232标准。定义如下:
      DTR,DSR——DTE设备准备好/DCE设备准备好。主流控信号。
      RTS,CTS——请求发送/清除发送。用于半双工时,收发切换。属于辅助流控信号。半双工的意思是说,发的时候不收,收的时候不发。那么怎么区分收发呢?缺省时是DCE向DTE发送数据,当DTE决定向DCE发数据时,先有效RTS,表示DTE希望向DCE发送,一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。全双工时,这两个信号一直有效即可。
      随着计算机的日益普及,很多非RS232的串口也要接入PC机,如果为每一种新出现的串口都增加一个新的I/O口显然不现实,因为PC后面板位置有限,因此,将RS232串口和非RS232串口都通过RS232口接入是最佳方案。UART的U(通用)指的就是这个意思。早期ROM BIOS和DOS里的通信软件都是为RS232设计的,在没有检测到DCD有效前不会发送数据,因此,就连发送一个字符这样朴素的应用也要给出DCD、DTR、DSR等控制信号。因此,串口接头上要将一些控制线短接,或者干脆绕过系统软件自己写通信程序。
      到此,UART的涵义就总结为:通用的 异步 (串行) I/O口。
      就在UART冠以通用二字,准备一统江湖的时候,制造商们不满于它的速度、体积和灵活性(软件可配置),推出了USB和 1394串口。目前,笔记本上的UART串口有被取消的趋势,因而有网友发出了“没有串口,吾谁与归”的慨叹,古今多少事,都付笑谈中,USB取代UART是后话,暂且不表。
      话说自从贺氏(Hayes)公司推出了聪明猫(SmartModem),他们制定的MODEM接口就成了业界标准,自此以后,所有公司制造的兼容猫都符合贺氏标准(连AT指令也兼容)。
      细观贺氏制定的MODEM串口,与RS232标准大不相同。DTR在整个通信过程中一直保持有效,DSR在MODEM上电后/可以拨号前有效(取决于软件对DSR的理解),在通信过程的任意时刻,只要DTR/DSR无效,通信过程立即终止。在某种意义上,这也可以算是流控,但肯定不是RS232所指的那种主流控。如果拘泥于RS232,你是不会理解DTR和DSR的用途的。
    贺氏不但改了DTR和DSR,竟然连RTS和CTS的涵义也重新定义了。因此,RTS和CTS已经不具有最开始的意义了。从字面理解RTS和CTS,是用于半双工通信的,当DTE想从收模式改为发模式时,就有效RTS请求发送,DCE收到RTS请求后不能立即完成转换,需要一段时间,然后有效CTS通知DTE:DCE已经转到发模式,DTE可以开始发送了。在全双工时,RTS和CTS都缺省置为有效即可。然而,在贺氏的MODEM串口定义中,RTS和CTS用于硬件流控,和什么全双工/半双工一点关系也没有。 注意,硬件流控是靠软件实现的,之所以强调“硬件”二字,仅仅是因为硬件流控提供了用于流量情况指示的硬件连线,并不是说,你只要把线连上,硬件就能自己流控。如果软件不支持,光连上RTS和CTS是没有用的。
      RTS和CTS硬件流控的软件算法如下:(RTS有效表示PC机可以收,CTS有效表示MODEM可以收,这两个信号互相独立,分别指示一个方向的流量情况。)
      PC端处理:
       发.   当发现(不一定及时发现) CTS (-3v to -15v)无效时,停止发送,
           当发现(不一定及时发现) CTS (3v to 15v)有效时,恢复发送;
       收.    当接收buffers中的bytes当接收buffers中的bytes>N 时,给 RTS 无效信号(-3v to -15v);
      MODEM端处理:
      
      同上,但RTS与CTS交换。

      在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了。在RS232中RTS 与CTS 是用来半双工模式下的方向切换;HAYES Modem中的RTS ,CTS 是用来进 行硬件流控的。通常UART的RTC、CTS 的含义指后者,即用来做硬流控的。

      硬流控的RTS 、CTS :RTS (Require To Send,发送请求)为输出信号,用于指示本设备准备好可接收;CTS(Clear To Send,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS 连接B设备的CTS ;A设备的CTS 连接B设备 的RTS 。 前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS 信号(意思 通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS 信号,指示B设备开始发送数据。A设备发(B设备接收) 类似。上述功能也能在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发 送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。

      半双工的方向切换:RS232中使用DTR(Date Terminal Ready,数据终端准备)与DSR(Data Set Ready ,数据设备准备好)进行主流控,类似上述的RTS 与CTS 。对半双工的通信的DTE(Date Terminal Equipment,数据终端设备)与DCE(Data circuit Equipment )来说,默认的方向是DTE接收,DCE发送。如果DTE要发送数据,必须发出RTS 信号,请求发送数据。DCE收到后如果 空闲则发出CTS 回 应RTS 信 号,表示响应请求,这样通信方向就变为DTE->TCE,同时RTS 与CTS 信号必须一直保持。从这里可以看出,CTS ,TRS虽 然也有点流控的意思(如CTS 没有发出,DTE也不能发送数据),但主要是用来进行方向切换的。


    #如果UART只有RX、TX两个信号,要流控的话只能是软流控;如果有RX,TX,CTS ,RTS 四个信号,则多半是支持硬流控的UART;如果有 RX,TX,CTS ,RTS ,DTR,DSR 六个信号的话,RS232标准的可能性比较大。


    顺便提一下:

    DCD( Data Carrier Detect, 数据载波检测):DCE向DTE指示,线路上检测到载波。

    RI(Ring Indicator,振铃指示):DCE向DTE指示,有呼叫接入。

    • 串口通信基本接线方法

    1.串口通信基本接线方法,目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时( <12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。

    2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 同一个串口的接收脚和发送脚直接用线相连 对9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。

    3.串口调试中要注意的几点: 不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; 线路焊接要牢固,不然程序没问题,却因为接线问题误事; 串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏

    • 制作RS232串口连接线

    9针串口功能一览表
       针脚 功能1 载波检测 (DCD) 2 接收数据 (RXD) 3 发送数据(TXD)
       4 数据终端准备好 (DTR) 5 信号地 (GND) 6 数据准备好 (DSR)
       7 发送请求 (RTS) 8 发送清除 (CTS) 9 振铃指示 (RI)

       串口联机线的连接方法
       串口联机线主要用于直接把两台电脑的com口连接。比较早一点的AT架构的电脑的串口有为9针,和25针两种,现在的ATX架构的电脑两个串口全部是9针。于是联机线就分为3种(9针对9针串口联机线,9针对25针串口联机线,25针对25针串口联机线)这些直接电缆连接线可以互换的连线方法如下表:

       串口连机线一览
       9针对9针串口连接
       9针母头 9针母头
       2 —— 3 3 —— 2 4 —— 6 5 —— 5 6 —— 4 7 —— 8 8 —— 7

    如果需要做其他用途,连接 针脚 功能 2 接收数据 (RXD) 3 发送数据(TXD)5 信号地 (GND)
    这里写图片描述

    这里写图片描述

    展开全文
  • 这几天看到有朋友在讨论这样的问题,如何快速匹给定的字符

    这几天看到有朋友在讨论这样的问题,如何快速匹给定的字符串是一个有效的科学记数法表示的数字。

    如“ -1.2e-3  ”就是一个有效的数字(注意其中的空格)。

    一个符合科学记数法的字符串可以包含如下字符:符号(+、-)、数字(1~9)、小数点(.)、指数(e)、以及空格。

    常规方法使用分支结构进行逻辑判断的问题在于其判断的逻辑树过于复杂。而且如果需要加入新的规则,成堆的if——else无法顺利的更新与维护。

    此时可考虑使用状态机来解决该问题。

    为了简化,下面不考虑指数e和小数点的情况,以整数(只有符号、空格、数字位)为例,该状态机不难画出:



    注意该状态机的如下状态:

    [0]开始状态:只能接受空格、符号、数字;

    [1]符号状态:只能接受符号;

    [2]数字状态:只能接受空格、数字、结束;

    [3]空格状态:只能接受空格、结束;

    注意2个空格的区别。左边的空格表示第一个字符开始为空格,右边的表示中间或者后面出现的空格。二者状态不同。

    这样的状态机实际上是一个有向图。可以使用矩阵来实现状态机。如下图,每行表示一个状态,每列表示一个输入条件。T表示字符串为数字;F表示不是数字。


    例如,“ -1 “(首字母、末字母为空格)在该状态机中的判断路径为:0B-->0C-->1D-->2B-->3F-->T,如上图红色线条所示。

    知道状态机的原理与实现,现在就可以回到开头的问题来完整解决判断字符串是否科学记数法表示的问题了。

    科学记数法相比整数而言,多了不少状态。比如:

    小数点(出现于数字前)的状态。如已经输入了".",此时后面必须接数字,不能接收其他输入。

    小数点(出现于数字后)的状态。如已经输入了"5.",此时后面可以不接数字,表示省略0。

    数字(出现于小数点前)的状态。如已经输入了"5",此时后面可以接小数点。

    数字(出现于小数点后)的状态。如已经输入了".5",此时后面可以不可接小数点。

    数字(出现于e前)的状态。如已经输入了"5",此时后面可以接e。

    数字(出现于e后)的状态。如已经输入了"e5",此时后面不可接e。

    ......

    状态机并不唯一,主要取决于你如何将所有状态都囊括进去。

    状态机很复杂,这里就不画了,最终代码如下,状态机的实现请看代码:

    enum enum_Status
        {
            Blank   = 0,
            Signal  = 1,
            Dot     = 2,
            Epsinal = 3,
            Number  = 4,
            Alphabet= 5,
            End     = 6,
    
            T       = 98,
            F       = 99
        };
        enum_Status GetStatus(char c)
        {
            if (c >= '0' && c <= '9')
            {
                return Number;
            }
            else if (c == ' ')
            {
                return Blank;
            }
            else if (c == '+' || c == '-')
            {
                return Signal;
            }
            else if (c == '.')
            {
                return Dot;
            }
            else if (c == 'e')
            {
                return Epsinal;
            }
            else if (c == '\0')
            {
                return End;
            }
            else
            {
                return Alphabet;
            }
        }
    
        bool isNumber(const char *s) 
        {    
            int statusTable[10][7] = {
               //   +  .  e  0  a  end
                {0, 1, 2, F, 8, F, F},// 0: Begin
                {F, F, 2, F, 8, F, F},// 1: Signal
                {F, F, F, F, 9, F, F},// 2: Dot [before number]
                {7, F, 4, 5, 3, F, T},// 3: number[before e]
                {7, F, F, 5, 9, F, T},// 4: Dot [after number]
                {F, 1, F, F, 6, F, F},// 5: e
                {7, F, F, F, 6, F, T},// 6: number[after e]
                {7, F, F, F, F, F, T},// 7: Blank
                {7, F, 4, 5, 8, F, T},// 8: number[before dot]
                {7, F, F, 5, 9, F, T},// 9: number[after dot]
            };
            const char *p = s;
            int status = statusTable[0][GetStatus(*p)];
    
            while (status != (int)T && status != (int)F)
            {
                ++p;
                status = statusTable[status][GetStatus(*p)];
            }
            return (status == T);
        } 




    展开全文
  • 串口(DB9)连接线的制作方法

    万次阅读 2012-02-03 11:32:37
    串口(DB9)连接线的制作方法 2011-07-26 19:19 RS-232接口又称之为RS-232口、串口、异步口或COM(通信)口。"RS-232"是其最明确的名称。 在计算机世界中,大量的接口是使用串口进行数据连接的,连接的硬体就是RS-...
    串口(DB9)连接线的制作方法
    2011-07-26 19:19

    RS-232接口又称之为RS-232口、串口、异步口或COM(通信)口。"RS-232"是其最明确的名称。 在计算机世界中,大量的接口是使用串口进行数据连接的,连接的硬体就是RS-232九芯电缆。要制作RS-232串口线首先要了解RS-232串口的引脚说明。RS-232串口分为9针串口(俗称:公头)和9孔串口(俗称:母头)。


    各自的引脚说明如下:
    1、RS-232端口(DB9公头/针型)引脚定义:
    引脚序号:2          3             5
    信号定义:RXD    TXD         地

    2、RS-232端口(DB9母头/孔型)引脚定义:(因为计算机后面的串口多为公头,所以此母头可以直接插入计算机的COM口进行连接)
    引脚序号:2          3            5
    信号定义:TXD     RXD        地

           了解了RS-232端口公头和母头的引脚标准,制作数据线就变的相当简单,从图中可以注意到公头和母头引脚定义顺序刚好左右相反。注意这一点后,串口数据线的制作如下:

    1:公头和公头的接法:(不同计算机之间的COM口就是这种接法,此时串口线两端均用母头)
      
    COM1公头 2——   数据线母头2—(数据线)—数据线母头3   ——COM2公头 3
    COM1公头 3——   数据线母头3—(数据线)—数据线母头2   ——COM2公头 2
    COM1公头 5——   数据线母头5—(数据线)—数据线母头5   ——COM2公头 5


            由上述数据流向可见:连接两计算机COM口的数据线两头都是母头,且内部引脚进行了交叉。数据线连接的结果使得外部的两个计算机COM口数据引脚也进行了交叉:即:二三交叉,五五相连。这样就实现了两台计算机之间的COM口进行异步全双工的串口通信方式。


    2:公头和母头的接法:(有些实验开发板的串口接口用的是母头,这种连接方法一般用于计算机COM口与其他外部设备相连的一种接法。)

    计算机COM1公头 2——   数据线母头2—(数据线)—数据线公头2   ——开发板COM2公头 2
    计算机COM1公头 3——   数据线母头3—(数据线)—数据线公头3   ——开发板COM2公头 3
    计算机COM1公头 5——   数据线母头5—(数据线)—数据线公头5   ——开发板COM2公头 5

           从数据线接法可以可以看出,数据线内部引脚没有进行交叉,这是因为母头和公头的本身的引脚功能是相对的,所以不需要进行交叉。这种接法在外部表现为计算机COM1口公头的数据引脚无交叉的连向了开发板的COM2母头。

            总之:数据线的连接方法只需记住一点:相同的头要交叉,不同的头不交叉即可。这是有公头和母头本身的引脚说明决定的。

    转载自:http://blog.csdn.net/dayidson/archive/2010/07/30/5775975.aspx

    ----------------------------------------------------

    附RS-232口的相关知识:

           RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道。

          在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。   <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

          RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。   

          RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。   

      

    1.电气特性

    EIA-RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定。

    在TxD和RxD上:

    逻辑1(MARK)=3V~15V 

    逻辑0(SPACE)=+3~+15V   

    在RTS、CTS、DSR、DTR和DCD等控制线上:   

    信号有效(接通,ON状态,正电压)=+3V~+15V   

    信号无效(断开,OFF状态,负电压)=-3V~-15V   

         以上规定说明了RS-323C标准对逻辑电平的定义。对于数据(信息码):逻辑“1”(传号)的电平低于-3V,逻辑“0”(空号)的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在±(3~15)V之间。   

         EIA RS-232C 与TTL转换:EIA RS-232C 是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA RS-232C 与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。MAX232芯片可完成TTL←→EIA双向电平转换。

    2、连接器的机械特性:

    连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍两种连接器。

    1)DB-25:PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4组:

    ①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22   

    ②20mA电流环信号9个(12,13,14,15,16,17,1923,24)

    ③空6个(9,10,11,18,21,25)   

    ④保护地(PE)1个,作为设备接地端(1脚)   

    注意,20mA电流环信号仅IBM PC和IBM PC/XT机提供,至AT机及以后,已不支持。   

    2)DB-9:在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串行接口的连接器。它只提供异步通信的9个信号。DB-25型连接器的引脚分配与DB-25型引脚信号完全不同。因此,若与配接DB-25型连接器的DCE设备连接,必须使用专门的电缆线。   

    电缆长度:在通信速率低于20kb/s时,RS-232C 所直接连接的最大物理距离为15m(50英尺)。

    最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变小于4%的前提下给出的。为了保证码元畸变小于4%的要求,接口标准在电气特性中规定,驱动器的负载电容应小于2500pF。



    展开全文
  • USB转线无法正常工作解决

    万次阅读 2016-09-18 11:05:42
    如果出现能接收开发板的串口信息,但执行指令时无法正常输入,通常是计算机主板接口和USB转线之间存在兼容问题,可能是电平不匹配的原因,这时可以尝试在USB转线上连接一条普通的RS232串口线
  • 1. 问题:请用四条直线将规则排列(三行三列)的九个点连起来。...我们发现其实三条横线和竖线都可以将九个点串完,但是无法一笔画完,即便再加上一条斜线,此方案不行。反复演示,会发现一横一竖两条斜线,既能一笔
  • 网络传输介质同轴电缆双绞线光纤串口电缆

    千次阅读 多人点赞 2020-08-16 13:41:07
    终端,用一条能承载数据传输的物理介质(也成为传输介质)连接起来,就组成了一最简单的网络。 一、同轴电缆 粗同轴电缆 最长有效传输距离500米 细同轴电缆 最长有效传输距离185米 二、双绞线 线缆类别 (1...
  • 串口连接线的制作方法 com线制作

    千次阅读 2018-05-12 11:12:20
    如果在使用中这些连接线坏了,往往很多使用者都不知道应该怎么办,下面就给出这些常见的连接线的连线方法以便于修理或查找故障。在介绍之前先对一些市场常用名词做出解释。现在所有的接头都可以分为公头和母头两大类。...
  • 51单片机的串口通信(

    万次阅读 多人点赞 2018-12-02 18:27:07
    串口通信好东西,但我没用过。 下面照着普中科技的ppt搬运下。...并行通信通常是将数据字节的各位用多数据线同时进行传送 。 图:并行通信 串行通信是将数据字节分成位的形式在。 ...
  • 自制RJ45转口的连接线

    千次阅读 2009-04-18 10:17:00
    一条console线,一端是RJ-45水晶头,一端是DB-9 D型头(公头)。 首先要找一个9针串口公头(DB-9)的接插件,一段网线,一水晶头。 水晶头-串口 1-8 2-6 3-2 4-5 5-5 6-3 7-4 8-7 其中将水晶头头朝上...
  • 用C#步步写串口通信

    万次阅读 多人点赞 2016-05-17 10:43:35
    用C#步步写串口通信 标签: c#textboxbuttonobjectstring 2012-08-10 14:57 18916人阅读 评论(38) 收藏 举报  分类:   C#(2) 项目经验(1)  版权声明:本文为博主原创文章,...
  • Python 字符

    千次阅读 2017-05-10 18:12:12
    字符(String),是由零或多字符组成的有限序列,在 Python 中表示文本的数据类型。 字符只是一个符号,例如:字母(A-Z)、数字(0-9)、特殊符号(~!@#¥%...)等。
  • STM32通信接口()串口

    万次阅读 2018-04-18 21:36:53
    关于同步和异步,最简单的区分方法就是看在通信时需不需要接时钟线,像SPI、I2C等通信接口都需要接CLK线,毫无疑问它们都是同步的,而串口是种拥有两种模式的通信接口,可以选择是否连接时钟线。至于串行和并行,...
  • 剪气球

    千次阅读 2017-03-20 20:47:55
    小明买了一些彩色的气球用绳子一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一5个颜色各不相同的气球。但小明...
  • 此串口调试助手是在windows下开发的,工具是Visual Studio 2017开发的,串口调试助手支持600~~115200波特率,端口号是CMO1~~CMO9,支持数据位、停止位、奇偶位,支持数据的接收与发送,接收方式十六进制、字符的选.....
  • 最近总结了66计算机网络相关的知识,大家一起看一下吧: 1.比较http 0.9和http 1.0???? http0.9只是一个简单的协议,只有一个GET方法,没有首部,目标用来获取HTML。 HTTP1.0协议大量内容:首部,响应码,...
  • //CGRectContainsPoint 作用 : 判断CGRect 数据是否包含一个点 point 如果包含这个点 函数值就是1 //类似属性 CGRectIntersectsRect(CGRect rect1, CGRect rect2) 判断两个坐标是否有交集 //NO1. 触摸对象坐标 ...
  • 深入剖析串口通信数据格式

    万次阅读 多人点赞 2017-11-05 21:20:00
    串口是**串行接口...串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一比特一比特地逐位进行传输的通信模式。 串口按电气标准及协议来划分,包括**RS-232-C**、RS-422、RS485等。
  • 昨天做串口实验的时候一直没有成功的原因,连续调用USART_SendData总是会出现前一个被后一个覆盖的情况。 之前觉得ST的官方库应该没有问题就没往这方面想,现在查查,确实有库的问题,还是自己对库不太理解。 ...
  • 细说Java中的字符和字符

    千次阅读 2018-06-14 10:01:22
    一道经典问题 Java里的char类型能不能存储一个中文字符? ...对于这道题,绝大多数的答案都是“可以存储”。...1. java中的char是unicode存储,...3. 采用Unicode编码集,一个char占用两字节,而一个中文字符...
  • 串口RS-232 有时为什么要使用交叉线

    千次阅读 2013-08-16 12:41:03
    用串口线(公对母且非交叉的)把电脑与DE2板或者电脑与ZigBee开发板接连后,在PC上打开串口助手,测试到数据的接收与发送都正常,说明所有的设备都完好无损。   在得知DE2板与Zigbee开发板的RS232接口都是可用后...
  • C语言总结第七章、数组维数组维数组的定义维数组的引用维数组的初始化程序举例二维数组及多维数组二维数组的定义二维数组元素的引用二维数组元素的初始化程序举例字符数组和字符字符数组 第七章、数组 ...
  • 如下图所示,平面上有一些关键点集,现需要将所有的点连接起来,使得任何一个点都可以和其他点连通(直接或者间接的连接)且连接连接线段长度总和最短 例:如下图中A、B、C、D四点,连接AB、BC、BD即可满足ABCD四点...
  • 物联网,万物互联。这里涉及到的最基本的东西就是如何将所有的物联网设备连接在一起。最简单、最广泛使用的就是互联网。...说白了,只是WIFI转口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透...
  • 剪气球(360)

    千次阅读 2017-03-29 21:42:58
    题目描述小明买了一些彩色的气球用绳子一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一5个颜色各不相同的气球。...
  • USB转

    千次阅读 2016-03-25 18:03:26
    我们平时用开发板学习串口的时候直接就是一条线插到USB中,然后通过上位机就和单片机开始通信了。对纯写软件的人来说一定会很奇怪,串口明明是两条线为什么我们直接用USB就可以了呢?刚开始我也是这样的,因为只是看...
  • USB转口与虚拟串口相关

    千次阅读 2019-10-29 16:18:34
    四、其他:多程序共享一个串口数据 五、COM、COM+和DCOM与COM端口无关 、串口与并口 ()串行接口(即COM口): 简称串口,也称串行通信接口。按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB、...
  • CC2530 串口通信

    千次阅读 2018-12-29 22:21:08
    CC2530 串口通信 ...实验板开机后按照设定的时间间隔,不断地向PC及发送字符,报告自己的状态,每发送次字符消息,LED1闪亮次。具体工作方式如下:  ① 通电后LED1熄灭。   ② 设置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,136
精华内容 46,054
关键字:

一条线串九个点