問題遇到的現(xiàn)象和發(fā)生背景
stm32f030串口接收到八個(gè)字節(jié)數(shù)組,我想提取這個(gè)數(shù)組的第4位和第5位來進(jìn)行運(yùn)算后轉(zhuǎn)為十進(jìn)制數(shù),但是提取數(shù)據(jù)的時(shí)候出問題了,本人剛?cè)腴T,求指點(diǎn)
問題相關(guān)代碼,請(qǐng)勿粘貼截圖
下面是我中斷的代碼:
char RxCounter2=0,RxBuffer2[100]; int DF1; //傳感器第4位數(shù)據(jù) int DF2; //傳感器第5位數(shù)據(jù) int DF; void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { RxBuffer2[RxCounter2++] = USART_ReceiveData(USART2); DF1 = RxBuffer2[3]; DF2 = RxBuffer2[4]; DF = (DF1*256 + DF2) / (100); // USART_SendData(USART1,USART_ReceiveData(USART2)); //輸出第一行,這是我傳感器發(fā)送的數(shù)據(jù)格式,是8個(gè)字節(jié),十六進(jìn)制數(shù) // USART_SendData(USART1,RxBuffer2[0]); //輸出第二行,我想要的是提起第一位,一個(gè)字節(jié),但是又顯示的是一個(gè)8個(gè)字節(jié)的數(shù)組 // USART_SendData(USART1,RxBuffer2[1]); //輸出第三行,這個(gè)是從第二位還是寫入,第一位是0,但是還是數(shù)組 USART_SendData(USART1,RxBuffer2[2]); //輸出第四行,同上,類推 } while (USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET); }
運(yùn)行結(jié)果及報(bào)錯(cuò)內(nèi)容
-
[2021-12-03 11:00:58.945]
-
RX:16 05 01 00 00 00 AC 38 // USART_SendData(USART1,USART_ReceiveData(USART2))輸出結(jié)果
-
-
[2021-12-03 11:01:33.039]
-
RX:16 16 16 16 16 16 16 16 // USART_SendData(USART1,RxBuffer2[0])輸出結(jié)果
-
-
[2021-12-03 11:01:51.041]
-
RX:00 05 05 05 05 05 05 05 // USART_SendData(USART1,RxBuffer2[1])輸出結(jié)果
-
-
[2021-12-03 11:02:10.052]
-
RX:00 00 01 01 01 01 01 01 // USART_SendData(USART1,RxBuffer2[2])輸出結(jié)果
我的解答思路和嘗試過的方法
我將 RxBuffer2 定義為全局變量以后,在main.c里面執(zhí)行
USART_SendData(USART1,RxBuffer2[1]);
后輸出變成一個(gè)字節(jié)了,但是讀取不出 RxBuffer2 內(nèi)的數(shù),輸出都是0
-
[2021-12-03 12:03:11.052]
-
我想要達(dá)到的結(jié)果
執(zhí)行
USART_SendData(USART1,RxBuffer2[0]);
后可以得到
RX: 16
執(zhí)行
USART_SendData(USART1,RxBuffer2[1]);
后可以得到
RX: 05
|