stm8s实现串口中断接,中断发功能

代码演示:

一、首先进行UART1初始化

/*USART1 config*/
void USART1_Init(void)
{
      /*Uart1*/
      UART1_CR1=0x00;
      UART1_CR2=0x00;
      UART1_CR3=0x00;
      // 设置波特率,必须注意以下几点:
      // (1) 必须先写BRR2
      // (2) BRR1存放的是分频系数的第11位到第4位,
      // (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
      // 例如对于波特率位9600时,分频系数=2000000/9600=208
      // 对应的十六进制数为00D0,BBR1=0D,BBR2=00
      //例如对于波特率位9600时,没有分频 = 16000000/9600 = 1666
      //对应的十六进制数为0682,BBR1=68,BBR2=02

      UART1_BRR2=0x02;
      UART1_BRR1=0x68;
      
      UART1_CR2 = 0x2c;  //接收,发送使能,开接收中断
}

注意的事项:波特率的设置方式,在UART1初始化中打开了接收,发送使能,但是只打开了接收中断,而发送中断打开在哪里呢?接下来往下看。

二、接收中断服务函数中的操作过程

//将收到的数据再发送出去
#pragma vector= UART1_R_RXNE_vector           //0x14
__interrupt void UART1_R_RXNE_IRQHandler(void)
{
  u8 data;
  if(UART1_SR & 0x20)  //收到数据该位置位
  {
    UART1_SR &= ~0x20; //清接收中断标志位
    
    rs485_data = UART1_DR;
    
    Rev_Slaver_PrePare(data);    
  }
}

这里采用的接收中断方式不是采用while()去等待接受标志位完成,而是采用接收一个数据就传递一个数据到需要处理的函数,有人可能会说在接收中断中不要去做太多的事情,其实不然,在对接收数据处理函数中其实是对接收到的数据进行存储并不像复杂的逻辑运算而担心中断触发太久。处理函数这边就不贴出来,本文主要的目的是将接收,发送中断的处理方式。

三、发送中断处理方式

void USART1_SendArray(uint8_t *data,uint8_t len)
{
  for(uint8_t i = 0;i < len;i++)
  {
    Tx1Buffer[count1++] = *(data + i);
  }
  UART1_CR2 |= 0x80; //直接开启发送中断
}
#pragma vector= UART1_T_TC_vector    //0x13
__interrupt void SYS_UART1_TX_IRQHandler(void)
{
  if(UART1_SR & 0x80)
  {
    UART1_DR = Tx1Buffer[Tx1Counter++];
    
    if(Tx1Counter == count1)
    {
      UART1_CR2 &= ~0x80;       //关闭发送中断
    }
  }
}


需要发送的数据串调用USART1_SendArray();,将会触发中断发送服务函数进行发送,在这里说明一点,stm8s103f3这款芯片的发送中断服务函数与接收中断服务函数不是同一个,这与stm32系列的芯片不太一样,后者是发送和接收中断共用同一个串口中断服务函数,在中断向量表中可观察到不同。

在进入中断发送服务函数中后,将要发送的数据串依次装入UART1_DR,这里就不需要像接收中断服务函数中清标志位,这边是硬件自动清除。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值