請教STM32F429 USART 接收值問題

2019-07-21 00:50发布

各位前輩好,我目前是使用STM32F429的開發版,進行UASART的傳送與接收值,而在開發的過程中遇到了使用USART接收值的問題,如下詳述:
下是我目前使用的USART接收值的程式:
程式主要執行當ble_rx_buff收到SEND_START XXXX就將XXXX的值使用printf回傳顯示收到的數值,
而我目前發生的情形是我從電腦發送SEND_START 0000 則STM32F429 開發板會回傳0000,然後在下一次從電腦發送SEND_START 0001 則STM32F429 開發板會回傳0000,
要再從電腦發送一次SEND_START 0001 之後STM32F429 開發板才會回傳0001,因此我想請教為什麼需要發送兩次回傳值才會正確?
感謝各位前輩的幫忙!!
[mw_shl_code=c,true]void USART1_IRQHandler(void){ int i = 0; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ ble_rx_buff[ble_rx_index] = USART_ReceiveData(USART1); if(ble_rx_index >= 14 && ble_rx_buff[ble_rx_index - 14] == 'S' && ble_rx_buff[ble_rx_index - 13] == 'E' && ble_rx_buff[ble_rx_index - 12] == 'N' && ble_rx_buff[ble_rx_index - 11] == 'D' && ble_rx_buff[ble_rx_index - 10] == '_' && ble_rx_buff[ble_rx_index - 9] == 'S' && ble_rx_buff[ble_rx_index - 8] == 'T' && ble_rx_buff[ble_rx_index - 7] == 'A' && ble_rx_buff[ble_rx_index - 6] == 'R' && ble_rx_buff[ble_rx_index - 5] == 'T' && ble_rx_buff[ble_rx_index - 4] == ' ' ) { Thousands = hex_to_dec(ble_rx_buff[ble_rx_index - 3])<<12; Hundreds = hex_to_dec(ble_rx_buff[ble_rx_index - 2])<<8; Tens = hex_to_dec(ble_rx_buff[ble_rx_index - 1])<<4; Ones = hex_to_dec(ble_rx_buff[ble_rx_index - 0]); Total = Thousands + Hundreds + Tens + Ones; printf("%04X",(unsigned short)(Total)); new_command = 3; ble_rx_index = 0; } ble_rx_index++; ble_rx_index = ble_rx_index & 0x7F; } } [/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。