文档介绍:STM32f103寄存器配置串口通信主程序接收数据,上位机串口发送的数据已回车键结束,单片机接之后将所有数据发回。#include""#include""//#include""unsignedcharres; //串口接受数据临时存储unsignedcharenddd=0; //接受完成标志unsignedintlen=0; //数据长度unsignedcharshubiao[200]; //数据存储表,限制长度为200字节unsignedintt; //通信数据操作for循环控制unsignedlongi=0;intmain(){ Stm32_Clock_Init();//系统时钟设置// io_init(); //io时钟以及输入输出选项设置 RCC->APB2ENR|=0x4000; //开启USART1时钟; RCC->APB2ENR|=0x0004; //开启GPIOA口时钟; GPIOA->CRH&=0xfffff00f; //PA9、PA10IO设置清零 GPIOA->CRH|=0x000008b0; //P9推挽输出,max50MHZ;P10上拉输入 RCC->APB2RSTR|=0x4000; //串口复位 RCC->APB2RSTR&=0xbfff; //串口停止复位// USART1->BRR=0x1d4c; //主频72M时,波特率为9600 USART1->BRR=0x0ea6; //主频36M时,波特率为9600// USART1->BRR=0x0139; //主频36M时,波特率为115200// USART1->CR1|=0x200c; //串口开,发送长度8字节,无校验,发送开,接收开; USART1->CR1|=0x340c; //串口开,发送长度9字节,偶校验,发送开,接收开; //(有效数据还是8位长度)while(1){// shuru_init(); //计算输入口的值 if(0x0020==((USART1->SR)&0x0020)) //如果接受到了一个字节的数据{res=USART1->DR; //读取串口寄存器数据并存在临时位置res if(res!=0x0a){shubiao[len]=res;len++;}//如果该数据不是回车符的最后一个//字节0x0a,则存入数表 else{if(shubiao[len-1]==0x0d){enddd=1;len--;};}; }; //如果是0x0a,则判断前一个字符是不是0x0d,(回车符ASCII码为0x0a0d) //是的话则标记接受完成标志eddd并删掉已接受到的前一个字节的数据 if(enddd==1) //如果接受完成了{for(t=0;t<len;t++) //依次发送数表中的数据{USART1->DR=shubiao[t];// while((USART1->SR&0X40)==0);//等待当前字节数据发送结束}; enddd=0; for(t=0;t<=len;t++){shubiao[t]=0;}; //将数表中数据清零 len=0; }; i++;// if(i==20000){PC151;}; //程序运行状态指示灯// if(i==40000){PC150;i=