STM8教程第十二章串口及其应用.docx
- 文档编号:28478230
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:9
- 大小:542.78KB
STM8教程第十二章串口及其应用.docx
《STM8教程第十二章串口及其应用.docx》由会员分享,可在线阅读,更多相关《STM8教程第十二章串口及其应用.docx(9页珍藏版)》请在冰豆网上搜索。
STM8教程第十二章串口及其应用
STM8教程-第十二章-串口及其应用
第十二章串口及其应用
前面三节介绍了STM8的IO口以及时钟编程。
这一节我们将学习STM8的串口。
通过本节学习,你将了解到STM8串口的基本使用方法。
前面三节介绍了STM8的IO口操作以及时钟编程。
这一节我们将学习STM8的串口。
作为软件开发重要的调试手段,串口的作用是很大的。
在调试的时候可以用来查看和输入相关的信息。
在使用的时候,串口也是一个和外设(比如GPS,GPRS模块等)通信的重要渠道。
STM8的串口资源相当丰富的,功能也相当强劲。
STM8有波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和IrDASIRENDEC规范
接下来我们将从寄存器层面,告诉您如何设置串口,以达到我们最基本的通信功能。
本实例中,我们将实现利用串口1不停的打印一个信息到电脑上,以及例程二的同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。
串口最基本的设置,就是波特率的设置。
STM8的串口使用是很简单的。
配置步骤:
1.编程UART_CR1的M位来定义字长。
2.在UART_CR3中编程停止位的位数。
3.按下列顺序编写波特率寄存器选择要求的波特率
a)UART_BRR2
b)UART_BRR1
4.设置UART_CR2中的TE位来使能发送模式
5把要发送的数据写进UART_DR寄存器(此动作清除TXE位)。
在只有一个缓冲器的情况下,对每个待发送的数据重复此步骤。
下面,我们就简单介绍下这几个与串口基本配置直接相关的寄存器。
1、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分别是奇偶效验,奇偶效验选择,效验中断使能。
由于
我们没有定义奇偶效验在此不再详细说明,默认就可以。
2、UARTx_CR2
控制寄存器2主要负责管理中断和发送接收的使能
TIEN、TCIEN、RIEN、ILIEN分别对应发送中断,发送完成中断,接收中断以及IDLE中断
TEN是发送使能,当TEN=1的时候我们就可以通过串口进行发送数据,当然前提是我们已经设置好对应的寄存器
REN是接收使能,当REN=1的时候我们可以通过串口接收其它设备的数据
RWU接收唤醒
SBK发送断开帧
3、UARTx_CR3
在这个寄存器中我们主要使用了STOP,也就是设置停止位数
LINENLin模式的使能,这里我们不详细说明
STOP设置停止位数001个停止位
01保留
102个停止位
111.5个停止位
CLKEN时钟使能,由于我们没有采用3根线,只用了UART_RX和UART_TX所以不需要设置这个寄存器,默认就可以
CPOL、CPHA、LBCL对应着的是时钟极性,时钟相位以及最后一个时钟脉冲,详细介绍请见寄存器手册
4、波特率有关寄存器
5、数据寄存器
发送和接受的数据通过这个寄存器的读写就可以实现
6、状态寄存器
通过读取这个寄存器可以知道UART的工作状态
我们本实验就需要查询这个寄存器的某个位,来清除数据是否发送完毕
TXE发送数据寄存器空0的时候非空,1为空
TC发送完成0未完成1完成发送
RXNE读数据寄存器非空0数据没有收到1数据收到
其它的位分别为检查到IDLE总线,过载错误,噪声标志位,帧错误,奇偶效验错误
简单的寄存器就结束到此,除此之外还有其它很多寄存器望读者查阅寄存器手册
有了以上的基础,我们可以开始这一节的软件编写了
在开始软件代码编程之前,先说明一下我们的硬件
我们的实验板是共用一根USB线实现多功能操作,分别是下载程序功能,供电功能以及串口功能,传统的串口需要串口接口,考虑到方便我们自己通过PL2303把串口转成可以通过USB进行通信,下面开始我们的例程一,简单的发送数据给
终端
例程一、简单数据发送
#include"iostm8s207rb.h"
voiddelay_ms(intvalue);
intmain(void)
{
unsignedchartemp=0;
CLK_CKDIVR=0x00;//主频为16M
UART1_CR1=0x00;//关闭UART,设置数据位8位,禁止奇偶效验,禁止中断
UART1_CR3=0x00;//一位停止位,默认值
UART1_BRR2=0x0b;//设置波特率为115200
UART1_BRR1=0x08;
UART1_CR2_TEN=1;//使能发送
while
(1)
{
while(!
UART1_SR_TC);//等待一帧发送完毕,再传送下一帧
UART1_DR=temp;
temp++;
if(temp>=255)
temp=0;
delay_ms(100);
}
}
/*
********************************************
简单延时程序
********************************************
*/
voiddelay_ms(intvalue)
{
inti,j;
if(value<1)
value=1;
for(i=0;i!
=value;++i)
for(j=0;j!
=5000;++j);
}
编译下载后,打开串口调试助手,复位单片机就可以看到对应的数据输出,如下图:
可以看出是从0递进的数,因为我们的串口设置是115200波特率,所以串口调试助手也对应这个波特率
例程二、串口接收及发送
我们实现的功能是通过串口接收电脑的数据,并把对应的数据发送给电脑。
这里我们采用了中断的方式来接受。
中断这个字眼是第一次出现在我们的实验中,所以略为简要说一下中断。
简单来说中断的产生会让CPU停止当前的工作而转到特定的地方运行预先设定好的程序。
我们的例程就是在接到到串口的数据后,由单片机硬件置位而产生一次接收数据的中断,本身中断向量号是18,但是IAR的规定要加上2,所以这个中断号是20,转为16进制是0x14因此我们可以在这个中断的服务函数中把刚接受到数据发回给电脑,软件代码如下:
#include"iostm8s207rb.h"
voiddelay_ms(intvalue);
intmain(void)
{
CLK_CKDIVR=0x00;//主频为16M
UART1_CR1=0x00;//关闭UART,设置数据位8位,
//禁止奇偶效验,禁止中断
UART1_CR3=0x00;//一位停止位,默认值
UART1_BRR2=0x0b;//设置波特率为115200
UART1_BRR1=0x08;
UART1_CR2_TEN=1;//使能发送
UART1_CR2_RIEN=1;//接收中断使能
UART1_CR2_REN=1;//使能接收
PD_DDR_DDR0=1;
PD_CR1_C10=1;
PD_ODR_ODR0=1;
asm("rim");//开全局中断
while
(1)
{
delay_ms(100);
}
}
/*
********************************************
简单延时程序
********************************************
*/
voiddelay_ms(intvalue)
{
inti,j;
if(value<1)
value=1;
for(i=0;i!
=value;++i)
for(j=0;j!
=5000;++j);
}
#pragmavector=0x14
__interruptvoidUART1_RX_IRQHandler(void)
{
unsignedchartemp;
temp=UART1_DR;
PD_ODR_ODR0=~PD_ODR_ODR0;//指示灯
while(!
UART1_SR_TC);//等待一帧发送完毕,再传送下一帧
UART1_DR=temp;
}
串口调试助手的截图,而且我们在中断服务函数中做了一个指示灯
串口在调试中是占很重要的一部分,我们所有开发的例子都是在串口调试或者LCD显示中排错的,在没有仿真器的前提下,通过可以利用的有限资源来调试可以锻炼调试水平。
因为在系统调试中有没有仿真器效果一样,更多的是通过printf函数来调试系统
STM8S207的UART是很强大的一个外设,我们只是编写了其中最简单的串口,剩
下留给读者自己研究
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM8 教程 第十二 串口 及其 应用