STM8S的通用异步收发器UART的原理解析

STM8S的通用异步收发器UART的原理解析,第1张

串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具

STM8S的通用异步收发器UART)主要特性:

● 全双工的,异步通信

● 可编程数据字长度(8位或9位)

● 可配置的停止位-支持1或2个停止位

一般的,我们使用串口通信主要是关心几点参数:波特率、停止位、奇偶校验位。

其次就是如何发送、如何接收数据,这里介绍的使用阻塞式发送数据、中断方式接收数据。

以下代码是初始化串口,参数为:115200 1停止位 无校验位

voidInit_UART1(void)

{

CLK_PCKENR1|=0X04;//使能USART1时钟

UART1_CR1=0x00;

UART1_CR2=0x00;

UART1_CR3=0x00;

//必须先写BRR2

//例如对于波特率位115200时,分频系数=16000000/115200=139

//对应的十六进制数为008B,BBR1=08,BBR2=0B

UART1_BRR2=0x0B;

UART1_BRR1=0x08;

UART1_CR2=0x2c;//允许接收,发送,开接收中断

}

波特率设置需要通过计算,STM8S的默认主频是16M,得到写入寄存器的数为139。注意,这里需要先写入BRR2再写入BRR1,且格式特殊:

BRR1应夹在BRR2之间!(需要修改波特率需要好好理解)

编程手册描述如下:

STM8S的通用异步收发器UART的原理解析,STM8S的通用异步收发器UART的原理解析,第2张

阻塞式发送函数(发送一个字节)如下:

voidSendChar(u8dat)

{

while((UART1_SR&0x80)==0x00);

UART1_DR=dat;

}

只需要将数据加载到UART1_DR寄存器里就算是OK。

终端接收数据函数如下:

//将收到的数据再发送出去

#pragmavector=UART1_R_OR_vector//0x19

__interruptvoidUART1_R_OR_IRQHandler(void)

{

u8res;

res=UART1_DR;

return;

}

使用中断需要声明中断函数入口,并且指定中断表序号(串口1接收中断向量为0x19):

#pragmavector=UART1_R_OR_vector//0x19

__interruptvoidUART1_R_OR_IRQHandler(void)

只要串口接收到一个字节的数据就会立即进入此函数,数据存放在UART1_DR寄存器中。

注意:要使用中断这个功能需要在mian函数中加入开启中断语句:

_RIM;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2597165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存