串口通信详解(寄存器版)

上传人:小** 文档编号:113706017 上传时间:2022-06-26 格式:DOC 页数:22 大小:757KB
返回 下载 相关 举报
串口通信详解(寄存器版)_第1页
第1页 / 共22页
串口通信详解(寄存器版)_第2页
第2页 / 共22页
串口通信详解(寄存器版)_第3页
第3页 / 共22页
点击查看更多>>
资源描述
5.4串口通信的收与发5.4.1什么是串口通信串丨1通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。串丨1是计算机上一种非常通用的设备通信协议。大多数计算机(不包扌舌笔记本电脑)包含两个基丁RS-232的串I1。串丨I同时也是仪器仪表设备通用的通信协议(串II通信协议也可以用于获取远程采集设备的数据)。当年51单片机内置串II的时候,被认为是微控制器发展史上的重人事件,因为当时的串I1是唯一一个微控制器与PC交互的接II。MCU微控制器经过这么多年的发展,串丨I仍然是其必不可少的接I之一。5.4.2串口通信的属性1. 通信存在的问题评价一个通信是否优质,主要体现在传输的速度,数据的正确性,功耗是否低,布线成本是否低(例如1根线收发都能满足就比8根线的并行收发要节约成本);使用是否普及(就好像人家都学英语,世界很丿、部分的人都可以独立使用英语吗,会英语的人多,就非常普及,可通信面就非常广;如杲你学的鸟语,那就只能跟鸟通信,没有人能听懂)。2. 串口到底有几个标准?(经常听说有3线、5线串口)传统的串行接II标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。像现在所说的几线串II,一般都是指使用了几根线,最初的RS-232串II是25针的,所有的针脚定义都有用到,后來变成了9针的,所谓全功能串II就是所有的针脚定义都使用上了,例如流最控制,握手信号等都有用到,一般来说国外的产品做产品比较规矩,把所有的串II信号都做上去了。但是国内的技术人员发现,其实RS-232串II最主要使用的就是2,3线,另外的接II如果不使用的话,也不会出现很人的问题,所以,就在9针的基础上做精简,所以就有所谓的2,3,4,5,6,8线的串口出来了。.2线串II只有RXD.TXD两根基本的收发信号线:3线串丨I除了RXD和TXD,还有GND;所谓49线只是在TXD和RXD基础上增加了相应的控制信号线,依据实际需要进行设计。一般來说,使用5线的232通信,是加了换件流控的,即RTS,CTS信号,主要是为了保证高速通信时的可靠性,如果你的通信速度不是很高,完全可以不用理会。3. 串口的速度与距离RS-232(串II的英文代名词)采取不平衡传输方式,即所谓单端通讯。由J淇发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最长为约15米,最高速率为20kb/SoRS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为37kQo所以RS-232适合本地设备么间的通信。4. 从串口通信衍生出422与485的通信方式RS-232、RS-422与RS-485都是串行数据接II标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品Z间的兼容。RS-422由RS-232发展而來,它是为弥补RS-232Z不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接II,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低J:100kb/s时),并允许在一条平衡总线上连接最多10个接收器oRS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA.EIA-422-A标准。为扩展应用范围,EIA又J-1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时増加了发送器的驱动能力和冲突保护特性,扩展了总线共模范閘,后命名为TIAEIA-485-A标准。由丁EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。RS-232、RS-422与RS-485标准只対接II的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。如录像机厂家中的Sony与松卜对录像机的RS-422控制协议是有差异的,视频服务器上的控制协议则更多了,如Louth、Odetis协议是公开的,而ProLINK则是基TPiofile上的。5. 串口的通信方式(串II属丁串行通信)(1)并行通信和串行通信51单片机与外界通信的基本方式有两种:并行通信和串行通信,并行通信是指利用多条数据传输线将一个数据的各位同时发送或接收。串行通信是指利用一条传输线将数据一位位地顺序发送或接收。并行通信和串行通信的示意图如卜图:地址发射极E就是小水流,集电极C-发射极E就是大水流。当然,如果把水流比为电流的话,会更确切,因为三极管毕竟是一个电流控制元件。集电极c基极B小水流大水流大水流E小水流PNP型如果某一天,天气很早,江水没有了,也就是人的水流那边是空的。管理员这时候打开了小阀门,尽管小阀门还是一如既往地冲击人阀门,并使之开启,但因为没有水流的存在,所以,并没有水流出来。这就是三极管中的截止区。饱和区是一样的,因为此时江水达到了很大很人的程度,管理员开的阀门大小已经没用了。如果不开阀门江水就自己冲开了,这就是二极管的击穿。在模拟电路中,一般阀门是半开的,通过控制其开启人小来决定输出水流的人小。没有信号的时候,水流也会流,所以,不工作的时候,也会有功耗。而在数字电路中,阀门则处开或是关两个状态。当不工作的时候,阀门是完全关闭的,没有功耗。那么NPN与PNP的三极管到底有些什么区别呢?中齐E-HENFN型PNP型NPN和PNP主要就是电流方向和电压正负不同,说得“专业”一点,就是“极性”问题。NPN是用B-E的电流(小水流)控制C-*E的电流(大水流),E极电位最低,且正常放人时通常C极电位最高,即VCVBVEaPNP是用E-*B的电流(小水流)控制E-C的电流(人水流),E极电位最高,且正常放人时通常C极电位最低,即VCVBVEo半导体三极管也称为晶体三极管,可以说它是电子电路中最重要的器件。它最主要的功能是电流放大和开关作用。接卜來的一些使用中会用到。5.4.5RS-232电平与TTL电平的转换关J-RS-232电平与TTL电平的特性在前而已经讲过,本节主要讲解使用较多的计算机RS-232电平与单片机TTL电平之间的转换方式。MAX232等芯片可实现RS-232电平到TTL电平的转换,但是现在用的较多还有MAX202,HIN232等芯片,它们同时集成了RS-232电平和TTL电平之间的互转。为丰富大家的知识,卜而首先讲解在没有MAX3232这种现成电平转换芯片时,如何用二极管、三极管、电阻、电容等分立元件搭建一个简单的RS-232电平与TTL电平之间的转换电路。1.用单独的电容电阻三极管实现RS-232电平与TTL电平转换电路集成芯片内部都是由最基本电子元件组成,如电阻、电容、二极管、三极管等元件,为了方便用户使用,制造商把这些具有一定功能的分立元件封装到一个芯片内,这样就制成了我们使用的各种芯片。学会本电路后,我们也就基本搞清了MAX232芯片内部的大致结构。MAX232是把TTL电平从0V、5V转换到3V15V或-3V-15V之间。如卜图所示:(1)若发送低电平0,首先TXD(TTL低电平)发送数据时,TXD上是低电平,这时Q3导通(具体请看上节三极管的描述),PCRXD由空闲时的低电平变高电平,满足条件。(2)发送高电平1时,TXD为高电平,Q3截止,由J-PCRXD内部高阻,而PCTXD平时是-3-15V(RS-232的高电平就是负的电压,这点是要注意的,高电平并不是正电压),通过D1和R7将其拉低PCRXD至-3-15V,此时计算机接收到的就是lo卜面再反过来,PC发送信号,由单片机來接收信号。当PCTXD为低电平-3-15V时,Q4截止,单片机端的RXD被R9拉到5V高电平;当PCTXD变高时,Q4导通,RXD被Q4拉到低电平,这样便实现的双向转换,这是一个很好的电路,值得人家学习。2.MAX232芯片实现RS-232电平与TTL电平转换MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,它的内部有一个电源电压变换器,可以把输入的+5V电源电压变换成为RS-232输出电平所需的+10V电压。所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了o对丁没有+12V电源的场合,其适应性更强,加之其价格适中,硬件接口简单,所以被广泛采用。MAX232芯片实物和其引脚结构和外围连接如下图所示:mac5E叵辽辽ldILITMAX2A2%JNlolfbslllN0151I3TnlR121R0+IOVRS-232IOUTI5TRS-232输入TTUCMOSJ输入1TL/CMOSJ输出6-10V54-54-10VCH340PL2303,PL2303用的最多,因为最便宜,国内很多开发板板子上,包括USE转串【I线用的都是这种芯片,几元钱一片,电路也简单,做简单的串II应用可以,但是做嵌入式开发如使用超级终端波特率在115200时就有可能出现延迟等现彖。CH340是南京沁恒的芯片,做的还不错,对普通应用完全能够满足。最好的是FT232稳定、可靠,在很多USE转串II的卜墩线、编程器中使用的都是这一种,神舟开发板上目前使用的是PL2303HX芯片。USB转串II芯片转出来串丨I电平就是TTL电平,高电平一般是3.3V,如果转出来的电平再经过MAX232或MAX485芯片再转一下就会输出RS232电平或者485电平。其实市面上的USB转串I线一般都是这样接的。5.4.8例程01最简单串口打印$字符1. 例程简介:STM32的GPIOA端II的PA9和PA10位,即串丨I1;设置PA9为TX输出模式,复用功能推挽输出模式;设置PA10为RX输入模式,模拟输入模式;对超级终端打印输出字符”S”符号。拿串丨I线将STM32神舟III号开发板上的串II1和电脑的串丨I连起來,具体硬件电路这里不细说。2. 调试说明:1)打开开始菜单-程序附件通讯超级终端舟系列开发板-超级终瑞Windows:Update强力卸我电脑上的较件Ira程序Q阿里旺旺卖姦版&附件B文档)卧设置FP搜索(C)帮助和支持01)3运行KeiluVisiy画閤1计算器萼记爭本0写字板%远程桌面连播屁通讯超级终端注销AdministratorQ-).关闭计算机)2.5厘米1行1列录制修订扩展改写中2)输入“STM32神舟系列开发板”紂件电)编辑查看边刚11)倍送帮助2S汨B窗3)紧接着,将神舟III号开发板上的串I11和电脑的串丨I用串I1线连起來。(我这里用的是台式机,台式机预留的串口一般为串1-11)舟系列开发板-超级终瑞文幷镰渲密查S(Y)呼叫&)传送(I)帮助Qp4)波特率例程代码中设置的是115200,数据流控制是无,选择完毕,点确定按钮比M知K金土ICOI4J性冋冈:诵口设潼还原为默认值迅)确定取消应用(A)5)最后把例程程序卜载到开发板里,然后按一卜开发板复位或者重新上电,就会打印出的字符,一会打印一个,恭喜发财哦!STI32神舟系列开发板-超壤终瑞文件的编辑墮)查看边呼叫传送帮助DfQB窗3. 关键代码:intmam(void)/main是程序入丨IRCC_imt();时钟频率的配置LED.initQ;/LED初始化配置uart_uut();串II接II初始化,这个部分是按STM32芯片手册的要求来做的,比较枯燥,细节感兴趣的朋友可以去研究下while(1)USART1-DR=0x24;/打印符号$,0x24是ASCII码LEDON;点亮LED灯Delay(OxFFFFFF);/延时LEDOFF;/熄灭LED灯Delay(OxFFFFFF);/延时voiduaiVimtQfloatUSARTDIV;/*因为32位的USART_BRR波特率设置寄存器只有低16位有效,所以这里我们定义16位寄存器就足够了*/ul6USARTDIV_zhengshu;这里相当j;U16,无符号16位ul6USARTDIV_xiaoshu;这里相当无符号16位RCC-APB2ENR|=12;使能PORTAII时钟RCC-APB2ENR|=114;使能串丨I时钟GPIOA-CRH&=OXFFFFFOOF;GPIOA-CRH|=OXOOOOOSBO;/IO状态设置USARTDIV=(float)(72*1000000)/(115200*16);USARTDIV.zliengshu=USARTDIV;USARTDIV.xiaoshu=(USARTDIV-USARTDIV.zhengshu)*16;USARTDIV_zliengshu=4;USARTDIV_zliengshu+=USARTDIV_xiaoshu;RCC-APB2RSTR|=114;复位串丨I1RCCAPE2RSTR&=(114);停止复位USART1-BRR=USARTDIVzhengshu;USART1-CR1|=0X200C;/I位停止,无校验位.代码详细分析:(1) RCC_mit();这个函数是负责时钟频率的配置,这里默认配置为72MHZ,前面章节有详细分析,这里简化,有疑问的可以翻看前面的章节细节。(2) LED_mit()这个函数是初始化LED的配置,这个是附带的,如果串II无法正常打印,只要程序能运行,那LED灯就会进行闪烁。(3) uaejnitO这个函数负责串门的初始化,这个部分是按STM32芯片手册的要求來做的,比较枯燥,细节感兴趣的朋友可以继续往卜看,不感兴趣的可以跳过这一节,这个函数耍把波特率初始化为115200,卜面我们仔细分析一下代码:(3-1)初始化一卜波特率的值,一个是波特率的整数部分,一个是波特率的小数部分u16USARTDIV_zhengshu;这里和当J:ul6,无符号16位,波特率的整数部分ul6USARTDIV_xiaoshu;这里相当J:u16,无符号16位,波特率的小数部分(3-2)初始化串I1的时钟,再初始化PA9和PA10两个管脚的GPIO端IIA的时钟。从原理图可以看到,USART1的TX和RX就是PA9和PA10,要使用串II不仅仅要初始化6戸10端11人的时钟,还要初始化串II的时钟,这里是需要注意的,如果点灯程序或者只做为普通的GPIO管脚使用,就不需要初始化串LI的时钟。串II时钟使能。串丨I作为STM32的一个外设,其时钟由外设始终使能寄存器控制,这里我们使用的串丨I1是在APE2ENR寄存器的第14位。这里需要注意的一点是,除了串【I1的时钟使能在APB2ENR寄存器,其他串【I的时钟使能位都在APBlENRoRCC-APB2ENR|=12;使能PORTAII时钟RCC-APB2ENR|=114;/使能串丨I时钟(3-3)设置串I1通信RXD和TXD的配置,一个管脚是接收就要设置为输入模式,一个管脚是输出,就设置成输出模式:寄存器CRL是设置GPIO的07位,CRH是设置GPIO的815位,可以看到这里是设置GPIOA端【I的9和10位,即PA9和PA10设置PA9为TX输出模式,复用功能推挽输出模式设置PA10为RX输入模式,模拟输入模式GPIOA-CRH&=0XFFFFF00F;GPIOA-CRH=0X000008B0;/IO状态设置(3-4)设置波特率,在CPU是72MHZ的频率下,设置波特率为115200;STM32中波特率是如何计算的,首先看下文档:Tx/Rx波持率=fpCLKx(16USARTDIV)fpCLKx(x=l、2)是给外设的时钟(PCLK1用于串II2、3、4、5,PCLK2用串II1),USARTDIV是一个无符号的定点数,它的值可以有串门的USART.BRR寄存器值得到。而我们更关心的是如何从USARTDIV的值得到USARTJBRR的值,因为一般我们知道的是波特率,和PCLKx的时钟,要求的就是USART.BRR的值。25.6.3波特比率寄存器(USART_BRR)注乐如果花2妁E被分别禁止,波特计数譽停止计数地址偏移:0x08貝位值:0x0000&3116保留位便件强制为0位15:4DIV_MantlSS311:0rUSORTDIV的整数部分这12位定义了USART分類溜除法闵于(USARTDIV)的整歎郃分.位3QdivFraction(3:oj;usartdiv的尔数郃分这4位定义fUSART分烦黠除法肉子(USARTDIV)的小数部分.可以看到上图波特比率寄存器USART.BRR是低16位有效,高16位是闲置的,最低4位用來存放整数部分DIV_Fraction,15:4这12位用来存放小数部分DIV_Maiitissao高16位未使用。这里波特率的计算通过如下公式计算:假设我们的串【1要设置为115200的波特率,而PCLK2的时钟为72Mo这样,我们根据上面的公式有:波特率=(16USARTDIV)USARTDIV=fpCLKx/波特率*16=(72*1000000)/(115200*16)=39.0625我们查看STM32F10XX参考手册中的第525页的一个表:表154设克波特率时的谋差计算波特寧fpcutM36MHztfcW=72MHz序号Kbps实际WEF波特率窃存掘中的值实际破特率窃存器中的(tt1242.400937.50%2.418750%29.69.600234.3750%9.6468.750%319.219.2117.18750%19.2234.3750%457.657.639.06250%57678.1250%5115.2115.38419.50J5%115.239.06250%6230.4230.7699.750J6%230.76919.50.16%7460.3461.5384.8750J6%461.5389.750.16%8521.6923.0762.43750-16%923.0764.8750.16%92250225010%225020%104500不可能不可能不可能450010%7.CPU的时钟频率越低菜特定波彳3率的谋崔也越低曾啊2.只OJSART1便用PCLK2(加尚72MH。具它USART使用PCLK1(虽岛36材H2)。USARTDIV的值被设置为39.0625,也就是USART_BRR寄存器那么得到:DIV_Mantissa=39=0x27;DIV_Fraction=16*0.0625=1=0x1;这样,我们就得到了USART1-BRR的值为0x271。只要设置串丨I1的BRR寄存器值为0x271就可以得到115200的波特率。USARTDIV=(float)(72*1000000)/(115200*16);/M出USARTDIV的值USARTDIVzliengshu=USARTDIV;/*因为波特率设置寄存器是USARTDIV整数在03位,小数在415位乘以16是因为小数点后而是4位,将它右移过來取成整数*/USARTDIVxiaoshu=(USARTDIV-USARTDIV.zhengshu)*16;USARTDIV_zliengshu=4;USARTDIV_zliengshu+=USARTDI7_xiaoshu;(3-5)当CPU刚启动的时候一般都需要重新复位一卜外设,确保该外设在正常供电稳定后,能够稳定的工作可以看到复位一卜之后就可以了,然后停止复位,让其开始正常工作。串II复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。串丨11的复位是通过配置APB2RSTR寄存器的第14位來实现的。APB2RSTR寄存器的各位描述如卜:31302928272625242322212019181716保留1514131211109S76543210ADC3RSTUSART1RSTTIM8RSTSPI1RSTTIM1RSTADC2RSTADC1RSTIOPGRSTIOPFRSTIOPERSTIOPDRSTIOPCRSTIOPBRSTIOPARST保留AFIORSTrwrwrwrvrwlTrwrwrwrwrwrwrwrwresrw从上图可知串II1的复位设置位在APB2RSTR的第14位。通过向该位写1复位串丨I1,写0结束复位。其他串【I的复位位在APB1RSTR里面。RCC-APB2RSTR|=114;复位串丨I1RCC-APB2RSTR&(114);/停止复位(3-6)把115200的波特率设置到USART1-BRR寄存器中,并且设置一卜串丨I控制的寄存器USART_CR1oSTM32的每个串丨I都有3个控制寄存器USART_CR13,串II的很多配置都是通过这3个寄存器來设置的。这里我们只要用到USART.CRl就可以实现我们的功能了,这里主要设置该串丨1使能,正式启动这个串丨1功能该寄存器的描述在STM32F1XX参考手册第542有更多的详细介绍:25.6.4控制寄存器1(USART_CR1)地址儼移OxOC复位值:0x0000313029282726252423212019IS1716保留1514131211109876543210保樹UETAKEPCEPSPEIETXEIETCIERXNEIEIDLEIEIERERVUSBKresrrrrrrrrrxrrxrrvrvrvrxrErx:nrrxr位3144保留位.碰件强制为0,fe13UE:USART使能(USARTenable)十访位被濟零,在当前字节传输完成后USART的分频器和输出停i卜匸作,以减少功耗,该位由软件设宜和淸零.0:USART分频器和输出陂禁止;1:USART模块使能,位12M:字长(Wordlength)该位定义了数据字的长度由软件对其设宜和淸冬0:一个起始位,8个数据位,n卜停止位:1:一个起始位.9个数据位,n个停止位。注意:布数拒传输过円中(发送或音後收时).不能修改这个付.&11WAKE;啖最的方広(Wakeupmethod)这位决定了出USART唤駆的方法.由软仕对该位设5和清冬0:被空闲总线唤酬:1:被地址标记唤USART1-BRR=USARTDIVzhengshu;USART1-CR1|=0X200C;/I位停止,无校验位.(3-7)数据发送与接收。STM32的发送与接收是通过数据寄存器USART.DR來实现的,这是一个双寄存器,包含了发送或接收的数据。由r它是由两个寄存器组成的,一个给发送用(TDR),个给接收用(RDR),该寄存器兼具读和写的功能,寄存器描述如卜:2462数据寄存器(USART_DR)地址偏移;0X04复位值;不确定3130292S272$25242322212019IS1716保留1514151211109876543210保留DRL8:0rwrwrrrvitxzvrwrF|位31:9保留宜,现件飯刖为0位DR8:0;数IK值包含了发送或接收的散由于它是由两个寄存的.一个给发送用(TDR),个给接敬用(RDR)f谏奇存暑義具濤和写怖功能TDR奇弃春提供了内部总峥和输出移的并行接口厲見H236).RDRW存善提供了输入移位彷存戏和内部总銭之闾的井行揍口.当便能枝验也(USART.C貝1种PCE位技位)进行发送时写到MSB的值(根懈数堀的长度不PhMSB是第了位或者第&位)会被后来的枚验位该取代.当便能枝检也进行接收时.it到的MSB位是接收到的牧鲨也.DR8:0为串丨I数据,可以看出,虽然是一个32位寄存器,但是只用了低9位(DR8:0,其他都是保留。代码USART1-DR=0x24是被用来打印符号$,0x24是ASCII码请看I、图,通过把这个0x24输送给USART_DR寄存器后,就可以打印出$字符。(4) 进入wlHle(l)死循环,不停的让LED灯亮和灭,然后每次LED亮灭一次,就打印一个$字符,中间有一些延时,具体代码很简单。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!