求助,485传感器的测试问题!

2019-08-09 17:16发布

如题,用原子战舰的485通信例程改的代码无法测试传感器,不知道测试485设备的时候代码上应该注意什么?
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "rs485.h"       
void sendconfig_buff(void);
u8 modbusbuff[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};

u32 buff3[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
// rs485buf
int main(void)
{         
        u8 key;

        u8 i=0,t=0,j=0;
        u8 cnt=0;
        u8 len=7;
        u8 rs485buf[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
         
        delay_init();                   
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(9600);         
        LED_Init();                                 
        LCD_Init();                          
        KEY_Init();                                 
        RS485_Init(9600);       
        POINT_COLOR=RED;//éèÖÃ×ÖìåÎaoìé«
        LCD_ShowString(30,130,200,16,16,"KEY0:Send");       

        POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«          
        LCD_ShowString(30,150,200,16,16,"Count:");                       
        LCD_ShowString(30,170,200,16,16,"Send Data:");               
        LCD_ShowString(30,210,200,16,16,"Receive Data:");
        delay_ms(200);                                                                  
        while(1)
        {       
                key=KEY_Scan(0);
                if(key==KEY0_PRES)
                {
                        LED0=!LED0;
                        sendconfig_buff();                       
                         for(j=0;j<8;j++)
                        {   
                             LCD_ShowxNum(20*j+50,300,(modbusbuff[j]),15,16,1);                                         
                         }
                                                         
                  delay_ms(50);
      RS485_Receive_Data(rs485buf,len);   
                       
      for(j=0;j<8;j++)
         {   
//          buff3[j]=rs485buf[j]-'0';
                buff3[j]=rs485buf[j];  
         //  LCD_ShowxNum(30*j+100,100,buff3[j],8,16,1);
                 LCD_ShowxNum(150,20*j+100,(buff3[j]),10,16,1);                                         
         }
                }
        else
                                {}
        }
}
void sendconfig_buff(void)
{
           RS485_Send_Data(modbusbuff,8);
}         

求助吧友,这个传感器24V供电,接线都没问题,在电脑上用串口助手调试是有正确读数返回的,但是用单片机和模块相连就不行了;之前看到吧友说  RS485_Receive_Data(u8 *buf,u8 *len)的参数中要把len去掉,直接用变量,两种方法我都试了 还是没效果。谁能帮帮忙?感激不尽!                           



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
有你就足够
1楼-- · 2019-08-09 18:42
波特率  校验  停止位 要对应,最好抓下总线的数据  看看传感器有没有应答你,我有写过寄存器版本的代码  要吗 ?
Jevin乐动
2楼-- · 2019-08-09 23:26
485发送数据和接受数据的时候需要转换电平,转换完之后,延时几百us再接受或者发送数据
allaqppq
3楼-- · 2019-08-10 01:37
有你就足够 发表于 2017-10-27 15:49
波特率  校验  停止位 要对应,最好抓下总线的数据  看看传感器有没有应答你,我有写过寄存器版本的代码   ...

当然要啊 ,太谢谢了!   我加你qq还是?
allaqppq
4楼-- · 2019-08-10 05:16
 精彩回答 2  元偷偷看……
Jevin乐动
5楼-- · 2019-08-10 07:19
要改变485的接受和发送状态的时候,改变一下电平,然后延时一下就可以了。接受字节用if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET)判断一下就可以
allaqppq
6楼-- · 2019-08-10 09:44
有你就足够 发表于 2017-10-27 15:49
波特率  校验  停止位 要对应,最好抓下总线的数据  看看传感器有没有应答你,我有写过寄存器版本的代码   ...

有一个很奇怪的现象,我按一次按键,示波器上只有一个脉冲信号,貌似是正确的信号没有全发出去,代码上也检查不出来。。。。

一周热门 更多>