欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

stm32f103双串口收发(调试通过)附上完整代码和下载链接

程序员文章站 2022-06-08 19:39:33
...

文件下载地址:点击打开链接

实现功能

初始化三个串口,调用两个,一个串口发送一个串口接收

串口数据接收除接收数据外还需给出帧有效数据字节长度;

串口可使用USART1USART2USART3,串口参数能*设置;

实现不定长数据帧的串口收发

设计思路及流程:

将中断串口参数设置初始化,中断函数的处理写在USART.C 文件里面,再使用主函数文件进行调用。


1. 建立usart.c  usart.h 文件

3个串口的串口参数能*设置,结构体初始化

Usart1:

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

Usart2:

\stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

Usart3:

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

中断函数编写:


定义中断函数数组

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

串口一中断函数;

if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)//

接收中断,每接收一个字节(8位二进制数据),中断一次,每次中断(即每接收一个数据)都执行一次下列程序

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

串口二中断函数;

 

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

串口三中断函数;

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

字符串处理函数:

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

Usaert.h

设置最大接收字节数,使能串口

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

2.主函数实现:

Main.c

包含头文件,定义数组

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

定义变量,延时,串口初始化

 

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

While 循环内 设置数组长度length每次接收到一个字节的数据后usart1_in++

 

 stm32f103双串口收发(调试通过)附上完整代码和下载链接

2. 实际功能实现任意两个串口收发

 引脚设置:   PA9  USART1_TX

            PA10  USART1_RX

  

  发送串口修改选择箭头所示的串口名,可以修改为USART2,USART3


stm32f103双串口收发(调试通过)附上完整代码和下载链接


到目前为止这种方法编写的程序只能进入debug模式进行演示,还必须得分步调试,其它串口才能收到,如图所示

stm32f103双串口收发(调试通过)附上完整代码和下载链接


话不多说,直接上代码

串口二接收情况


stm32f103双串口收发(调试通过)附上完整代码和下载链接

stm32f103双串口收发(调试通过)附上完整代码和下载链接

 

串口三接收情况

stm32f103双串口收发(调试通过)附上完整代码和下载链接




完整代码

USART.C  

#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include <stdlib.h>
#if SYSTEM_SUPPORT_UCOS
#include "includes.h"					
#endif

#if 1
#pragma import(__use_no_semihosting)
                                     //±ê×¼¿âÐèÒªµÄÖ§³Öº¯Êý
struct __FILE
{
	int handle; 
};

FILE __stdout;
                                     //±ÜÃâʹÓðëÖ÷»úģʽ   

_sys_exit(int x)
{
	x = x;
}
                                     //Öض¨Òåfputcº¯Êý
int fputc1(int ch, FILE *f)
{
	while((USART1->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
    USART1->DR = (u8) ch;
	return ch;
}

int fputc2(int ch, FILE *f)
{
	while((USART2->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
    USART2->DR = (u8) ch;
	return ch;
}


int fputc3(int ch, FILE *f)
{
	while((USART3->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
    USART3->DR = (u8) ch;
	return ch;
}
#endif
 
#if EN_USARTx_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò

u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
//½ÓÊÕ״̬
//bit15£¬	½ÓÊÕÍê³É±êÖ¾
//bit14£¬	½ÓÊÕµ½0x0d
//bit13~0£¬	½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç

void usart1_init(u32 bound)
	{
    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;

		RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//ʹÄÜUSART1£¬GPIOAʱÖÓÒÔ¼°¸´Óù¦ÄÜʱÖÓ
		//USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//¸´ÓÃÍÆÍìÊä³ö
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
    GPIO_Init(GPIOA, &GPIO_InitStructure);

   //Usart1 NVIC ÅäÖÃ
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//ÇÀÕ¼ÓÅÏȼ¶1
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		   //×ÓÓÅÏȼ¶0
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			     //IRQͨµÀʹÄÜ
		NVIC_Init(&NVIC_InitStructure);	                         //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷


   //USART ³õʼ»¯ÉèÖÃ

		USART_InitStructure.USART_BaudRate = 115200;
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
		USART_InitStructure.USART_StopBits = USART_StopBits_2;//Ò»¸öֹͣλ
		USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//ÊÕ·¢Ä£Ê½

    USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú
//		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//ʹÄÜÖжÏ
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
    USART_Cmd(USART1, ENABLE);                    //ʹÄÜ´®¿Ú
}

void usart2_init(u32 bound)
	{
		//GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;

		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB2Periph_AFIO, ENABLE); //ʹÄÜUSART2£¬GPIOAʱÖÓÒÔ¼°¸´Óù¦ÄÜʱÖÓ
		
		//USART2_TX   PA.2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//¸´ÓÃÍÆÍìÊä³ö
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART2_RX	  PA.3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);//¸¡¿ÕÊäÈë

   //Usart2 NVIC ÅäÖÃ
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//ÇÀÕ¼ÓÅÏȼ¶1
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		   //×ÓÓÅÏȼ¶0
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			     //IRQͨµÀʹÄÜ
		NVIC_Init(&NVIC_InitStructure);	                         //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷

   //USART ³õʼ»¯ÉèÖÃ

		USART_InitStructure.USART_BaudRate =115200;
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
		USART_InitStructure.USART_StopBits = USART_StopBits_2;//Ò»¸öֹͣλ
		USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//ÊÕ·¢Ä£Ê½

    USART_Init(USART2, &USART_InitStructure); //³õʼ»¯´®¿Ú
//		USART_ITConfig(USART2, USART_IT_TXE, ENABLE);//ʹÄÜÖжÏ
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
    USART_Cmd(USART2, ENABLE);                    //ʹÄÜ´®¿Ú
}
	





void usart3_init(u32 bound)
	{
    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;

		RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//ʹÄÜUSART1£¬GPIOAʱÖÓÒÔ¼°¸´Óù¦ÄÜʱÖÓ
		//USART3 _TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//¸´ÓÃÍÆÍìÊä³ö
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
    GPIO_Init(GPIOA, &GPIO_InitStructure);

   //Usart3 NVIC ÅäÖÃ
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//ÇÀÕ¼ÓÅÏȼ¶1
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		   //×ÓÓÅÏȼ¶0
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			     //IRQͨµÀʹÄÜ
		NVIC_Init(&NVIC_InitStructure);	                         //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷


   //USART ³õʼ»¯ÉèÖÃ

		USART_InitStructure.USART_BaudRate = 115200;//Ò»°ãÉèÖÃΪ115200;
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
		USART_InitStructure.USART_StopBits = USART_StopBits_2;//Ò»¸öֹͣλ
		USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//ÊÕ·¢Ä£Ê½

    USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú
//		USART_ITConfig(USART3, USART_IT_TXE, ENABLE);//ʹÄÜÖжÏ
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
    USART_Cmd(USART3, ENABLE);                    //ʹÄÜ´®¿Ú
}
	






/* ***************************************ÖжϺ¯Êý ********************************************************/
#define TxBufferSize1 (countof(TxBuffer1)-1)
#define TxBufferSize2 (countof(TxBuffer2)-1)
#define TxBufferSize3 (countof(TxBuffer3)-1)

#define RxBufferSize1 (countof(TxBuffer1)-1)
#define RxBufferSize2 (countof(TxBuffer2)-1)
#define RxBufferSize3 (countof(TxBuffer3)-1)

#define countof(a) (sizeof(a)/sizeof(*(a)))      //±íʾÊý×éaÖеÄÔªËظöÊý

char TxBuffer1[27]="";
char TxBuffer2[27]="";
char TxBuffer3[27]="";
char RxBuffer1[RxBufferSize1];
char RxBuffer2[RxBufferSize2];
char RxBuffer3[RxBufferSize3];

__IO uint8_t TxCounter1 = 0;
__IO uint8_t TxCounter2 = 0;
__IO uint8_t TxCounter3 = 0;
__IO uint8_t RxCounter1 = 0;
__IO uint8_t RxCounter2 = 0;
__IO uint8_t RxCounter3 = 0;


uint8_t NbrOfDataToTransfer1 = TxBufferSize1;
uint8_t NbrOfDataToTransfer2 = TxBufferSize2;
uint8_t NbrOfDataToTransfer3 = TxBufferSize3;

uint8_t NbrOfDataToRead1 = RxBufferSize1;
uint8_t NbrOfDataToRead2 = RxBufferSize2;
uint8_t NbrOfDataToRead3 = RxBufferSize3;



/****************************************************************´®¿Ú1ÖжϷþÎñ³ÌÐò*/
void USART1_IRQHandler(void)
{
  unsigned int i;

/*½ÓÊÕÖжÏ*/
	
  if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
  {
    RxBuffer1[RxCounter1++] = USART_ReceiveData(USART1);
    
		if(RxCounter1 == NbrOfDataToRead1)  //½ÓÊÕÊý¾Ý´ïµ½ÐèÒª£¬Ôò½«Êý×鸴ÖƵ½·¢ËÍÊý×飬²¢ÖñêÖ¾
    {   
        for(i=0; i< RxCounter1; i++)
				TxBuffer1[i] = RxBuffer1[i];
        RxCounter1=0;
        TxCounter1=0;
        USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  //´ò¿ª·¢ËÍÖжÏ
    }
  }

/*USART1·¢ËÍÖжÏ*/
	
//  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
//  {
//    USART_SendData(USART1, TxBuffer1[TxCounter1++]);
//    if(TxCounter1 == NbrOfDataToTransfer1)//·¢ËÍÊý¾ÝÍê³É
//    {
//      USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //¹Ø±Õ·¢ËÍÖжÏ
//    }
//  }
}

/*************************************************************************************´®¿Ú2ÖжϷþÎñ³ÌÐò*/

void USART2_IRQHandler(void)
{
  unsigned int j;

/*½ÓÊÕÖжÏ*/

  if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
  {
    RxBuffer2[RxCounter2++] = USART_ReceiveData(USART2);
    
		if(RxCounter2 == NbrOfDataToRead2)  //½ÓÊÕÊý¾Ý´ïµ½ÐèÒª£¬Ôò½«Êý×鸴ÖƵ½·¢ËÍÊý×飬²¢ÖñêÖ¾
    {   
        for(j=0; j< RxCounter2; j++)
				TxBuffer2[j] = RxBuffer2[j];
        RxCounter2=0;
        TxCounter2=0;
        USART_ITConfig(USART2, USART_IT_TXE, ENABLE);  //´ò¿ª·¢ËÍÖжÏ
    }
  }

/*USART2·¢ËÍÖжÏ*/

//  if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
//  {
//    USART_SendData(USART2, TxBuffer2[TxCounter2++]);
//    if(TxCounter2 == NbrOfDataToTransfer2)//·¢ËÍÊý¾ÝÍê³É
//    {
//      USART_ITConfig(USART2, USART_IT_TXE, DISABLE); //¹Ø±Õ·¢ËÍÖжÏ
//    }
//  }
}





/****************************************************************´®¿Ú3ÖжϷþÎñ³ÌÐò*/
void USART3_IRQHandler(void)
{
  unsigned int i;

/*½ÓÊÕÖжÏ*/
	
  if(USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
  {
    RxBuffer3[RxCounter1++] = USART_ReceiveData(USART1);
    
		if(RxCounter3 == NbrOfDataToRead1)  //½ÓÊÕÊý¾Ý´ïµ½ÐèÒª£¬Ôò½«Êý×鸴ÖƵ½·¢ËÍÊý×飬²¢ÖñêÖ¾
    {   
        for(i=0; i< RxCounter3; i++)
				TxBuffer3[i] = RxBuffer3[i];
        RxCounter3=0;
        TxCounter3=0;
        USART_ITConfig(USART3, USART_IT_TXE, ENABLE);  //´ò¿ª·¢ËÍÖжÏ
    }
  }

/*USART1·¢ËÍÖжÏ*/
//	
//  if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
//  {
//    USART_SendData(USART3, TxBuffer3[TxCounter3++]);
//    if(TxCounter3 == NbrOfDataToTransfer3)//·¢ËÍÊý¾ÝÍê³É
//    {
//      USART_ITConfig(USART3, USART_IT_TXE, DISABLE); //¹Ø±Õ·¢ËÍÖжÏ
//    }
//  }
}




///**********************************************************************/////

		char u0[]="";
		char u1[]="";
    char u2[]="";
		char u3[]="";
		char u4[]="";
		char u5[]="";
		char u6[]="";
		
		int num0=0;
		int num1=0;
		int num2=0;
		int num3=0;
		int num4=0;
		int num5=0;
		int num6=0;

void str_deal()     // ×Ö·û´®´¦Àíº¯Êý
{ 	
		strncpy(u0,RxBuffer1+6,2);
		num0=u0[0]+u0[1]*256;
		
		strncpy(u1,RxBuffer1+8,2);
		num1=u1[0]+u1[1]*256;
		num1=65536-num1;
	
		strncpy(u2,RxBuffer1+10,2);
		num2=u2[0]+u2[1]*256;
	  
		strncpy(u3,RxBuffer1+12,2);
		num3=u3[0]+u3[1]*256;
	  
		strncpy(u4,RxBuffer1+14,2);
		num4=u4[0]+u4[1]*256;
	  
		strncpy(u5,RxBuffer1+16,1);
		num5=u5[0];
	  
		strncpy(u6,RxBuffer1+17,1);
		num6=u6[0];	
}
#endif
USAER.h
#ifndef __USART_H
#define __USART_H
#include "stdio.h"	
#include "sys.h" 

#define USART_REC_LEN  			200  	//¶¨Òå×î´ó½ÓÊÕ×Ö½ÚÊý 200
#define EN_USARTx_RX 			1		//ʹÄÜ£¨1£©/½ûÖ¹£¨0£©´®¿Ú1½ÓÊÕ
	  	
extern u8  USART_RX_BUF[USART_REC_LEN]; //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.Ä©×Ö½ÚΪ»»Ðзû 
extern u16 USART_RX_STA;         		//½ÓÊÕ״̬±ê¼Ç	

extern int num0;
extern int num1;
extern int num2;
extern int num3;
extern int num4;
extern int num5;
extern int num6;
extern int num7;

void usart1_init(u32 bound);
void usart2_init(u32 bound);
void usart3_init(u32 bound);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
void str_deal();
#endif

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include <stdlib.h>

uint8_t TxBuffer[]={0x0f,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x00};
uint8_t length=sizeof(TxBuffer)/sizeof(TxBuffer[0]);

 int main(void)
  {	
		u8 a,flag=1;
		u8 i=0x00;
		u8 j=0x00;
	  u8 k=0x00;
		u8 l=0x00;
		
		extern int num0;
		extern int num1;
		extern int num2;
		extern int num3;
		extern int num4;
		extern int num5;
		extern int num6;
		extern int num7;
		
		delay_init();	    	        //ÑÓʱº¯Êý³õʼ»¯
		usart1_init(115200);        //´®¿Ú1³õʼ»¯Îª115200
		usart2_init(115200);
		
		NVIC_Configuration(); 	    //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
		
		while(1)
	{
		
	  // str_deal();
		if(flag==1)
		{
			for(i=0;i<length;i++)
			{
			USART_SendData(USART1, TxBuffer[i]);//´®¿ÚÒ»·¢ËÍ
			//delay_ms(20);
			}
			flag=0;
		}
		
		
		}
	
}


话不多说,直接上代码
相关标签: stm32f103