赞
踩
void ShockWaveHandle_USART2Init(void) { GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; // RCC_APB1PeriphClockCmd: usart2 is hanging under APB1, only usart1 is hanging under APB2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // TX3 - PB10 - ch1 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // RX3 - PB11 - ch1 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOA, &GPIO_InitStruct); USART2_Configuration(); NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = PreemptionPriority_0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = SubPriority_1; NVIC_Init(&NVIC_InitStruct); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); USART_Cmd(USART2, ENABLE); }
void USART2_IRQHandler(void)
{
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
uint8_t data;
data = USART_ReceiveData(USART2);
ch1_msg_rx(USART2, data);
}
}
void ch1_msg_rx(USART_TypeDef *USARTx, uint8_t receiveData) { UartMsgRecvHandler(USARTx, &ch1_msg[ch1_re], &ch1_re, receiveData); } void UartMsgRecvHandler(USART_TypeDef *USARTx, TUartMsg *ptUartMsg, uint16_t *rev, BYTE ucRecvDate) { if (FALSE == (ptUartMsg->ucRecvSta & RECV_FLG_HEAD1)) // Not receive first data (0x55) { ptUartMsg->ucRecvSta = 0; // set flag if (DATA_HEAD_1 == ucRecvDate) // receive first data (0x55) { ptUartMsg->aucBuf[0] = DATA_HEAD_1; ptUartMsg->ucRecvSta |= RECV_FLG_HEAD1; } } else // 1. receive first data (0x55) { if (FALSE == (ptUartMsg->ucRecvSta & RECV_FLG_HEAD2)) // Not receive second data (0xAA) { if (DATA_HEAD_2 == ucRecvDate) // receive second data (0xAA) { ptUartMsg->aucBuf[1] = DATA_HEAD_2; ptUartMsg->ucRecvSta |= RECV_FLG_HEAD2; } else { ptUartMsg->ucRecvSta = 0; } } else // 2. receive second data (0xAA) { if (FALSE == (ptUartMsg->ucRecvSta & RECV_FLG_LEN)) // not receive third data (cmdLen) { if ((UART_LEN >= ucRecvDate) && (2 <= ucRecvDate)) // receive third data (cmdLen) { ptUartMsg->aucBuf[2] = ucRecvDate; ptUartMsg->ucRecvSta |= RECV_FLG_LEN; ptUartMsg->ucRecvCount = ucRecvDate + 5; ptUartMsg->ucRecvIndex = 3; } else { ptUartMsg->ucRecvSta = 0; } } else // 3. receive third data (cmdLen) { ptUartMsg->aucBuf[ptUartMsg->ucRecvIndex] = ucRecvDate; // 4. receive cmd data (payload) ptUartMsg->ucRecvIndex++; if ((ptUartMsg->ucRecvIndex >= ptUartMsg->ucRecvCount)) // 5. receive complete { ptUartMsg->bFlagRecv = TRUE; ptUartMsg->ucRecvSta = 0; ptUartMsg->USARTx = USARTx; *rev += 1; if (*rev >= UART_MSG_LEN) { *rev = 0; } } else { ptUartMsg->bFlagRecv = FALSE; } } } } }
static void ch1_PackageAnalyze(void) { cmd_TypeDef msg; BYTE value; taskENTER_CRITICAL(); msg.cmd_main = ch1_msg[ch1_prc].aucBuf[CMD1_ADDH]; msg.cmd_main <<= 8; msg.cmd_main |= ch1_msg[ch1_prc].aucBuf[CMD1_ADDL]; // get main cmd msg.cmd_type = ch1_msg[ch1_prc].aucBuf[CMDTYPE_ADD]; // cmd type high msg.cmd_target = ch1_msg[ch1_prc].aucBuf[CMD2_ADD]; value = ch1_msg[ch1_prc].aucBuf[CMD3_VALUE_INDEX]; taskEXIT_CRITICAL(); // receive data format: [head1, head2, msg_len1, msg_len2, cmd_main1, cmd_main2, cmd_type, cmd_target, value, crc1, crc2] switch (msg.cmd_main) { case CMD_31: // 0x06, 0x31 { switch (msg.cmd_type) { case CMD_TYPE_SET: // 0x02 { ShockWaveHandle_PowerCtrlAndSetParameterAndWorkingCtrl(CH1_UART, msg.cmd_target, value); } break; case CMD_TYPE_ACK: { // TODO } break; default: { // TODO } break; } } break; case CMD_32: // 0x06, 0x32, recevi handle shake packet or heart beat first packet { ShockWaveHandle_HandShakeAndHeartBeatPacketHandle(CH1_UART, msg.cmd_type, msg.cmd_target); } break; case CMD_33: // 0x06, 0x33, receive heart beat seconde packet { // TODO } break; default: { // TODO } break; } UartMsgRecvFlagClr(&ch1_msg[uart_msg_prc]); } void UartMsgRecvFlagClr(TUartMsg *ptUartMsg) { if(NULL == ptUartMsg) { return; } ptUartMsg->bFlagRecv = FALSE; ptUartMsg->ucRecvSta = 0; ptUartMsg->ucRecvCount = 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。