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

串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、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之间!(需要修改波特率需要好好理解)
编程手册描述如下:
阻塞式发送函数(发送一个字节)如下:
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;

第四次科技发展的短板之处,能源储存技术
什么是LCOS硅基液晶数码成像技术
PWS4000系列电源的特点与应用优势
Vivado设计之HLS开发详细步骤
肖特基二极管参数及特点
STM8S的通用异步收发器UART的原理解析
变频器常用的控制方式综述
A706应用电路(高压升压驱动器,带有6通道恒电流调节器)
谷歌Pixel Launcher安全补丁,App图标随机在主界面消失
模拟芯片行业技术发展情况及市场前景分析预测
LN6210系列低压差电压稳压器概述、用途及特点
安富利帮助企业打造更加舒适便捷节能的智慧生活
你还在质疑比特币的故事吗
vivo NEX 3S 5G开启预热 采用隐藏式按键设计并支持44W闪充
药典包装容器密封性方法验证
防爆对讲机的基础知识
学习KNN算法的基本原理,并用Python实现该算法以及阐述其应用价值
工业网关应用分享:PLC远程监控与远程维护
外媒曝华为MateX 塑料屏幕不耐划
巡检机器人助力天然气站安全管理