PC端口串口接收的GP2Y1051的数据:

换成stm32接收到的数据,调试的时候发现第一位不是48,就是00,有时候是AA。
[mw_shl_code=c,true]void USART2_IRQHandler(void)
{
u8 rx_data;
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) {
rx_data = USART_ReceiveData(USART2)&0xFF; /* 从接收数据寄存器读取一个字节 */
/*第一个数值*/
switch(uchGP2YRxState)
{
case GP2Y_RX_STATE_START:
if(rx_data == 0xaa) {
uaGP2Y[uchindex++]=rx_data;
uchGP2YRxState = GP2Y_RX_STATE_VOUTH;
}
else {
uchGP2YRxState = GP2Y_RX_STATE_START;
uchindex = 0;
}
break;
/*存放第二个数值*/
case GP2Y_RX_STATE_VOUTH:
uaGP2Y[uchindex++]=rx_data;
uchGP2YRxState = GP2Y_RX_STATE_VOUTL;
uchCheckSum+=rx_data;//校验和第1次加
break;
/*存放第三个数值*/
case GP2Y_RX_STATE_VOUTL:
uaGP2Y[uchindex++]=rx_data;
uchGP2YRxState = GP2Y_RX_STATE_VREFH;
uchCheckSum+=rx_data;//校验和第2次加
break;
/*第四个数值*/
case GP2Y_RX_STATE_VREFH:
uaGP2Y[uchindex++]=rx_data;
uchGP2YRxState = GP2Y_RX_STATE_VREFL;
uchCheckSum+=rx_data;//校验和第3次加
break;
/*第五个数值*/
case GP2Y_RX_STATE_VREFL:
uaGP2Y[uchindex++]=rx_data;
uchGP2YRxState = GP2Y_RX_STATE_CHKSUM;
uchCheckSum+=rx_data;//校验和第4次加
break;
/*第六个数值,进行校验和*/
case GP2Y_RX_STATE_CHKSUM:
if(rx_data == uchCheckSum) {
uchCheckSum = 0;
uchGP2YRxState = GP2Y_RX_STATE_START;
uchindex = 0;
GP2Ydata_temp[0] = uaGP2Y[1];
GP2Ydata_temp[1] = uaGP2Y[2];
GP2YGatherOver = 1;
}
else {
uchGP2YRxState = GP2Y_RX_STATE_START;
uchindex = 0;
}
break;
}
USART_ClearITPendingBit(USART2, USART_IT_RXNE); /* 清除uart2接收中断 */
}//if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)[/mw_shl_code]
[mw_shl_code=c,true]串口的配置:
if(uchUartPort == UART_2) {
USART_DeInit(USART2); /* Release reset */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); /* and enable clock */
/* GPIO Init,Assign PA2 to UART1 (Tx);Assign PA3 to UART1 (Rx) */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); /* Enable GPIO clock */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_Init(USART2,&UART_InitStructure); /* Init UART1 */
USART_ClearFlag(USART2, USART_FLAG_CTS | USART_FLAG_LBD | USART_FLAG_TXE |
USART_FLAG_TC | USART_FLAG_RXNE | USART_FLAG_IDLE |
USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE |
USART_FLAG_PE);
/* Enable UART2 interrupts */
USART_ITConfig(USART2,USART_IT_PE ,DISABLE); /* 校验错误 */
USART_ITConfig(USART2,USART_IT_TC ,DISABLE); /* 发送完成 */
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); /* 读数据寄存器非空 */
USART_ITConfig(USART2,USART_IT_TXE, DISABLE); /* 发送数据寄存器空 */
USART_ITConfig(USART2,USART_IT_IDLE,DISABLE); /* 总线空闲检测 */
USART_ITConfig(USART2,USART_IT_LBD ,DISABLE); /* lin断开检测 */
USART_ITConfig(USART2,USART_IT_CTS ,DISABLE); /* 允许发送 */
USART_ITConfig(USART2,USART_IT_ERR ,DISABLE); /* 噪声,多缓冲通信中的溢出错误和帧错误 */
USART_Cmd(USART2, ENABLE); /* Enable the UART1 */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]
|