当前位置: 首页 > 产品中心 > lcd显示屏-总成

STM32串口实现485双机通信的原理

发表时间: 2024-04-21 作者: lcd显示屏-总成
产品详情

  RS485通信想必大家都知道,在学习RS232时,都会拿485(RS485下文就用485代替)和其作对比。485优缺点不说,网上有。

  我用的是STM32库函数学的485通信,所以接下来就讲讲STM32串口实现485双机通信的原理:

  485和232都是基于串口的通讯接口,在数据的收发操作上都是一致的。但是他两的通讯模式却大不相同~!232是全双工(例:A->

  B的同时B->

  A,瞬时同步)工作模式,而485是半双工(发时不能收,收时不能发)工作模式。在232通信中,主机在发送数据的同时可以收到从机发过来的数据;但在485通信中,收发要经过模式位的切换来进行,譬如,发送数据时,会把模式为置‘1’,表示为发送模式,此时不能接收;当接收数据时,会把模式位置‘0’,表示为接收模式,此时不能发送。

  在讲STM32串口实现485双机通信的原理之前,先来复习一下串口中的中断知识点:

  串口的中断类型有很多种。这里主要讲两种:接收到数据中断和发送数据完成中断。这两个中断跟两个标志位有密切关系:RXNE(读数据寄存器非空)和TC(发送完成)。譬如在接收到数据的时候(RXNE,读数据寄存器非空),我们要产生中断。在发送数据结束的时候(TC,发送完成)要产生中断。这两种中断的产生方法都是在开启串口中断函数(USART_ITConfig();)中配置。并在获取中断状态函数(USART_ITStatus();)中判断是发送中断还是接受中断。

  01、有人问当产生接收中断时,没看到程序中清除中断标志啊,那不就一直中断下去了吗?这里官方规定有两种方法清除中断标志(书里面也有):1、尽快读取USART_DR(数据寄存器),通过读USART_DR可以将该位清零;2、可以直接向该位写‘0’,直接清零。02、两块板子的串口波特率一定要相同,否则将得不到想要的数据。

  1、在主函数中,扫描按键。一旦key0按下,首先将5个字节的数据存入rs485buf[]数组中,然后调用RS485_Send_Data(rs485buf,5);函数将5个字节的数据发送到串口。

  3、前两个是发送。现在是接收了。主函数中通过RS485_Receive_Data();不停的接收。4、进入RS485_Receive_Data();函数中,如果始终没按按键,则不会发送数据,也就不会产生接收中断,也就不会往我们定义的接收缓冲区(RS485_RX_BUF[64])里写数据。RS485_RX_CNT计数器的值也就是‘0’,对应在RS485_Receive_Data();函数中就不会进入里面的if语句(下图中红框)

  如果按键按下了,就会发送数据,就会产生接收中断,就会往我们定义的接收缓冲区(RS485_RX_BUF[64])里写数据,RS485_RX_CNT计数器的值也就开始自增,对应在RS485_Receive_Data();函数中就会进入里面的if语句,从之前定义的接收缓冲区(RS485_RX_BUF[64])里面取数据。

  通信接口背景知识 设备之间通信的方式 正常的情况下,设备之间的通信方式能分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。 串行通信的分类 1、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它其实就是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。 2、按照通信方式,分为: 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。 异步通信:不带时钟同步信号。比

  通信的基础原理介绍 /

  中国,2017年12月22日 -- 意法半导体 STM32CubeProgrammer (STM32CUBEPROG) 软件工具,在一个统一的多平台的用户可配置的环境内,为用户更好的提供 STM32 微控制器代码烧写和固件升级功能。 STM32CubeProgrammer支持Windows®、Linux、MacOS® 三大操作系统,能够正常的使用各种文件格式向STM32微控制器内部闪存/RAM或外部存储器烧写代码。具体功能包括存储器整体或扇区擦写选项字节。用户还可以生成程序安全烧写(固件安全安装更新)功能所需的加密文件,验证生产线上安装的软件的真伪,保护知识产权。 有了这个通用工具后,用户烧写 STM32微控制器 既可使用片上SWD

  用户烧写代码更方便 /

  1.unsigned int 32 (C语言标准表达方法) 2.uint32_t ; 3.u32; 这三种方式都是在表达同一个意思。ST 搞这么多花样,无非是想开发人员在写代码时定义数据类型能少写几个符号,然后又因为前后版本升级,为了兼容旧版本(主要是V2.0)才会出现这么多表示方法。不管他怎么换,都是基于标准C来的,看清楚以下几个文件你就OK了:core_cm3.h ;stm32f10x.h ; stdint.h; 其中每一个文件大概作用如下: stdint.h 这里放着C语言的标准表达方式//第36行开始 typedef signed char int8_t; // 标准表达方式

  固件库 V3.5 IAR /******************************************************************************* * 函数名称: GPIO_Configuration * 函数功能: 设置各GPIO端口功能 * 参数变量: NONE * 全局变量: NONE * 调用函数: * 改时间: * 版 本: V1.0 * 状 态:调试完成 *******************************************************************************/ void GPIO_Configuration(voi

  单片机学习除了了解该篇 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础 中的基础外,我们还需要有时钟的概念,本篇将记录 stm32的时钟系统。 1、STM32时钟介绍 下面这幅图时stm32的时钟系统框图 1)蓝底框表示 时钟源,即: ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。(WDG看门狗 使用该时钟源) ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。(RTC实时时钟 使用该时钟源) ⑤PLL为锁相环

  单片机学习五 时钟系统 /

  由于是M-M模式,所以只能选择DMA2 一、首先应该初始化DMA结构体 1.选择通道DMA_Channel,根据数据流选择对应的通道, 2.选择源数据地址DMA_PeripheralBaseAddr 3.目标地址DMA_Memory0BaseAddr 3.选择传输方向DMA_DIR,根据真实的情况有这三种DMA_DIR_PeripheralToMemory DMA_DIR_MemoryToPeripheral DMA_DIR_MemoryToMemory 4.设定待传输数据数目DMA_BufferSize,源数据大小 5.使能源数据地址,目标地址递增, 6.源数据和目标宽度DMA_PeripheralDataSize和D

  1、CubeMX介绍 应用优势 帮助MCU选型 在设计阶段尽可能模拟实际应用场景 自动代码生成,增加开发速度 设置选项 STM32CubeMX需要Java RE环境 安装之后,按Alt+S来配置更新器——不仅用于GUI,还用于Cube FW库 选择软件库存放位置 更新管理器 可以从“帮助”菜单中访问更新 工具更新器可以检测工具和CubeMX库的新版本 使用库管理器下载新的库包 MCU选择器 通过名字查找MCU 方便查找文档 输出Excel表格 MCU交叉选择器 引脚分配 2、功耗测量插件 使用PCC 通用PCC参数 MCU选择:可以直接从网站获取datasheet 参数选

  一、串口通信原理 UART:Universal Asynchronous Receiver/Transmitter(通用异步收发送器),用来传输串行数据,发送数据时,CPU将并行数据写入UART,UART按照一定格式在TxD线上串行发出;接收数据时,UART检测到RxD线上的信号,将串行收集放到缓冲区中,CPU即可读取UART获得的这一些数据。 UART最精简的连线根线,TXD用于发送,RXD用于接收,GND用于提供参考电平。UART之间以帧作为数据传输单位,帧由具有完整意义的若干位组成,它包含开始位、数据位、校验位和停止位。发送数据之前,互相通信的UART之间要约定好数据传输速率(波特率的倒数)、数据的传输格式(

  使用 /

  启动文件浅析

  PID控制C语言实现位置 增量型抗积分饱和积分分离 变积分

  通信锂电池充放电系统控制策略设计

  STM32CubeMX and STM32Cube HAL basics

  【电路】PC串口和MC68HC70-5K1微控制器之间的RS232传输电路

  嵌入式工程师AI挑战营(初阶):基于RV1106,动手部署手写数字识别落地

  有奖直播 瑞萨新一代视觉 AI MPU 处理器 RZ/V2H:高算力、低功耗、实时控制

  【下载】LAT1396 STM32CubeIDE实用技巧之STM32H7双核调试的配置

  【下载】LAT1343 STM32H5 USBD Classic驱动 CDC移植

  【下载】LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤

  【直播】4月11日,STM32Trust如何帮助新产品设计提升信息安全保护能力

  【线日,基于Buildroot制作STM32MP13启动镜像-深圳/厦门/西安/郑州/苏州

  【新品】STM32U0新一代超低功耗入门级MCU,助力终端产品省电,安全,BOM成本低

  【新品】 STM32H7R/S基于Cortex-M7,运行频率高达600 MHz,板载闪存型MCU 拥有高速的外部存储

  【新品】STM32WBA54/55 支持BLE5.4、IEEE 802.15.4通信协议、Zigbee®、Thread和Matter协议

  【新品】STM32MP2 最高配备双核Arm® Cortex®-A35和Cortex®-M33的STM32MP2系列微处理器

  【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性

  STM32与Actility ThingPark的合作实现高效的无线固件更新

  在物联网(IoT)领域,无线固件更新(FUOTA)技术的引入明显提高了设备管理的效率和灵活性。STM32与Actility ThingPark平台的结合,为开发 ...

  在“嵌入式学习006_Systick使用(一)”中,详细的介绍了Systick中寄存器的使用方法,用到了很多函数,实际上到了3 5版本的标准固件库中,移 ...

  用到GPIO口 PA0~PA11共12个引脚因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出,其他设定 ...

  这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题。下面是我在遇上问题后的一些 ...

  7 1电源管理概述处理器广泛地利用门时钟来禁能那些未用的功能和未用功能块的输入,因此只有正在有效使用中的逻辑才会消耗动态功率。ARMv7-M ...

  适用 STM32 通用 Bootloader ,让 OTA 更加 Easy

  答题抽奖:Mentor Tessent Automotive相关测试解决方案(奖品池还剩不少奖品哟)

  “玄铁杯”第三届RISC-V应用创新大赛—国产高性能RISC-V Linux开发板LicheePi 4A报名专场,万元奖金,邀您奔赴开源设计盛宴

  读故事写评语喽~ 踩过坑的你是否期待更贴心智能的客户支持,KeysightCare邀您抢楼赢礼!

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程