新手入门
- 积分
- 3
- 金钱
- 3
- 注册时间
- 2016-12-3
- 在线时间
- 21 小时
|
10金钱
我用串口3来读取传感器数据,然后用串口1输出数据至电脑查看数据。
程序如下:[mw_shl_code=c,true]void USART3_IRQHandler(void)
{
u8 Rec[9];
u8 i;
u8 temp,con,par;
if(USART_GetITStatus(USART3,USART_IT_RXNE))
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
for(i=0;i<9;i++)
{
Rec=USART_ReceiveData(USART3);
}
if(i>8) i=0;
USART_SendData(USART1,Rec[0]);
//if(i==0)
//{
// temp=~(Rec[1]+Rec[2]+Rec[3]+Rec[4]+Rec[5]+Rec[6]+Rec[7])+1;
// if(temp==Rec[8])
// {
// par=(Rec[3]*100+Rec[4])*5;//颗粒数
// con=(int)((Rec[3]*100+Rec[4])*1.014705);//浓度
//printf("颗粒数: %d 浓度: %d \n",par,con);
//printf("颗粒数%o\n",Rec[3]);
//USART_SendData(USART1,par);
//}
// printf("颗粒数: %d 浓度: %d \n",par,con);
//}
}
}[/mw_shl_code]
我只发送了Rec[0]的数据至串口。请问为什么串口显示的是FF 18 00 0B 02 00 01 00 DA 这样的全部数据呢?我应该怎样将它分开?
|
最佳答案
查看完整内容[请看2#楼]
写代码首先自己心里得有思路,不要期望自己还没弄明白流程的情况下,就把程序调出来。
是这样的,串口接收寄存器,每次只能接收一个字节,而且有“时效性”,就是在下一个字节数据到来之前可以保持,供程序去读取,然后下一个字节到来会被重新刷掉,所以每一个字节数据到来后,应该第一时间先把它缓存起来,常用做法是开辟一定大小的数组(根据实际需求)。
串口接收有一般有两种情况,对方发送频率较快(一般 ...
|