×
嵌入式 > 技术百科 > 详情

STM8S103之串口中断接收

发布时间:2020-06-03 发布时间:
|

本文以STM8S103F3P6编程为例,介绍STM8S103F3P6串口中断接收。


电脑平台:Windows7 64位旗舰

编译软件:IAR

硬件平台:STM8S103F3P6


1.系统时钟初始化为内部16M


CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);    //时钟   初始化时钟为1分频 16M   2分频8M


2.初始化串口


  UART1_DeInit();

  UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

  

  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

 

  UART1_Cmd(ENABLE);

  enableInterrupts(); 

 


3.编写主函数


void main(void)

{

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  Init_UART1();

  enableInterrupts(); 

 /* Infinite loop */

  while (1)

  {

    if(flagpacker)

    {

      flagpacker = 0;

      

      for(unsigned char num = 0; num < length;num++)

        Send(Rxpacker[num]);

    }

  }

}

 


4.编写中断服务函数


unsigned char flagpacker;   //全局变量    是否完整接收一个数据包  

unsigned char Rxpacker[255];    //全局变量    完整数据包 

unsigned char length;    //数据长度

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

 {

    /* In order to detect unexpected events during development,

       it is recommended to set a breakpoint on the following instruction.

    */

 unsigned char RxBuf;                                             //临时接收  

  static unsigned char RxData[255];//接收数据缓存区  

  static unsigned char count;                                     //串口接收数据长度  

  static unsigned char rec;  //  判断是否正在接收数据

   UART1_ClearITPendingBit(UART1_IT_RXNE);

   RxBuf = UART1_ReceiveData8();

   

  if(RxBuf == (0xcc))  //帧头

  {  

    rec= 1;  

    count = 0;  

    flagpacker = 0;  

    return ;  

  }  

  if(RxBuf  == (0xcd))  //帧尾

  {  

    rec= 0;  

    //此处可以添加校验码  

    length = count;

    for(unsigned char i = 0; i

    {  

      Rxpacker[i] =RxData[i];  

    }  

    flagpacker = 1;//告诉系统已接收一个完整的数据包   

    return ;  

  }  

  if(rec)                                              //判断是否处于接收状态  

  {  

    RxData[count++] = RxBuf;  

  }    

 }

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
NTMD6N03R2G的技术参数