STM32
直播中

李丽

8年用户 1507经验值
私信 关注
[问答]

stm32f030串口接收到数组如何处理?

STM32f030串口接收到八个字节数组,我想提取这个数组的第4位和第5位来进行运算后转为十进制数,但是提取数据的时候出问题了,本人刚入门小白,求大佬指点
下面是我中断的代码:
char RxCounter2=0,RxBuffer2[100];int DF1;  //传感器第4位数据int DF2;  //传感器第5位数据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));   //输出第一行,这是我传感器发送的数据格式,是8个字节,十六进制数//                USART_SendData(USART1,RxBuffer2[0]);     //输出第二行,我想要的是提起第一位,一个字节,但是又显示的是一个8个字节的数组//                USART_SendData(USART1,RxBuffer2[1]);     //输出第三行,这个是从第二位还是写入,第一位是0,但是还是数组                USART_SendData(USART1,RxBuffer2[2]);       //输出第四行,同上,类推                             }          while (USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);                     }运行结果如下:
[2021-12-03 11:00:58.945]RX:16 05 01 00 00 00 AC 38         // USART_SendData(USART1,USART_ReceiveData(USART2))输出结果[2021-12-03 11:01:33.039]RX:16 16 16 16 16 16 16 16         // USART_SendData(USART1,RxBuffer2[0])输出结果[2021-12-03 11:01:51.041]RX:00 05 05 05 05 05 05 05         // USART_SendData(USART1,RxBuffer2[1])输出结果[2021-12-03 11:02:10.052]RX:00 00 01 01 01 01 01 01         // USART_SendData(USART1,RxBuffer2[2])输出结果我尝试过的方法:
我将RxBuffer2定义为全局变量以后,在main.c里面执行
USART_SendData(USART1,RxBuffer2[1]);后输出变成一个字节了,但是读取不出RxBuffer2内的数,输出都是0
[2021-12-03 12:03:11.052]RX:00我想要的结果是:
执行
USART_SendData(USART1,RxBuffer2[0]);得到
RX: 16执行
USART_SendData(USART1,RxBuffer2[1]);得到
RX: 05以此类推,请大佬帮忙解答,十分感谢

回帖(2)

杨剑东

2024-3-29 16:51:22
楼主看一下USART_SendData这个函数内容。可能是这个里面的问题。
举报

徐睫郁

2024-3-29 16:51:29
建议你先保证把8个原始数据的正确接收,然后再做提取的事情。如非必要,不建议在中断里做这些数据处理的事情。可以在中断里设置个标志,外部再做数据处理。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分