UART的使用:串口通信!

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


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

●  全双工的,异步通信

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

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


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

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


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

扫描二维码关注公众号,回复: 2075611 查看本文章

  1. void Init_UART1(void)
  2. {
  3. CLK_PCKENR1 |= 0X04; //使能USART1时钟
  4. UART1_CR1= 0x00;
  5. UART1_CR2= 0x00;
  6. UART1_CR3= 0x00;
  7. // 必须先写BRR2
  8. // 例如对于波特率位115200时,分频系数=16000000/115200=139
  9. // 对应的十六进制数为008B,BBR1=08,BBR2=0B
  10. UART1_BRR2= 0x0B;
  11. UART1_BRR1= 0x08;
  12. UART1_CR2= 0x2c; //允许接收,发送,开接收中断
  13. }


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

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

编程手册描述如下:



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

  1. void SendChar(u8 dat)
  2. {
  3. while((UART1_SR & 0x80)== 0x00);
  4. UART1_DR = dat;
  5. }
只需要将数据加载到UART1_DR寄存器里就算是OK。


终端接收数据函数如下:

  1. //将收到的数据再发送出去
  2. #pragma vector= UART1_R_OR_vector//0x19
  3. __ interrupt void UART1_R_OR_IRQHandler(void)
  4. {
  5. u8 res;
  6. res = UART1_DR;
  7. return;
  8. }

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

  1. #pragma vector= UART1_R_OR_vector//0x19
  2. __ interrupt void UART1_R_OR_IRQHandler(void)


只要串口接收到一个字节的数据就会立即进入此函数,数据存放在UART1_DR寄存器中。
注意:要使用中断这个功能需要在mian函数中加入开启中断语句:

_RIM;

猜你喜欢

转载自blog.csdn.net/qinrenzhi/article/details/80882482