IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ESP32 ARDUINO RS485 DE/RE#编程 -> 正文阅读

[嵌入式]ESP32 ARDUINO RS485 DE/RE#编程

ESP32使用ARDUINO 对RS485 的DE/RE#控制

概述

原来一直用74HC04配合SP3485做RS485输出模块,对SP3485模块的DE/RE#端不控制。线路图如下:
在这里插入图片描述
但这次因为线路板尺寸紧张,并且有多余的点可以控制DE/RE#, 就选择了如下的线路:
在这里插入图片描述
现在来说一下编程遇到的困惑和解决问题的思路。

编程方法

方法一

当要向外部输出数据数据时,采用delay(10) 的方式,才能让串口的数据输出到外部接口。

比如我使用了RX2,TX2作为RS485的输出模块。程序应该这样,不然不能输出数据。

    if ( Serial.available())
    {
        uint8_t x = Serial.read();
        if ( x == 's' )
        {
            char sendBuff[] = "Send message to RS485";
            digitalWrite(DE_485, HIGH);
            Serial2.println(sendBuff);
            delay(10);
            digitalWrite(DE_485, LOW);
			Serial.println("Message sneded to RS485");
		}
	}

程序说明:如果在digitalWrite(DE_485, HIGH)后不延时10ms的话无法在串口2上输出信息。在程序中添加这个delay(10)后可以正常输出了。还没有试,大量的数据可能要延长这个延时时间。

方法二

采用中断的方式。
中断程序:

void IRAM_ATTR isrDown()    // edge falling
{
    digitalWrite(DE_485, HIGH);
}

void IRAM_ATTR isrRDown()   // edge riging
{
    digitalWrite(DE_485, LOW);
}

在setup中将中断程序分配给特定的端子:

    attachInterrupt(17, isrDown, FALLING);
    attachInterrupt(16, isrRDown, RISING);  

17是TX2,16是RX2,分别是串口2对应的TX和RX。这时,程序就像RS232或USB普通串口一样发送和接收就可以了。

    if ( Serial.available())
    {
        uint8_t x = Serial.read();
        if ( x == 's' )
        {
            char sendBuff[] = "Send message to RS485";
            Serial2.println(sendBuff);
			Serial.println("Message sneded to RS485");
		}
	}

总结

从程序可以看出,Arduino还是有操作系统的特点,在代码上看Serial2.println(sendBuff)在后台是运行的,当我们发送这个指令时,后台按波特率不断的执行,这条语句后面如果直接执行digitalWrite(DE_485, LOW), 会使数据发送不出去。采用中断形式是一种尝试。或许在频繁操作的RS485时会不会健康运行有待于验证,也希望网友提宝贵意见。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:59:21  更:2022-03-13 21:59:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:35:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码