首先要先通过数据发送口发送获取码:
u8 ask_buf[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};
for(i=0;i<8;i++)
{
USART_SendData(USART3,ask_buf[i]);
while( USART_GetFlagStatus(USART3,USART_FLAG_TC) != SET);
}
由于是S485通信,半双工,且有限制该传感器需要100ms才能返回数据,所以激活后的100ms内不能再次发送查询码
delay_ms(100);
然后读取噪声数据:
u16 rdata;
u8 i=0;
u8 rbuf[7];
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
rbuf[i] =USART_ReceiveData(USART3);
if(i == 4)
{
rdata = rbuf[3]<<8|rbuf[4];
}
i++;
if(i == 7)i = 0;
}
float noise_Data(void)
{
float clo = 0;
clo = rdata/256*256;
rdata = rdata%256;
clo = clo+(rdata/16*16)+(rdata%16);
clo = clo/10.0;
return clo;
}