您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 帧格式 >

从原理图PCB到移植RTOS【细说STM32】【四】UART

发布时间:2019-06-20 00:41 来源:未知 编辑:admin

  UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。

  若加入一个合适的电平转换器,如SP3232E、SP3485,UART 还能用于RS-232、RS-485 通信,或与计算机的端口连接。UART 应用非常广泛,手机、工业控制、PC 等应用中都要用到UART。

  串行通信是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。

  异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。

  数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。

  数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输

  校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验)

  停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

  注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)

  总结起来,如果我们要配置串口通信,至少要设置一下几个参数:字长(即一次传输数据的长度)、波特率(即每秒传输的数据位数)、奇偶校验位及停止位。

  根据下图红色箭头标记可以看出:对于接收来说,它经过编解码模块,然后直接进入到了接收移位寄存器,接收移位寄存器一位一位的接收数据,然后再将接收到的数据一次性写到接收数据寄存器(RDR)中,这样,CPU就可以通过读取接收数据寄存器(RDR)来读到接收的数据。

  同样,对于发送来说,CPU将数据写入到发送数据寄存器(TDR),发送数据寄存器(TDR)将数据一次性的发送给发送移位寄存器,然后再根据波特率将数据一位一位的移出。如下图:

  我们知道,发送和接收事先要确定好波特率,那么波特率是怎么配置的呢?我们顺着箭头继续往下找:

  根据上图所示,我们不难看出:波特率是通过发送控制器和接收控制器分别控制发送器时钟和接收器时钟,然后传输到发送移位寄存器和接收移位寄存器中的。

  通过上图我们还可以看出:发送器时钟和接收器时钟来自同一单元。我们现在就来分析一下这两个时钟是怎么产生的。

  上文中已经介绍过,波特率实际上就是每秒传输的二进制位数,通过对时钟的控制可以改变波特率。我们向波特比率寄存器(即上图中的USART_BRR)写入参数,修改了串口时钟的分频值USARTDIV。

  举一个简单的例子:假设我们串口1要设置的波特率为115200,PLCK2的时钟频率为72MHz,根据上面的公式,我们可以得出:

  由于USARTDIV是对串口外设的时钟源进行分频,不同的USART挂载的总线并不相同,所以它们的时钟源fPCLK也不相同。USART1挂载在APB2总线上,其时钟源为fPCLK2;USART2、3、4、5挂载在APB1上,其时钟源为fPCLK1。串口的时钟源经过USARTDIV分频后,分别输出作为发送器时钟及接收器时钟,来控制发送和接收的时序。

  首先,我们打开iBox开发板的例程USART_DEMO,在左侧的工程目录中找到USER工程文件夹点击前方的“+”,找到main.c文件并打开。

  这个函数的功能是将一个字符写入到文件中。其参数包括:Ch要写入的字符; *f指向FILE结构的指针。

  上图中的代码是对GPIO端口的配置。其配置方法在第三讲中有提及到,我们可以看出其配置的是PA9端口。因为PA9端口同时也是USART1_TX,即串口的发送数据端口。

  上图中的代码是对PA10端口的配置。因为PA10端口同时也是USART1_RX,即串口的接收数据端口。

  我们看一下GPIO的工作模式:GPIO_Pin_9的工作模式为复用推挽输出;GPIO_Pin_10的工作模式为浮空输入。我们可以在STM32参考手册中找到GPIO配置中关于USART的配置,如下表:

  我们工作模式为全双工,所以根据表格,配置好相应的GPIO端口工作模式,分别为复用推挽输出和浮空输入。

  在此之前,我们可以在工程目录种先找到stm32f10x_usart.h(可以在main.c下面找到,因为我们的main函数包含了此库函数),即USART库函数。

  我们可以在最下面找到许多函数声明。我们可以在用户手册种找到这些函数的描述,大家可以简单了解一下。

  我们继续浏览stm32f10x_usart.h库函数,可以找到typedef struct,如下图(为方便截图,在此已将注释隐藏):

  我们可以发现我们程序种需要配置的USART相关参数都在这里有所声明。不仅如此,继续向下翻阅还可以找到所需配置的相关参数(由于代码略多,在此不做截图,读者可自己查阅)。

  了解了这些,对串口的初始化和配置分析就非常容易了。我们回到主函数,观察串口初始化和配置的几行代码:

  接下来,我们观察实验现象:首先将程序烧录到iBox中,然后我们使用USB转TTL串口工具将iBox与电脑连接,如下图所示:

  iBox的J12接口从左到右依次为:TX、RX和GND(注意:我们没有为iBox接电源,iBox需要单独供电)。

  如上图:首先我们需要根据我们的程序配置串口(不同助手界面可能有所不同)。

http://pghzombie.com/zhenggeshi/132.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有