- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章 串口及其应用
前面三节介绍了 STM8 的 IO 口以及时钟编程。这一节我们将学习 STM8 的串口。通过本节学习,你将了解到 STM8 串口的基本使用方法。
前面三节介绍了STM8的IO口操作以及时钟编程。这一节我们将学习STM8的串口。作为软件开发重要的调试手段,串口的作用是很大的。在调试的时候可以用来查看和输入相关的信息。在使用的时候,串口也是一个和外设(比如GPS,GPRS模块等)通信的重要渠道。 STM8的串口资源相当丰富的,功能也相当强劲。STM8有波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和IrDA SIR ENDEC规范
接下来我们将从寄存器层面,告诉您如何设置串口,以达到我们最基本的通信功能。本实例中,我们将实现利用串口1不停的打印一个信息到电脑上,以及例程二的同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。 串口最基本的设置,就是波特率的设置。STM8 的串口使用是很简单的。
配置步骤:
1. 编程 UART_CR1 的 M 位来定义字长。
2. 在 UART_CR3 中编程停止位的位数。
3. 按下列顺序编写波特率寄存器选择要求的波特率
a) UART_BRR2
b) UART_BRR1
4. 设置 UART_CR2 中的 TE 位来使能发送模式
5 把要发送的数据写进 UART_DR 寄存器(此动作清除 TXE 位)。
在只有一个缓冲器的情况下,对每个待发送的数据重复此步骤。
下面,我们就简单介绍下这几个与串口基本配置直接相关的寄存器。
UARTx_CR1 (x 是指对应的 UART,STM8 有多个 UART,详细请见对应数据手册)
R8、T8 是在数据字长定义为 9 位时才使用的,对应的是接收第 8 位和发送第 8位(都是从第 0 位开始算)
UARTD 是 UART 的使能位,0的时候使能 UART,1的时候不可以用 UART,默认 0,M 是定义串口的字长,0为8位字长,1是9位的字长
下面的 PECE,PS,PIEN 分别是奇偶效验,奇偶效验选择,效验中断使能。由于
我们没有定义奇偶效验在此不再详细说明,默认就可以。
UARTx_CR2
控制寄存器 2 主要负责管理中断和发送接收的使能
TIEN、TCIEN、RIEN、ILIEN 分别对应发送中断,发送完成中断,接收中断以及IDLE 中断
TEN 是发送使能,当 TEN = 1 的时候我们就可以通过串口进行发送数据,当然前提是我们已经设置好对应的寄存器
REN 是接收使能,当 REN = 1 的时候我们可以通过串口接收其它设备的数据
RWU 接收唤醒
SBK 发送断开帧
UARTx_CR3
在这个寄存器中我们主要使用了 STOP,也就是设置停止位数
LINEN Lin 模式的使能,这里我们不详细说明
STOP 设置停止位数 00 1 个停止位
01 保留
10 2 个停止位
11 1.5 个停止位
CLKEN 时钟使能,由于我们没有采用 3 根线,只用了 UART_RX 和 UART_TX 所以不需要设置这个寄存器,默认就可以
CPOL、CPHA、LBCL 对应着的是时钟极性,时钟相位以及最后一个时钟脉冲,详细介绍请见寄存器手册
波特率有关寄存器
数据寄存器
发送和接受的数据通过这个寄存器的读写就可以实现
状态寄存器
通过读取这个寄存器可以知道 UART 的工作状态
我们本实验就需要查询这个寄存器的某个位,来清除数据是否发送完毕
TXE 发送数据寄存器空 0 的时候非空, 1 为空
TC 发送完成 0 未完成 1 完成发送
RXNE 读数据寄存器非空 0 数据没有收到 1 数据收到
其它的位分别为检查到 IDLE 总线,过载错误,噪声标志位,帧错误,奇偶效验错误
简单的寄存器就结束到此,除此之外还有其它很多寄存器望读者查阅寄存器手册
有了以上的基础,我们可以开始这一节的软件编写了
在开始软件代码编程之前,先说明一下我们的硬件
我们的实验板是共用一根 USB 线实现多功能操作,分别是下载程序功能,供电功能以及串口功能,传统的串口需要串口接口,考虑到方便我们自己通过 PL2303把串口转成可以通过 USB 进行通信,下面开始我们的例程一,简单的发送数据给
终端
例程一、简单数据发送
#include iostm8s207rb.h
void delay_ms(int value);
int main( void )
{
unsigned char temp = 0;
CLK_CKDIVR = 0x00; //主频为16M
UART1_CR1 = 0x00; //关闭UART,设置数
文档评论(0)