高级会员

- 积分
- 727
- 金钱
- 727
- 注册时间
- 2016-5-27
- 在线时间
- 91 小时
|
发表于 2019-5-8 11:57:03
|
显示全部楼层
给你个我的程序参考下,当然数据处理部分和串口初始化部分还得自己写下,我只写了一个口的另一个一样的。
#define USART_REC_LEN 1024 // 1K Buffer 如果数据量大的话可以多点但是不能大于64K(估计CPU的RAM也没那么大)
u16 USART1_In,USART1_Out;
u8 USART1_RX_BUF[USART_REC_LEN];
//调用函数 (这个函数得在WHILE中不断的查询缓存)
....
if(USART1_Out!=USART1_In)
{
USART_SendData(USART1, GetData());
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
//也可以这样
//while((USART1->SR&0X40)==0);
//USART1->DR = GetData();
}
....
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART1_RX_BUF[USART1_In++] = USART_ReceiveData(USART1);
if(USART1_In>=USART_REC_LEN) USART1_In=0;
}
}
u8 GetData(void)
{
u8 data;
data=USART1_RX_BUF[USART1_Out++];
if(USART1_Out>=USART_REC_LEN) USART1_Out=0;
return data;
}
另外我这个发送不是中断方式,所有初始化串口时不要开发送中断,
还得注意入口和出口的速率,就像一个池子,如果入水管大于出水管,不停的入水那么谁就会漫出来一样。 |
|