串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。
STM8S的通用异步收发器(UART)主要特性:
● 全双工的,异步通信
● 可编程数据字长度(8位或9位)
● 可配置的停止位-支持1或2个停止位
一般的,我们使用串口通信主要是关心几点参数:波特率、停止位、奇偶校验位。
其次就是如何发送、如何接收数据,这里介绍的使用阻塞式发送数据、中断方式接收数据。
以下代码是初始化串口,参数为:115200 1停止位 无校验位
void Init_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之间!(需要修改波特率需要好好理解)
编程手册描述如下:
阻塞式发送函数(发送一个字节)如下:
void SendChar(u8 dat)
{
while((UART1_SR & 0x80)==0x00);
UART1_DR = dat;
}
只需要将数据加载到UART1_DR寄存器里就算是OK。
终端接收数据函数如下:
//将收到的数据再发送出去
#pragma vector= UART1_R_OR_vector//0x19
__interrupt void UART1_R_OR_IRQHandler(void)
{
u8 res;
res = UART1_DR;
return;
}
使用中断需要声明中断函数入口,并且指定中断表序号(串口1接收中断向量为0x19):
#pragma vector= UART1_R_OR_vector//0x19
__interrupt void UART1_R_OR_IRQHandler(void)
只要串口接收到一个字节的数据就会立即进入此函数,数据存放在UART1_DR寄存器中。
注意:要使用中断这个功能需要在mian函数中加入开启中断语句:
_RIM;
上一篇:stm8s中UART的用法(四种UART中断)
下一篇:STM8L151系列 使用定时器计时,全局滴答器jiffes
推荐阅读最新更新时间:2024-11-02 17:17
设计资源 培训 开发板 精华推荐
- 用于开/关控制应用的 AM2G-4812SH30Z 12V 2 瓦 DC-DC 转换器的典型应用
- 【训练营_进阶班】OLED物联网控制系统
- Type-C to DC5.5 PD/QC诱骗器
- LTC3412、2.5V、2.5A 稳压器,采用全陶瓷电容器
- LT1683 的典型应用 - 转换率受控的超低噪声推挽式 DC/DC 控制器
- ADL5561-EVALZ,基于 ADL5561 2.9 GHz 超低失真 RF/IF 差分放大器的评估板
- L78L12AC可调输出稳压器的典型应用
- 16 位 ADC 为狭小空间带来准确的高端电流检测
- AD587KRZ 低功耗电压基准、12 位 CMOS DAC 应用的典型应用电路
- 用于视频/成像的 ±5V 模拟放大