小耳朵1500922649 发表于 2018-8-31 13:52:17


同样使用MAX3430,STM32L0,通讯正常。

jyl518-283289 发表于 2018-8-31 14:13:11

发送程序问题可能性较大。

星辰夢 发表于 2018-8-31 14:18:37

11楼电路比较好,A/B线加上下拉电阻

qwb736727429 发表于 2018-8-31 14:39:31

小耳朵1500922649 发表于 2018-8-31 13:52
同样使用MAX3430,STM32L0,通讯正常。

那请问下,软件上是怎么写的?
我这边就是开发送时能,发送数据,判断传输完成之后开接收时能。485会收到一个‘0’,但我并没给485这边发东西

小耳朵1500922649 发表于 2018-8-31 17:07:20

static void RS485_SendData(uint8_t *buff,uint8_t len)
{
      RS485_TX;//切换为发送模式
      while(len--)
      {
                                        while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TXE)==RESET);//等待发送区为空

                                        USART_SendData(USART2,*(buff++));
      }
                                while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC)==RESET);//等待发送完成
                                RS485_RX;//切换为接受模式
}

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
   
/* Transmit Data */
USARTx->TDR = (Data & (uint16_t)0x01FF);
}

软件上自己用一个定时器实现MODBUS, 接收验证成功后调用RS485_SendData函数即可

小耳朵1500922649 发表于 2018-8-31 17:09:41

跳过MAX3430的485通讯,直接串口调试,先确保串口收发正常

小耳朵1500922649 发表于 2018-8-31 17:11:49

qwb736727429 发表于 2018-8-31 14:39
那请问下,软件上是怎么写的?
我这边就是开发送时能,发送数据,判断传输完成之后开接收时能。485会收到 ...

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
   
/* Transmit Data */
USARTx->TDR = (Data & (uint16_t)0x01FF);
}

static void RS485_SendData(uint8_t *buff,uint8_t len)
{
      RS485_TX;//切换为发送模式
      while(len--)
      {
                                        while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TXE)==RESET);//等待发送区为空

                                        USART_SendData(USART2,*(buff++));
      }
                                while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC)==RESET);//等待发送完成
                                RS485_RX;//切换为接收模式
}
软件上用一个定时器器实现MODBUS,调用RS485_SendData函数即可

qwb736727429 发表于 2018-8-31 18:06:25

小耳朵1500922649 发表于 2018-8-31 17:11
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */


好的,谢谢,程序差不多一样的。我电路图RN、EN本来是分开用两个IO控制的。看了你的电路,把他们并在一起,用一个IO口控制。现在可以了:D

Ich_Sun 发表于 2018-9-1 10:10:17

本帖最后由 Ich_Sun 于 2018-9-1 11:25 编辑

问题解决了

huzhongadd 发表于 2018-11-4 10:40:47

Ich_Sun 发表于 2018-9-1 10:10
问题解决了

你好,请问怎么解决的呀? 我也碰到相同问题
页: 1 [2] 3
查看完整版本: 485通信在发送状态切换到接收状态多发送个0怎么回事