12621|16

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

UART485通信,请问为什么接收的到的数据都是00? [复制链接]

 
#include
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "inc/hw_types.h"
#include "driverlib/fpu.h"
#include "driverlib/debug.h"
#include "driverlib/pwm.h"
#include "inc/hw_gpio.h"
       
#define UARTConfigSet(a, b, c)    UARTConfigSetExpClk(a, 16000000, b, c)
#define NUM_UART_DATA    4
#define GPIO_PA5_U3TX           0x00001401
#define GPIO_PA4_U3RX           0x00001001
uint8_t ui8DataTx[NUM_UART_DATA];
/*char SerialRxData[200];

int SerialDataCount = 0;

void
UARTSend(const uint8_t *pui8Buffer, unsigned long ui32Count)
{
    while(ui32Count--)
    {
       UARTCharPut(UART5_BASE, *pui8Buffer++);
    }

}*/
///


int main(void)
{
         void UARTSend();
                void uartPuts();
//        char c;
         uint32_t ui32SysClock;
         ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
                                           SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
                                           SYSCTL_CFG_VCO_480), 120000000);
       

        /*
        IntMasterDisable();
        IntEnable(SYSCTL_OSC_INT);
        */
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//ê1ÄüGPIOA¿ú
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);
        GPIOPinConfigure(GPIO_PA4_U3RX);
        GPIOPinConfigure(GPIO_PA5_U3TX);       
        GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_4 | GPIO_PIN_5);
        //UARTClockSourceSet(UART3_BASE,UART_CLOCK_PIOSC);
       

        UARTConfigSet(UART3_BASE, 9600, (UART_CONFIG_WLEN_8 |
       UART_CONFIG_STOP_ONE |
       UART_CONFIG_PAR_NONE));
       
        //μãááLED
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);//ê1ÄüGPIOH¿ú
        GPIODirModeSet(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT);
        GPIOPadConfigSet(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);
       

                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0x00);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0xff);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
               
                ui8DataTx[0] = 'u';
    ui8DataTx[1] = 'a';
    ui8DataTx[2] = 'r';
    ui8DataTx[3] = 't';

        while(1)
        {
                uartPuts("HELLO EEWORLD:\r\n");   //  Çëêäèëò»¸öÃüá°′»Ø3μÖ′DD
                UARTSend(UART3_BASE, (uint8_t *)ui8DataTx, NUM_UART_DATA);
                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0x00);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0xff);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
         
        /*        c=UARTCharGet(UART3_BASE);
       
                if(c=='1')
                {
                        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0x07);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                }
                if(c=='0')
                {
                        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0xff);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                }
                SerialRxData[SerialDataCount]=UARTCharGet(UART3_BASE);///2»½óêÕμ½êy¾Y£¬μè′y
                        if(SerialRxData[SerialDataCount])
                        {
                                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0x07);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                        }*/

        }
       
}
void
UARTSend(uint32_t ui32UARTBase, const uint8_t *pui8Buffer, uint32_t ui32Count)
{
    //
    // Loop while there are more characters to send.
    //
    while(ui32Count--)
    {
        //
        // Write the next character to the UART.
        //
        MAP_UARTCharPut(ui32UARTBase, *pui8Buffer++);
    }
}
//  í¨1yUART·¢Ëíò»¸ö×Ö·û
void uartPutc(const char c)
{
    UARTCharPut(UART3_BASE, c);
}

//  í¨1yUART·¢Ëí×Ö·û′®
void uartPuts(const char *s)
{
while (*s != '\0')
    {
        //UARTCharPut(UART3_BASE, *(s++));       
                        uartPutc(*(s++));
    }

}


最新回复

波特率不对吧  详情 回复 发表于 2017-5-18 20:24
 
点赞 关注

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
各位大神多指教
 
 

回复

1万

帖子

140

TA的资源

版主

板凳
 
用串口监视器先看看数据发送对不对。
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

2721

帖子

0

TA的资源

纯净的硅(中级)

4
 
看A、B有没有电平变化?
 
 
 

回复

503

帖子

1

TA的资源

纯净的硅(初级)

5
 
看看波特率是否一样的!
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

6
 
发送端,不经过485,芯片串口通过转接线,连到电脑,用串口助手看是否有数据。保证发送正常。如果有示波器或逻辑分析仪,可以测485两条线的信号,接收端转换成串口的信号。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

7
 
chunyang 发表于 2017-4-7 16:47
用串口监视器先看看数据发送对不对。

串口助手上的显示的数据就是图片上这样。我单步运行了一下,确实是执行UARTSend时才会在串口助手上写00。无论怎么改程序里待发送的值都是这样。

QQ截图20170408090718.png (38.21 KB, 下载次数: 5)

QQ截图20170408090718.png

点评

那显然就是程序问题,注意赋值相关的代码,好好检查吧。另建议初学者不要直接贴源码,画详细的流程图对提高编程能力非常有益,别嫌麻烦。  详情 回复 发表于 2017-4-8 13:29
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

8
 
suoma 发表于 2017-4-7 19:08
看A、B有没有电平变化?

手头还还没有万用表。。。我先看看程序有没有问题
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

9
 
ddlxiaoxu 发表于 2017-4-7 20:59
看看波特率是否一样的!

波特率是一样的
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

10
 
顶上去,有没有在加班的同学
 
 
 

回复

1万

帖子

140

TA的资源

版主

11
 
东西南北142 发表于 2017-4-8 09:08
串口助手上的显示的数据就是图片上这样。我单步运行了一下,确实是执行UARTSend时才会在串口助手上写00。 ...

那显然就是程序问题,注意赋值相关的代码,好好检查吧。另建议初学者不要直接贴源码,画详细的流程图对提高编程能力非常有益,别嫌麻烦。
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

12
 
chunyang 发表于 2017-4-8 13:29
那显然就是程序问题,注意赋值相关的代码,好好检查吧。另建议初学者不要直接贴源码,画详细的流程图对提 ...

这个程序挺简单,就是一个发送数据。检查了几遍,感觉也没有问题,真不知道咋回事了
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

13
 
难道485不需要用GPIO控制485芯片数据收发方向?你把485先默认为接受模式,需要发送数据时才设置为发送模式。
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

14
 
wateras1 发表于 2017-4-10 09:58
难道485不需要用GPIO控制485芯片数据收发方向?你把485先默认为接受模式,需要发送数据时才设置为发送模式 ...

原理图是这样,难道这个PK3是控制收发的?

QQ图片20170410111248.png (27.25 KB, 下载次数: 2)

QQ图片20170410111248.png

点评

是的,你这块不是用一个GPIO控制的吗  详情 回复 发表于 2017-4-10 13:47
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

15
 
东西南北142 发表于 2017-4-10 11:13
原理图是这样,难道这个PK3是控制收发的?

是的,你这块不是用一个GPIO控制的吗
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

16
 
wateras1 发表于 2017-4-10 13:47
是的,你这块不是用一个GPIO控制的吗

配置了一个GPIO控制,输出的量还是00。
#include
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "inc/hw_types.h"
#include "driverlib/fpu.h"
#include "driverlib/debug.h"
#include "driverlib/pwm.h"
#include "inc/hw_gpio.h"


#define UARTConfigSet(a, b, c)    UARTConfigSetExpClk(a, 16000000, b, c)
#define GPIO_PA5_U3TX           0x00001401
#define GPIO_PA4_U3RX           0x00001001
#define GPIO_PA6_U2RX           0x00001801
#define GPIO_PA7_U2TX           0x00001C01

        void
UARTSend(uint32_t ui32UARTBase, const uint8_t *pui8Buffer, uint32_t ui32Count);
        //void uartPuts();
int main(void)
{
    uint8_t ui8DataTx[4];
    uint8_t ui8DataRx[4];
     uint32_t ui32index;
       
         uint32_t ui32SysClock;
         ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
                                           SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
                                           SYSCTL_CFG_VCO_480), 120000000);
       
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);///PC7£¬485¿úμÄêÕ·¢¿ØÖÆ
        GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7);
        GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,0xff);
       
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//ê1ÄüGPIOA¿ú
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);
        GPIOPinConfigure(GPIO_PA4_U3RX);
        GPIOPinConfigure(GPIO_PA5_U3TX);       
        GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_4 | GPIO_PIN_5);
        UARTConfigSet(UART3_BASE, 115200, (UART_CONFIG_WLEN_8 |
       UART_CONFIG_STOP_ONE |
       UART_CONFIG_PAR_NONE));

        //UARTLoopbackEnable(UART3_BASE);
       
          ui8DataTx[0] = 'u';
    ui8DataTx[1] = 'a';
    ui8DataTx[2] = 'r';
    ui8DataTx[3] = 't';
                /*       
         // UARTSend(UART3_BASE, (uint8_t *)"\n\n\rSending : ",
     //        strlen("\n\n\rSending : "));
    //UARTSend(UART3_BASE, (uint8_t*)ui8DataTx, 4);
               
       
        for(ui32index = 0 ; ui32index < 4 ; ui32index++)
    {
        UARTCharPut(UART3_BASE, ui8DataTx[ui32index]);
    }

    //
    // Wait for the UART module to complete transmitting.
    //
    while(MAP_UARTBusy(UART3_BASE))
    {
    }
               
         // UARTSend(UART3_BASE, (uint8_t *)"\n\rReceiving : ",
     //        strlen("\n\rReceiving : "));
    //
    // Read data from the UART's receive FIFO and store it.
    //
   for(ui32index = 0 ; ui32index < 4 ; ui32index++)
    {
        //
        // Get the data received by the UART at its receive FIFO
        //
        ui8DataRx[ui32index] = UARTCharGet(UART3_BASE);
    }
               
*/
       
       

        UARTSend(UART3_BASE, (uint8_t*)ui8DataRx, 4);       
       
       
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);//ê1ÄüGPIOH¿ú
        GPIODirModeSet(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT);
        GPIOPadConfigSet(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);       
       
        while(1)
        {

        UARTSend(UART3_BASE, (uint8_t *)"\nUART Loopback Example ->",
            strlen("\nUART Loopback Example ->"));
       

                //UARTCharPut(UART3_BASE,ui8DataTx);
                //uartPuts("HELLO EEWORLD:\r\n");   //  Çëêäèëò»¸öÃüá°′»Ø3μÖ′DD
               
        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0x00);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(500 * (ui32SysClock/ 3000));///Ñóê±3ìDò
        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0xff);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(500 * (ui32SysClock/ 3000));///Ñóê±3ìDò
         
        /*        c=UARTCharGet(UART3_BASE);
       
                if(c=='1')
                {
                        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0x07);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                }
                if(c=='0')
                {
                        GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0xff);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                }
                SerialRxData[SerialDataCount]=UARTCharGet(UART3_BASE);///2»½óêÕμ½êy¾Y£¬μè′y
                        if(SerialRxData[SerialDataCount])
                        {
                                GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_3,0x07);///½óêÕμ½êy¾Y£¬ááμÆ
                                SysCtlDelay(1000 * (ui32SysClock/ 3000));///Ñóê±3ìDò
                        }
*/
        }
       
}
void
UARTSend(uint32_t ui32UARTBase, const uint8_t *pui8Buffer, uint32_t ui32Count)
{
    //
    // Loop while there are more characters to send.
    //
    while(ui32Count--)
    {
        //
        // Write the next character to the UART.
        //
        MAP_UARTCharPut(ui32UARTBase, *pui8Buffer++);
    }
}
//  í¨1yUART·¢Ëíò»¸ö×Ö·û
void uartPutc(const char c)
{
    UARTCharPut(UART3_BASE, c);
}

//  í¨1yUART·¢Ëí×Ö·û′®
void uartPuts(const char *s)
{
while (*s != '\0')
    {
        //UARTCharPut(UART3_BASE, *(s++));       
                        uartPutc(*(s++));
    }

}
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

17
 
波特率不对吧
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表