明媚媚媚 2023-02-09 10:49 采纳率: 0%
浏览 129
已结题

1.8v输入rs485 电平转换

MCU使用的的是Nordic公司的Nrf52840芯片,供电电压为1.8v,要实现RS485通信。
目前的电路是使用一个兼容1.8v输入的485芯片,型号为MAX14852,电路图是根据max14852的数据表来进行设计的,但在电脑的调试串口无法正确显示。
想要改进:另外再做一块电路板(相当于rs485模块),包括电平转换以此来进行使TX RX 控制引脚电压由1.8v升高至3.3v或5v,使用常见的485芯片(如MAX485)来进行485通信,希望各位指点一二!

  • 写回答

4条回答 默认 最新

  • CodeBytes 2023-02-09 11:27
    关注

    该回答引用ChatGPT

    这是一个很好的想法。为了使MCU与其他RS485设备进行通信,必须将MCU的TX/RX控制引脚电压升至与RS485设备兼容的电压,通常为3.3V或5V。

    您可以设计一个电平转换电路,该电路将1.8V的MCU引脚电压转换为3.3V或5V。接下来,您可以使用常见的RS485芯片(例如MAX485)实现RS485通信。您需要确保在设计电平转换电路时遵循电气安全规范,以避免对MCU造成损坏。

    在进行通信之前,您还需要确保串口配置正确,以确保数据可以正确地在MCU和PC之间进行传输。
    下面是一个在MCU上实现RS485通信的代码示例,该代码使用C语言:

    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    
    #define F_CPU 16000000UL
    #define BAUD_RATE 9600
    #define BAUD_PRESCALE ((F_CPU / (BAUD_RATE * 16UL)) - 1)
    
    void UART_init(void)
    {
      UBRR0H = (BAUD_PRESCALE >> 8);
      UBRR0L = BAUD_PRESCALE;
      UCSR0B |= (1 << RXEN0) | (1 << TXEN0);
      UCSR0C |= (1 << UCSZ00) | (1 << UCSZ01);
    }
    
    void UART_send(unsigned char data)
    {
      while(!(UCSR0A & (1 << UDRE0)));
      UDR0 = data;
    }
    
    unsigned char UART_receive(void)
    {
      while(!(UCSR0A & (1 << RXC0)));
      return UDR0;
    }
    
    int main(void)
    {
      UART_init();
      while (1)
      {
        unsigned char received_data = UART_receive();
        UART_send(received_data);
      }
      return 0;
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 创建了问题 2月9日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。