15.4、 串口2的Printf输出实验.pdf

上传人:紫竹语嫣 文档编号:5514371 上传时间:2020-05-27 格式:PDF 页数:13 大小:587.55KB
返回 下载 相关 举报
15.4、 串口2的Printf输出实验.pdf_第1页
第1页 / 共13页
15.4、 串口2的Printf输出实验.pdf_第2页
第2页 / 共13页
15.4、 串口2的Printf输出实验.pdf_第3页
第3页 / 共13页
15.4、 串口2的Printf输出实验.pdf_第4页
第4页 / 共13页
15.4、 串口2的Printf输出实验.pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《15.4、 串口2的Printf输出实验.pdf》由会员分享,可在线阅读,更多相关《15.4、 串口2的Printf输出实验.pdf(13页珍藏版)》请在三一文库上搜索。

1、 串口串口2的的Printf输出实验输出实验 前面两节介绍了STM32的IO口操作。这一节我们将学习STM32的常用接口UART串口。通 过本节的学习,将了解到STM32串口的基本原理、初始化及其发送功能的使用。本节分为如下几个 小节: 4.4.1 串口发送实验的意义与作用 4.4.2 实验原理 4.4.3 硬件设计 4.4.4 软件设计 4.4.5 下载与验证 4.4.6 实验现象 ? 意义与作用意义与作用 早在当年51单片机内置串口的时候,被认为是微控制器发展史上的重大事件,因为当时的串口 是唯一一个微控制器与PC交互的接口。现在经过这么多年串口仍然是MCU微控制器必不可少的接口 之一。

2、串口的使用对于我们开发调试过程中的作用是非常之大,可以用来查看,打印以及输入相关信 息,是我们在嵌入式开发中最先与中央处理器通信的接口,学习好串口的功能,对于后续神舟IV号 的各个例程的调试具有至关重要作用。 STM32的通用同步异步收发器(USART)是相当丰富的,功能也很强劲。最多可提供5路串口(神 舟IV号开发板使用的是STM32F107VCT6,具有5个串口)。该USART有分数波特率发生器,发送和 接收共用的可编程波特率,最高达4.5Mbits/s;可编程数据字长度(8位或9位);可配置的停止位-支持1 或2个停止位;支持单线半双工通讯;支持LIN;支持智能卡协议和IrDA SIR

3、ENDEC规范(仅串口3 支持)、具有DMA等。 这一节我们将学习 STM32 的串口。通过本节的学习,你将了解到 STM32 串口的基本使用方法。 ? 实验原理实验原理 串行通信基础知识串行通信基础知识 串行通讯的基本概念:与外界的信息交换称为通讯。基本的通讯方式有并行通讯和串行通讯两 种。 一条信息的各位数据被同时传送的通讯方式称为并行通讯。并行通讯的特点是:各数据位同时 传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近 距离(相距数米)的通。 一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。 串行通讯的特点是:数据位传送,传按位顺序进行,最

4、少只需一根传输线即可完成,成本低但 送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传 送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。 ? 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 ? 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称 为半双工传输。 ? 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。 串行通讯又分为异步通讯和同步通讯两种。在单片机中,主要使用异步通讯方式。 串口的原理和特点

5、串口的原理和特点 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者 USB混淆) 。 大多数计算机包含两个基于RS232的串口。 串口同时也是仪器仪表设备通用的通信协议; 很多GPIB(通用接口总线)兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采 集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信 慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距 离通信。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1

6、)地线,(2)发送,(3) 接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线 用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。 对于两个进行通行的端口,这些参数必须匹配: a.波特率:波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每 秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么 时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400, 28800和36600。波特率可以远远大于这些值,

7、但是波特率和距离成反比。高波特率常常用于放置的 很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b.数据位:数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8 位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0127(7 位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数 据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位 取决于通信协议的选取,术语“包”指任何通信的情况。 c.停止位:停止位:用于表示单个包的最后一位。典型的值

8、为1,1.5和2位。由于数据是在传输线上定时 的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止 位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不 同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d.奇偶校验位奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没 有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个 值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0, 保证逻辑高的位数是偶数个。如果是奇校验,校验

9、位位1,这样就有3个逻辑高位。高位和低位不真 正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机 会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步. e硬件流控制硬件流控制: 硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪) 流控制。硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将 通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数 据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据 流。这种硬

10、件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓 冲区大小的75)和一个低位标志(可为缓冲区大小的25),当缓冲区内数据量达到高位时,我 们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据, 直到接收端缓冲区的数据量低于低位而将CTS置高电平。 RTS则用来标明接收设备有没有准备好接收 数据。 常用的流控制还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。 ? STM32串口串口 STM32的串口是相当丰富的,功能也很强劲。最多可提供5路串口(神舟IV号引出了串口1和串 口2),有分数波特率发生器、支持单线光

11、通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIR ENDEC规范(仅串口3支持)、具有DMA等。 串口最基本的设置,就是波特率的设置。STM32的串口使用起来还是蛮简单的,只要你开启了 串口时钟,并设置相应IO口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可 以使用了。下面,我们就简单介绍下这几个与串口基本配置直接相关的寄存器。 1.STM32串口时钟的使能串口时钟的使能 串口作为STM32的一个外设,其时钟由外设始终使能寄存器控制,这里我们使用的串口1是在 APB2ENR寄存器的第14位。说明一点,就是除了串口1的时钟使能在APB2ENR寄存器,其他串口的 时钟

12、使能位都在APB1ENR。 2.串口复位串口复位 当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新 配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外 设的操作。串口1的复位是通过配置APB2RSTR寄存器的第14位来实现的。APB2RSTR寄存器的各位 描述如下: 从上图可知串口1的复位设置位在APB2RSTR的第14位。通过向该位写1复位串口1,写0结束复 位。其他串口的复位位在APB1RSTR里面。 3.串口波特率设置 每个串口都有一个自己独立的波特率寄存器USART_BRR, 通过设置该寄存器达到配置不同波特 率的目

13、的。该寄存器的各位描述如下: 前面提到STM32的分数波特率概念,其实就是在这个寄存器里面体现的。最低4位用来存放小数 部分DIV_Fraction,15:4这12位用来存放整数部分DIV_Mantissa。高16位未使用。这里波特率的计 算通过如下公式计算: 这里的 (x=1、2)是给外设的时钟(PCLK1用于串口2、3、4、5,PCLK2用于串口1), USARTDIV是一个无符号的定点数,它的值可以有串口的BRR寄存器值得到。而我们更关心的是如 何从USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率,和PCLKx的时钟,要 求的就是USART_BRR的值。 4.串

14、口控制串口控制 STM32的每个串口都有5个控制寄存器USART_CR15, 串口的很多配置都是通过这3个寄存器来 设置的。这里我们只要用到USART_CR1就可以实现我们的功能了,该寄存器的描述在STM32参考 手册第496也有详细介绍,在这里我们就不列出来了。 5.数据发送与接收。数据发送与接收。 STM32的发送和接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了发送 和接收两部分。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也在该寄存 器中。该寄存器的各位描述如下: 寄存器USART_DR的各位描述 注意:虽然USART_DR是一个32位寄存器,但

15、31:9是强制为“0”,只用了低9位(DR8:0)。 DR8:0为串口数据, 包含了发送或接收的数据。 由于它是由两个寄存器组成的, 一个给发送用(TDR), 一个给接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之 间的并行接口。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。 当使能校验位(USART_CR1种PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同, MSB是第7位或者第8位)会被后来的校验位该取代。 当使能校验位进行接收时,读到的MSB位是接收到的校验位。 6.串口状态寄存器串口状态寄存器USART_SR 串口的状态

16、可以通过状态寄存器USART_SR读取。USART_SR的各位描述如下: 寄存器USART_SR各位描述 这里我们主要关注一下三位,第5,6,7位RXNE、TC和TXE。 串口最基本的设置,就是波特率的设置,然后配置数据位长度,奇偶校验位等信息。至于串口 时钟、串口复位、串口的控制等等,详细请参考【中文】STM32F系列ARM内核32位高性能微处 理器参考手册V10_1.pdf第516页开始阐述USART串行口以及540页开始关于寄存器的描述。 ? 硬件设计硬件设计 由于处理器输出的是TTL/COMS电平,而PC串口为RS-232电平,所以硬件需要使用一颗电平转 换芯片MAX3232实现双向电

17、压转换。原理图如图表 1 神舟IV号串口原理图所示。由于串口外围电 路很简单也很常见,再此就不做深入讲解了。 图表 1 神舟 IV 号串口原理图 串口数据的输入和输出是站在处理器角度看的: USART2_RX:接收数据串行输入。通过过采样技术来区别数据和噪音从而恢复数据。 USART2_TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被 激活,并且不发送数据时,TX管脚处于高电平。 GND:数字地。为接收和发送信号提供参考地。 神舟IV号开发板上有 2 个RS-232C串口,如图表 3 神舟IV号开发板的 2 个RS-232C串口所示。 这两个RS-232C串口

18、为DB9 公头插针,其线序与PC电脑上的DB9 公头插针相同,都为 2 脚输入到开 发板,3 脚输出,如所图表 2 DB9 公头线序及信号定义示。所以只要一根母到母交叉串口线就可以 方便的将这两个串口连接起来,或者将开发板上的串口与PC机连接起来。 图表 2 DB9 公头线序及信号定义 图表 3 神舟 IV 号开发板的 2 个 RS-232C 串口 DB9管脚管脚 功能描述功能描述 DB9管脚功能描述管脚功能描述 1 NC 6 NC 2 USART1_PA10 开发板接收7 NC 3 USART1_PA9 开发板发送 8 NC 4 NC 9 NC 5 GND 表格 1 串口 1(CN5)信号定

19、义 DB9管脚管脚 功能描述功能描述 DB9管脚功能描述管脚功能描述 1 NC 6 NC 2 USART2_PD6 7 NC 3 USART2_PD5 8 NC 4 NC 9 NC 5 GND 表格 2 串口 2(CN6)信号定义 注:由于串口1与USB的ID和VBUS信号复用,使用时需要改变跳线位置,所以我们推荐使用串口2, 我们的示例也大都是在串口2输出信息。 由于 STM32 的管脚数量有限,所以其串口管脚为多功能复用管脚,为了不同功能硬件不相互影 响,开发板上使用跳线来选择对应功能,在做此次试验前需要检查神舟 IV 号开发板上的跳线位置是 否正确。 如果连接串口 2 (推荐, 默认出厂

20、跳线既连接好了串口 2) , 则需要将JP4 的 2?3 用跳帽短接, 如图图表 4 串口 2 跳线位置图所示;如果连接串口 1(不推荐,默认出厂跳线不是连接串口 1), 则需要将JP3 和JP5 的 2?3 用跳帽短接,如图图表 5 串口 1 跳线位置图所示。 图表 4 串口 2 跳线位置图 图表 5 串口 1 跳线位置图 跳线连接正确后使用交叉母对母串口线连接神舟IV号开发板的串口2(推荐)到PC或 USB转串口线,下面可以开始软件设计了。 ? 软件设计软件设计 这一节我们使用串口2实现Printf函数打印输出信息,在PC电脑终端显示出来。 在软件设计中,我们先来了解关于ST库函数中配置串

21、口参数。关于STM32的USART的 库 函 数 实 现 , 主 要 是 在 STM32F10x_StdPeriph_Driver 库 的 “ stm32f10x_usart.c ” 和 “ stm32f10x_usart.h ” 两 个 文 件 里 。 以 V3.3.0 版 本 的 库 为 例 , 这 两 个 文 件 位 于 “STM32F10x_StdPeriph_Lib_V3.3.0LibrariesStm32F10x_StdPeriph_Driver”目录的“src” 和“inc”文件夹里: 首先, 完成串口发送单个字节的函数, 在库函数模板的main.c中一般会有如下图表 6 串 口

22、PUTCHAR_PROTOTYPE宏定义的宏定义,这是为了兼容不同的编译平台。 图表 6 串口 PUTCHAR_PROTOTYPE 宏定义 然后,我们关注串口的发送函数,通过此函数,我们发送一个字符出去。我们需要按照 图 表 7 串 口 PUTCHAR_PROTOTYPE 函 数 实 现 所 示 完 成 函 数 体 , 第 一 句 “USART_SendData(EVAL_COM1, (uint8_t) ch);”是调用“stm32f10x_usart.c”库文件中的 字符发送函数,然后是while循环等待发送结束“(USART_GetFlagStatus(EVAL_COM1, USART_F

23、LAG_TC) = RESET)”。如果不等待发送结束就返回,则在字符串发送函数中 PUTCHAR_PROTOTYPE函数会被连续循环调用多次, 如果上一次发送的字节在寄存器中还 没有发送结束, 此时再次写同样的发生寄存器会将刚才的数据覆盖掉, 接收侧将得不到预期 的数据。 图表 7 串口 PUTCHAR_PROTOTYPE 函数实现 接下来,我们再来看USART相关的结构体,主要是用来配置串口的波特率,数据位, 奇偶校验位等信息等。完成USART_InitTypeDef USART_InitStructure;结构体变量的赋值, 该结构体位于“stm32f10x_usart.h”中,如图表

24、8 USART_InitTypeDef结构体定义所示,可 选的值如图表 9 串口USART_InitTypeDef成员变量可选的值所示。 图表 8 USART_InitTypeDef 结构体定义 图表 9 串口 USART_InitTypeDef 成员变量可选的值 了解了库函数关于USART的一些相关的函数,结构体定义后,我们回到本实验中。本 实验中直接调用库函数进行设计。在本实验的主程序中,需要对USART_InitTypeDef结构体 进行初始化设置,配置串口的基本参数,以下图表 10 串口初始化与打印为将神舟IV号的 串口 2 初始化为 115200,8bit模式:调用完“STM_EVA

25、L_COMInit(COM1, ”函数后就可以想以前一样使用printf函数来完成打印输出任务。 图表 10 串口初始化与打印 扩展讨论扩展讨论-系统打印效率系统打印效率 串口发送函数有两种写法如下图表 11 串口发送函数方法一和图表 12 串口发送函数 方法二所示,对系统来说,哪种好一些? 假设有一个循环程序, 每次经过复杂的计算后打印一个字节, 每次复杂的计算需要花费 时间 Tc,MCU 处理器发次一个字节需要时间 Ts)。如果使用方法一,则每打印一个字节 需要花费时间为(Tc+ Ts);如果使用方法二,则每打印一个字节需要花费时间为(Tc Ts ? Tc : Ts)。说明此时方法二执行效

26、率高一些。 图表 11 串口发送函数方法一 图表 12 串口发送函数方法二 ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码 04、UART串口 2Printf.rarProject4、UART串口2PrintfEWARMv5STM32F107VC-ARMJISHUExe目录下的 ARMJISHU_UART串口2Printf.hex文件即为我们分析的蜂鸣器鸣响实验编译好的固件,我们 可以直接通过JLINK V8将固件下载到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误

27、!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 将固件下载在神舟IV号STM32开发板后,用随板配置的串口线连接神舟IV号串口2与电 脑的串口,打开超级终端,并按如下参数配置串口。 图表 13 超级终端串口参数配置 上电运行神舟 IV 号,串口将重复打印如下“WWW.ARMJISHU.COM USART2 configured”信息,如下图所示: 图表 14 printf 函数打印输出截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1