单片机
返回首页

stm8s开发(三) UART的使用:串口通信

2020-02-24 来源:eefocus

串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、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;

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章