IJK 发表于 2013-3-21 11:50 
115200这个波特率其实对STM32F103来说不快,不可能收不下来。
用环形缓冲也是个好办法。如果担心,可以把bu ...
恩,我也听别人说过,是这个样子的。可是我今天这个测试还是失败了,估计是程序上的问题,求懂的帮我看看这个环形缓冲有没有问题。BUFFERSIZE 开始设置的5,后来设置的25, 测试时是1ms间隔循环发送20个字节。现在准备把buffer改成128试试
static u8 ReceiveBuffer[BUFFERSIZE];
static u8 WrBuf=0;
static u8 ReBuf=0;
void USART1_IRQHandler(void)
{
uint8_t ReceiveDate; //定义一个变量存放接收的数据
if(!(USART_GetITStatus(USART1,USART_IT_RXNE))); //读取接收中断标志位USART_IT_RXNE
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清楚中断标志位
WriteBuffer();
}
}
void WriteBuffer( void)
{
if (WrBuf==ReBuf-1)
{
return;
}
ReceiveBuffer[WrBuf++]=USART_ReceiveData(USART1);
WrBuf=WrBuf%BUFFERSIZE;
}
u8 ReadBuffer(u8 *data)
{
if(ReBuf==WrBuf)
{
return 0;
}
*data=ReceiveBuffer[ReBuf];
ReBuf++;
ReBuf=ReBuf%BUFFERSIZE;
return 1;
}
int main(void)
{
u8 data=0;
SystemInit(); //系统时钟配置
Init_NVIC(); //中断向量表注册函数
Init_LED(); //各个外设引脚配置
Init_Usart(); //串口引脚配置
Usart_Configuration(115200); //串口配置 设置波特率为115200
while(1)
{
if (ReadBuffer(&data))
{
USART1_Send_Byte(data);
}
}
}
|