logo

STM8应用笔记 STM8单片机笑傲江湖 STM8 UART接收中断程序

STM8 UART接收中断程序

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

   使用STM8的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示!

硬件设计


LED控制电路原理图



UART电路原理图

软件设计

/*********************************************************************
微 雪 电 子 WaveShare http://www.waveShare.net
目标系统: 基于STM8单片机
应用软件: Cosmic CxSTM8
说 明: 若用于商业用途,请保留此段文字或注明代码来源
深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
*********************************************************************/

/*----------------------------------------------------------------------
实验内容:
USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。
----------------------------------------------------------------------
硬件连接: 
将MCU.RXD与MCU.TXD使用短路帽短接,将PB口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------*/

#include <STM8S207S8.h>

#define LED_DDR  PB_DDR
#define LED_PORT PB_ODR
#define LED_CR1  PB_CR1
#define LED_CR2  PB_CR2

void Init_UART3(void)
{
      UART3_CR1=0x00;
      UART3_CR2=0x00;
      UART3_CR3=0x00;
      // 设置波特率,必须注意以下几点:
      // (1) 必须先写BRR2
      // (2) BRR1存放的是分频系数的第11位到第4位,
      // (3) BRR2存放的是分频系数的第15位到第12位,和第3位
      // 到第0位
      // 例如对于波特率位9600时,分频系数=2000000/9600=208
      // 对应的十六进制数为00D0,BBR1=0D,BBR2=00

      UART3_BRR2=0x00;
      UART3_BRR1=0x0d;

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

void UART3_sendchar(unsigned char c)
{
      while((UART3_SR & 0x80)==0x00);
      UART3_DR=c;
}

@far @interrupt void UART3_Recv_IRQHandler (void)
{
      unsigned char ch;
      ch=UART3_DR;
      LED_PORT=ch;
      return;
}

void main(void)
{
      unsigned char i=0;

      LED_DDR=0XFF;
      LED_CR1=0XFF;
      LED_CR2=0X00;
      Init_UART3();
      _asm("rim");

      while(1)
      {
            UART3_sendchar(i);
             i++;
      };
}


系统调试

短接RXD与TXD能接收到自己发送的数据,断开短接没有接收到数据。
系统不断发送数据:0,1,2。。。若正常接收,将收到0,1,2。。。。
用LED作数据指示,LED往上加,说明系统程序正常执行。

STM8 UART接收中断程序

——