青风STM8开发板寄存器教程第五节串口UART(寄存器)

青风带你学stm8系列教程
-------------寄存器操作版本出品论坛:www.qfv8青风电子社区
番茄加速作者:青风
出品论坛:www.qfv8
交警制服淘宝店:qfv5.taobao
QQ技术:371153390
硬件平台:QF-STM8开发板
2.5串口通信的实现密钥索引
2.5.1原理分析
串口通信也称为异步串行通信,学过51的同学都会知道串口通信。串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口
通信的概念非常简单,串口按位(bit)发送和接收字节。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通信的端口,这些参数必须匹配:
a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,波特率除数(baud-rate divisor)是一个22位数,它由16位整数和6位小数组成。波特率发生器使用这两个值组成的数字来决定位周期。通过带有小数波特率的除法器,在足够高的系统时钟速率下,UART可以产生所有标准的波特率,而误差很小。
波特率除数公式:
BRD=BRDI.BRDF=SystemClock/(16×BaudRate)
其中:
BRD是22位的波特率除数,由16位整数和6位小数组成
BRDI是BRD的整数部分
BRDF是BRD的小数部分
SystemClock是系统时钟(UART模块的时钟直接来自SystemClock)
BaudRate是波特率(9600,38400,115200等)
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅
化妆品包装瓶仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
下面来看下STM8是如何实现串口功能的:巡线机器人
2.5.2硬件准备:
Stm32f8开发板串口连接入下图所示:
由于开发板485和232公用一个端口,因此使用串口232时,首先需要把P3跳线跳到串口232模式,此时:
RXD--PA4接收数据线TXD--PA5发送数据线
2.5.3软件准备:
软件配置采用直接寄存器来写stm8,工程配置入下图所示,开发者只需要编写UART.C子驱动函数就可以在main中直接调用了:
在进行串口通信前,首先需要把串口的参数配置完成,在库函数stm8s_uart1.C文件中提供了函数UART1_Init来对串口进行配置,如下代码所示:
01.void USART_Configuration(void)//串口初始化函数
02.{
03.unsigned int baud_div=0;
04.UART1_CR1=(0<<4)|(0<<2)|(0<<0);
05.//1位起始位8位数据位不使用奇偶校验不使能奇偶校验中断
06.UART1_CR3=(0<<6)|(0<<4)|(0<<3);//设置1位停止位不使能SCLK
07.UART1_CR2=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2);
08.//使能发送和接收接收中断发送中断禁止,如果需要使用中断可以开,本例没有使用中断
09.//设置波特率
10.baud_div=HSIClockFreq/BaudRate;//分频因子
11.UART1_BRR2=baud_div&0x0f;
12.UART1_BRR2|=((baud_div&0xf000)>>8);
cao20
13.UART1_BRR1=((baud_div&0x0ff0)>>4);//先给BRR2赋值最后再设置BRR1
14.UART1_CR1|=(0<<5);/*使能UART*/
15.}
上面的结构体设置了串口通信的几个数据流参数,包括传输方式:单工,全双工,半双工,下图为8BIT数据位的帧格式:
首先看下设置串口控制寄存器UART_CR1,本寄存器说明如下,我们需要设置几个位:
位4:设置为0,表示如上面的时序图,一个起始位,8个数据位,n个停止位,这个n由CR3里面来设置,等下详细说明。
位2:不使用奇偶效验位;

本文发布于:2024-09-21 22:08:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/197400.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:串口   使用   时钟   数据位   数据   参数   中断   设置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议