搞定485通讯

准备一:实物连接图,两线连通,USB接PC

准备二:485通讯实际测试时发现:MCU引出的  A B线和PC接反了,

也是有数据的 不过全部是乱码,所以不要慌,交换就对头了。

准备三:原理图

准备四:参考埃士GEEK的电表

485需要3根线:

A

B

ENABLE --据说可以放弃,在电路中加一个三极管。

硬件原理如下,用STM32的USART2

 

初始化:A B

void Ammeter_Init(void)
{
    USART_Config(2, 9600, USART_WordLength_8b, USART_Parity_No,  2,  0, ENABLE, DISABLE);
}

就是给串口2的配置,GEEK在串口3做了影射。我现在tsl修改过来。

初始化:ENABLE

void RS485_En_Init(void)
{
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_8;                     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;             
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);   
}

此后就可以收发了。

void SendEMMsgs(u8 *Msg, u8 Len)
{
    OSTimeDlyHMSM(0, 0, 0, 300);
    USART_GetFlagStatus(EM_UART_PORT,USART_FLAG_TC);
    if(Len)
    {
        USART2_EN_ON();//----------------------------------------------
        USART_SendData(EM_UART_PORT, 0xFE);
        while(USART_GetFlagStatus(EM_UART_PORT, USART_FLAG_TC)==RESET)
        ;
        USART_SendData(EM_UART_PORT, 0xFE);
        while(USART_GetFlagStatus(EM_UART_PORT, USART_FLAG_TC)==RESET)
        ;
        USART_SendData(EM_UART_PORT, 0xFE);
        while(USART_GetFlagStatus(EM_UART_PORT, USART_FLAG_TC)==RESET)
        ;
        USART_SendData(EM_UART_PORT, 0xFE);
        while(USART_GetFlagStatus(EM_UART_PORT, USART_FLAG_TC)==RESET)
        ;
        while(Len--)
        {
            USART_SendData(EM_UART_PORT, *(Msg++));
            while(USART_GetFlagStatus(EM_UART_PORT, USART_FLAG_TC)==RESET);
        }
        if(MsgTimeoutCnt<255)
        {
            MsgTimeoutCnt++;
        }
        USART2_EN_OFF();//-----------------------------------------------
    }
}

上面就是发送消息代码。

控制脚拉高---开始发送直到发送完毕---控制脚拉低-----其实一般控制脚是低电平(要发的时候拉起来)也就是处在等待接收状态

 

现在我遇到的问题:http://www.openedv.com/forum.php?mod=viewthread&tid=276891&extra=

我485是OK的,发送完毕以后,控制脚一拉下来,见鬼了,LCD显示没有了。呵呵。

我必须一直保持控制脚是高电平。

实际测试也是的,我一直可以发送出去MCU到PC,但是不拉低的话就不能接受PC发来的消息

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值