各位前輩好,我目前是使用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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>