你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
念念心心 提问时间:2021-12-4 12:45 / 未解决

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

以此类推,请大佬帮忙解答,十分感谢

收藏 评论5 发布时间:2021-12-4 12:45

举报

5个回答
废鱼 回答时间:2021-12-6 08:55:40

楼主看一下USART_SendData这个函数内容。可能是这个里面的问题。

老牛洋车 回答时间:2021-12-6 09:09:11

建议您将接收和处理的代码分开,不要在接收的过程中就处理,这样有可能会影响到正常接收,要等接收完成之后再来处理。

xmshao 回答时间:2021-12-6 10:06:07
建议你先保证把8个原始数据的正确接收,然后再做提取的事情。如非必要,不建议在中断里做这些数据处理的事情。可以在中断里设置个标志,外部再做数据处理。
butterflyspring 回答时间:2021-12-6 11:18:47
如同楼上说的,发送接收中断的逻辑比较乱,与官方或者大众的顺序不同。 在接收到数据的中断里去发送数据,并没有判读发送的状态,而且还在这个接收中断服务程序中来等发送寄存器为空的状态。
建议参考官方或经典的串口通讯程序逻辑,发送是发送的逻辑,接收是接收的逻辑,然后再外面处理相关数据,不要混合在其中一个中断里。
伊森亨特 回答时间:2021-12-28 14:16:09

butterflyspring 发表于 2021-12-6 11:18
如同楼上说的,发送接收中断的逻辑比较乱,与官方或者大众的顺序不同。 在接收到数据的中断里去发送数据, ...

官方的例程在哪看啊,谢谢。953098591

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版