STM8 UART接收中断程序

来自丢石头百科
Admin讨论 | 贡献2021年6月18日 (五) 18:00的版本 (文本替换 - 替换“http://{{”为“https://{{”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
<tbody></tbody>
<tbody></tbody>
系统功能

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

<tbody></tbody>
硬件设计

STM8 LED PB.jpg  LED控制电路原理图

STM8 UART.jpg 

UART电路原理图
<tbody></tbody>
软件设计

/********************************************************************* 微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="https://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net

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

                                                                                                                                          • /

/*---------------------------------------------------------------------- 实验内容: USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。


硬件连接:   将MCU.RXD与MCU.TXD使用短路帽短接,将PB口的LED指示灯使能开关切换到"ON"状态。


*/
  1. include <STM8S207S8.h>
  2. define LED_DDR  PB_DDR
  3. define LED_PORT PB_ODR
  4. define LED_CR1  PB_CR1
  5. 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++;        }; }

<tbody></tbody>
系统调试

短接RXD与TXD能接收到自己发送的数据,断开短接没有接收到数据。 系统不断发送数据:0,1,2。。。若正常接收,将收到0,1,2。。。。

用LED作数据指示,LED往上加,说明系统程序正常执行。