OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4605|回复: 3

关于两块stm32串口通讯问题

[复制链接]

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2018-6-6
在线时间
126 小时
发表于 2018-6-12 15:09:56 | 显示全部楼层 |阅读模式
2金钱
发送:

                                if(KEY4==0)
                                {
                                                delay_ms(50);
                                                if(KEY4==0)
                                                {
                                               
                                                        //充气
                                                        print2("OPEN_S1\r\n",11);LED1(0); printf("正在充气 T1:%d\r\n",T1);
                                                        delay_ms(20);
                                                        print2("OPEN_S2\r\n",11);LED2(0);
                                                        DAC_OUT(0,1.0);
                                                        DAC_OUT(1,1.0);
                                                        delay_s(T1);
                                                       
                                                       
                                                        //平衡1
                                                        print2("CLOSE_S1\r\n",12);LED1(1);printf("平衡1 T2:%d\r\n",T2);
                                                        DAC_OUT(0,0);
                                                        DAC_OUT(1,0);
                                                        delay_s(T2);
                                                       
                                                       
                                                        //平衡2
                                                        print2("OPEN_S4\r\n",11);LED4(0);printf("平衡2 T3:%d\r\n",T3);
                                                        delay_s(T3);
                                                       
                                                       
                                                        //检测
                                                        print2("GET_AD\r\n",10);printf("开始检测 T4:%d\r\n",T4);
                                                        if(USART2_RX_STA&0x8000)   //包头
                                                        {       
                                                                USART2_RX_STA=0;
                                                                if(USART2_RX_BUF[0]==0x00|USART2_RX_BUF[1]==0xaa)
                                                                {
                                                                                voltage_1=USART2_RX_BUF[3]*256+USART2_RX_BUF[4];   //得到AD_CH1的电压
                                                                                voltage_2=USART2_RX_BUF[5]*256+USART2_RX_BUF[6];   //得到AD_CH2的电压
                                                                                printf("差压传感器电压为%d V",voltage_1);
                                                                                printf("直压传感器电压为%d V",voltage_2);
                                                                }       
                                                        }
                                                        delay_s(T4);
                                                       
                                                        print2("GET_AD\r\n",10);printf("检测结束\r\n");
                                                        if(USART2_RX_STA&0x8000)   //包头
                                                        {       
                                                                USART2_RX_STA=0;
                                                                if(USART2_RX_BUF[0]==0x00|USART2_RX_BUF[1]==0xaa)
                                                                {
                                                                                voltage_1_now=USART2_RX_BUF[3]*256+USART2_RX_BUF[4];   //得到AD_CH1的电压
                                                                                voltage_2_now=USART2_RX_BUF[5]*256+USART2_RX_BUF[6];   //得到AD_CH2的电压
                                                                                printf("差压传感器电压为%d V",voltage_1);
                                                                                printf("直压传感器电压为%d V",voltage_2);
                                                                }       
                                                        //获得电压   进行计算
                                                        //泄压率 L=|C1-C2|/T4 输出L
                                                                L=(voltage_1_now-voltage_1)/T4;
                                                                printf("%f",L);
                                                        }       
                                                        //排气
                                                        print2("CLOSE_S2\r\n",12);LED2(1);printf("排气 T5:%d\r\n",T5);
                                                        delay_ms(10);
                                                        print2("CLOSE_S4\r\n",12);LED4(1);
                                                        delay_s(T5);
                                                        printf("测试完成\r\n");
                                                       
                                                }                                                       
                                }


接收

if(USART2_RX_STA&0x8000)
                {                                          
                                USART2_RX_STA=0;
                                if(strstr((const char*)USART2_RX_BUF,"OPEN_S1"))
                                {
                                                L9348_1_IN1=1;                         //打开通道1
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"CLOSE_S1"))
                                {
                                                L9348_1_IN1=0;                         //关闭通道1
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                               
                                else if(strstr((const char*)USART2_RX_BUF,"OPEN_S2"))
                                {
                                                L9348_1_IN2=1;                         //打开通道2
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"CLOSE_S2"))
                                {
                                                L9348_1_IN2=0;                         //关闭通道2
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                               
                                else if(strstr((const char*)USART2_RX_BUF,"OPEN_S3"))
                                {
                                                L9348_1_IN3=1;                         //打开通道3
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"CLOSE_S3"))
                                {
                                                L9348_1_IN3=0;                         //关闭通道3
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                               
                                else if(strstr((const char*)USART2_RX_BUF,"OPEN_S4"))
                                {
                                                L9348_1_IN4=1;                         //打开通道4
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"CLOSE_S4"))
                                {
                                                L9348_1_IN4=0;                         //关闭通道4
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                               
                                else if(strstr((const char*)USART2_RX_BUF,"OPEN_ALL_VALVE"))
                                {
                                                L9348_1_IN1=1;L9348_1_IN2=1;L9348_1_IN3=1;L9348_1_IN4=1;                         //打开所有通道
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"CLOSE_ALL_VALVE"))
                                {
                                                L9348_1_IN1=0;L9348_1_IN2=0;L9348_1_IN3=0;L9348_1_IN4=0;                         //关闭所有通道
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"RESET"))
                                {
                                                L9348_1_IN1=0;L9348_1_IN2=0;L9348_1_IN3=0;L9348_1_IN4=0;                         //关闭所有通道
                                                Usart_SendString(USART2,"OPERATE_OK!\r\n");
                                }
                                else if(strstr((const char*)USART2_RX_BUF,"GET_AD"))
                                {
                                                UartASendStr (send_data, 13);
                                                printf("\r\n");
                                }
                                else Usart_SendString(USART2,"error!\r\n");
                               
                }


用串口调试助手查看,数据已全部发送出去。
print2()为发送给从机
但是接收端,始终只执行第一条print2()指令。

接收的数组需要没接收一次清除吗?

最佳答案

查看完整内容[请看2#楼]

每块板子都调好了,不过已经找到问题了。参考原子哥的例程,加入了结束符就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2018-6-12 15:09:57 | 显示全部楼层
xuande 发表于 2018-6-12 17:02
仿真器,配合串口助手,先把每块板子单独调试成功。

每块板子都调好了,不过已经找到问题了。参考原子哥的例程,加入了结束符就好了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2018-6-12 17:02:39 | 显示全部楼层

仿真器,配合串口助手,先把每块板子单独调试成功。

回复

使用道具 举报

11

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
353
金钱
353
注册时间
2019-4-22
在线时间
83 小时
发表于 2019-9-24 16:38:54 | 显示全部楼层
有例程可以参考吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表