stm32实验485实验
(完整word版)STM32的485最简单例程
485最基本的半双工通信配置
采用STM32F103ZET6串口3连接485芯片通信口,485芯片的A,B通过485转串口模块与电脑相连,完成在串口软件上输入输出功能。
串口3,配置函数:
void USART3_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
// USART3_TX —> PB10 , USART3_RX —> PB11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure。GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure。GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure。GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
stm32驱动RS485
/**
****************************************************************************** * @file USART/Interrupt/main.c
* @author MCD Application Team
* @version V3.3.0
* @date 04/16/2010
* @brief Main program body
****************************************************************************** * @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONL Y AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
RS485通讯实验
RS485通讯实验
与CAN 类似,RS-485 是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强、传输距离远的特点。RS-485 通讯协议由RS-232 协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。RS-485 协议主要是把RS-232 的信号改进成差分信号,从而大大提高了抗干扰特性。
对比CAN 通讯网络,可发现它们的网络结构组成是类似的,每个节点都是由一个通讯控制器和一个收发器组成,在RS-485 通讯网络中,节点中的串口控制器使用RX 与TX 信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成TTL 信号通过RX引脚传输到串口控制器中。
RS-485 通讯网络的最大传输距离可达1200 米,总线上可挂载128 个通讯节点,而由于RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑,当AB 两线间的电压差为-6V~-2V 时表示逻辑1,当电压差为+2V~+6V 表示逻辑0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的。
RS-485 与RS-232 的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。
由于RS-485 与RS-232 的协议层没有区别,进行通讯时,我们同样是使用STM32 的
USART 外设作为通讯节点中的串口控制器,再外接一个RS-485 收发器芯片把USART 外设的TTL 电平信号转化成RS-485 的差分信号即可。
基于STM32 的RS485 适配器开发
Science and Technology &Innovation ┃科技与创新
2019年第21期
·53·
文章编号:2095-6835(2019)21-0053-03
基于STM32的RS485适配器开发
周灵江,金杰,丁小洪,朱阳,章家会,金辰,朱鸿博
(国网浙江临海市供电有限公司,浙江临海317000)
摘要:STM32是一款基于ARM Cortex-M3内核的高性能、低成本、低功耗微控制器。使用意法半导体推出图形化配置工具STM32CubeMX ,开发者快速完成工程的建立、初始化。再利用MATLAB/Simulink 针对STM32微型控制器的STM32MAT 模型库,实现软件逻辑生成可读、可移植的C 代码MDK 工程文件,编译、下载后直接在单片机上运行。为提高用电信息采集系统RS485通信可靠性,解决实际遇到的问题,开发RS485适配器。基于STM32芯片及配套软件工具,使RS485适配器的设计与实现更为方便快捷,极大提高了设计开发效率,提高了适配器的可维护性及可靠性。
关键词:MATLAB ;STM32;RS485适配器;硬件系统中图分类号:TP273.5文献标识码:A DOI :10.15913/ki.kjycx.2019.21.019
1引言
STM32系列微控制器是一款基于ARM Cortex-M3内核的嵌入式应用产品[1]。由于其高性能、低成本、低功耗的特性使其应用领域不断扩大,对于高效开发和利用更为重要。STM32CubeMX 软件是意法半导体(ST )公司推出的STM32系列单片机的图形化配置工具,开发者可利用其提供的可视化引脚、外设、时钟等配置功能,快速完成工程的建立、初始化[2-3]。基于MATLAB 和STM32CubeMX 联合开发的STM32-MAT 工具箱,它提供的MCU CONFIG 模块可以配置STM32CubeMX 软件所支持的STM32芯片,同时它还包含几乎所有STM32芯片上的资源。在嵌入式软件开发过程中,可以结合Matlab&Simulink 已有的模块实现复杂的控制算法与嵌入式编程。在STM32CubeMX 软件配置的基础上,快速为STM32芯片实现图形化设计、早期验证、代码自动生成和文档自动化[4]。Embedded Coder 生成的C 代码MDK 工程文件,编译、下载后直接在单片机上运行,进一步简化了代码集成过程[5]。
【STM32H7教程】第31章STM32H7的USART应用之RS485
【STM32H7教程】第31章STM32H7的USART应⽤之RS485
第31章 STM32H7的USART应⽤之RS485
本章教程为⼤家讲解USART应⽤之485总线。虽然这⼏年⽆线⽹络的使⽤率有所上升,有线的串⾏⽹络仍然提供最有⼒、最可靠的通信,特别是在恶劣的环境中。在需要抗噪、抗静电、抗电压故障的⼯业,建筑⾃动化领域仍然是有线通信的天下。
31.1 初学者重要提⽰
31.2 RS485基础知识
31.3 RS485硬件设计
31.4 RS485驱动设计
31.5 RS485板级⽀持包(bsp_uart_fifo.c)
31.6 RS485驱动移植和使⽤
31.7 使⽤例程设计框架
31.8 实验例程说明(MDK)
31.9 实验例程说明(IAR)
31.10 总结
31.1 初学者重要提⽰
1. 学习本章节前,务必优先学习第30章,RS485⽤到的串⼝FIFO也是建⽴在30章的基础上。
2. 了解了本章31.2和31.3⼩节的基础知识后,强烈推荐看此贴的两个⽂档,对RS485讲解的⽐较透彻,中⽂版:。
3. STM32H7⽀持RS485的硬件流控制,即有⼀个专门的引脚来控制485 PHY的收发状态切换。V7开发板⽤的USART3,需要⽤PD12
来控制,⽽这个引脚要⽤于FMC,所以⽤的是⼀个通⽤IO。
4. 经常会有⽹友咨询为什么程序⾥⾯收发切换没有做延迟处理,这⾥就涉及到⼀个关键的知识点TXE发送空中断和TC发送完成中断的
区别,详细看教程中说明即可。
31.2 RS485的基础知识
背景知识(了解即可)
智能仪表是随着80年代初单⽚机技术的成熟⽽发展起来的,现在世界仪表市场基本被智能仪表所垄断。究其原因就是企业信息化的需要,企业在仪表选型时其中的⼀个必要条件就是要具有联⽹通讯接⼝。最初是数据模拟信号输出简单过程量,后来仪表接⼝是RS232接⼝,这种接⼝可以实现点对点的通信⽅式,但这种⽅式不能实现联⽹功能。随后出现的RS485解决了这个问题。
485通讯使用STM32串口DMA发送数据丢失字节的问题
STM32F10x单片机串口DMA发送485数据问题
开启串口DMA发送数据,使能DMA发送完成中断,实测进入DMA发送完成中断后,有两个字节数据并没有通过串口发送出去;使用485发送数据时,当在DMA发送完成中断中,使能485接收,会造成485传输丢失两个字节;现通过以下方法解决了该问题:
在DMA发送完成中断中,
首先判断串口发送寄存器空标志是否有数据未移入到移位寄存器可用while(!USART_GetFlagStatus( USART2, USART_FLAG_TXE));等待移
入完成;因该标志默认状态下为1,且数据由硬件移入,故不会造成死循环,个人认为;
再判断,串口发送完成标志是否是发送未完成状态,如果为发送未完成,开启发送完成中断;否则,使能485接收(该处未验证不确定);
在串口发送完成中断中,使能485发送。
实测可用;有不合理之处欢迎指教。
基于STM32F050的RS485数据转发器设计
需 要 通 信 的 设 备 看 来 , 总 线 上 透 明 的 ,不 存 在 数 据 转 发 器 ,
不 影 响原 有 的 数 据 通 信 功 能 。 而数据转发 器将 R S 4 8 5总 线 上 的 负 载 实 现 隔 离 ,也 即 无
论第 一个 R S 4 8 5接 口上 连 接 几 个 设 备 ,经 过 转 发 器 之 后 ,总 线 上 的负 载 变 成 了 只有 第 二 个 接 口 自身 的 负 载 , 同样 ,第 二 个设 备上连接多个 R S 4 8 5设 备 时 ,第 一 个 R S 4 8 5接 口总 线 上
的负 载 也 只有 接 口 自身 的 负 载 。
( 2 ) 数据传输方 向控制
当没 有 数据 传 输 时 ,驱 动 D i r l 、D i r 2 位 低 电平 , 由于 上 拉
1 引言
在 电 能 信 息 采 集 系 统 中 ,通 过 R S 4 8 5总 线 将 电表 直 接 和
3 . 1 硬 件 实 现
R S 4 8 5数 据 转 发 器 的 原 理 如 图 1所 示 .主 要 由 2片 R S 4 8 5 电平 转 换 芯 片 MA X 3 4 5和 C P U S T M3 2 F O 5 0组 成 。R S 4 8 5总 线 上 的电 平转 换 为 的 r I T r L电平 后 ,和 C P U 的普 通 1 0端 口相 连 接 。
基于STM32智能电表设计
基于 STM32智能电表设计
摘要:今年来,随着社会的发展时代的进步,人们平均收入的提高越来越多
的家庭,用电设备的增加,有的家庭还在用老式电表,电器设备越来越多,用电
负荷页越来越大,非常容易造成短路打火,而且还容易引发火灾,如何解决问题,成为了人们颇为关注的问题。
这个智能电表采用的是STM32F103VET类型的控制器为主控芯片,设计成为
了一中组成十分简单,而且具有比较强的实用性的多能智能电表。我在设计这个
智能电表的过程中,采用的是把它们模块化的设计理念,其中智能电表的硬件有
主控模块、电源转换模块、LCD段码显示模块、按键模块和RS485通讯模块。软
件部分包括主程序、系统初始化程序、电量处理程序、键盘中断程序以及LCD段
码显示程序。
关键词:智能电表STM32F103 LCD RS485
1.研究背景
智能电表作为智能电网中重要的基础组成部分之一,也是实现智能电网的"神
经末梢"。以后电能表不再仅仅是一个简单的仪表独立使用,而是朝着智能化、模
块化、系统化、网络化、环保化方向发展,同时也伴随着我国智能电网的大力发展,智能电表也具有很大的市场前景。
2.课题研究的内容
本设计采用STM32F103VET型号的微控制器作为主控芯片,设计了一款组成简单、具有较强实用性的多功能电能表。在设计电能表硬件和软件的过程中,均采
用了模块化的设计思想。系统主要包括的是硬件设计方案和软件设计方案两部分
的内容,以下将进行具体介绍。
3.系统的硬件设计
这个论文设计的是基于stm32智能电表的硬件设计,在这个设计的整体结构
上主要由主控模块、电源转换模块、电流电压采样模块、lcd显示模块、RS485
STM32F407VGT6的485通信程序【SP34
【SP3485芯片&xx 接收】
本例程为 STM32F4XX (M4 内核)的 485通信程序,采用串口 1 发送和接收 数据,中断接收,将接收到的数据重新发送出去。
主函数文件如下:
#include ""
/**********************************************************\**
名 :**************************************
** 工作环境 :RealView MDK-ARM
************************************
功能:RS485通过串口 1发送,中断接收!将接收到 ***** 的数据通过再次发送出去
*********************、************************************************ **********/extern void uart_init(void);
extern void USART1_SendByte(u8 Data);
extern unsigned char UART1_GetByte(u8 GetData);
extern void delay(unsigned int dl);
void delay(unsigned int dl)
{
unsigned int i,y; for(i = 0; i < 5000; i++)
{
for(y = 0; y < dl; y++);
}
static void led_init(void)
STM32串口实现485双机通信的原理
STM32 串口实现485 双机通信的原理
RS485 通信想必大家都知道,在学习RS232 时,都会拿485(RS485 下文就用485 代替)和其作对比。485 优缺点不说,网上有。
我用的是STM32 库函数学的485 通信,所以接下来就讲讲STM32 串口实现485 双机通信的原理:
485 和232 都是基于串口的通讯接口,在数据的收发操作上都是一致的。但是他两的通讯模式却大不相同~!232 是全双工(例:A->B 的同时B->A,瞬时同步)工作模式,而485 是半双工(发时不能收,收时不能发)工作模式。在232 通信中,主机在发送数据的同时可以收到从机发过来的数据;但在485 通信中,收发要经过模式位的切换来进行,譬如,发送数据时,会把模式为置‘1’,表示为发送模式,此时不能接收;当接收数据时,会把模式位置‘0’,
表示为接收模式,此时不能发送。
在讲STM32 串口实现485 双机通信的原理之前,先来复习一下串口中的中断知识点:
STM32 带can通讯 485 串口 232串口通讯 中文件资料 最小系统说明书
深圳轩微胜电子科技 STM32全功能工控板 最小系统板 / STM32F103C8T6最小系统带CAN 485 232 说明书 目
录:
1、全功能STM32工控系统板最小系统板功能介绍
2、全功能STM32工控系统板最小系统板原理图解析
3、全功能STM32工控系统板最小系统板配套资料
4、can 程序设计源代码 和485程序设计源代码
5、总结
6、公司信息
一、全功能STM32工控系统板介绍:
STM32最小系统板主要协助广大工程师与学生在产品调试、新产品开发,样机测试,参加大赛、毕业设计等领域的应用和开发,全功能STM32
工控系统板最小系统板的主要特点有:
1、全功能通信系统:集成CAN通讯,485通讯,232串口通讯
于一身,方便各种通信的切换使用。
2、标准下载口:国际标准的Jlink下载口,同时兼容通信程
序下载,便捷可靠。
3、宽电源接口:适应工控需求的电源,无论在什么系统上应
用,系统自动识别电源进行调整,不需要外接电源,方便应用。
4、工业应用级布线,采用多层板设计,公共电源和地完全隔
离,加大了过载能力,抗干扰能力强。
5、体积小,方便安装应用
6、跳帽设计,方便多重状态组合
深圳轩微胜电子科技STM32全功能工控板最小系统板/
图一:功能原理图
/item.htm?spm=a1z10.1-c.w4004-9605616956.6.v1FXtM&id=43719925208二、全功能STM32工控系统板原理图解析:
2.1按键与LED电路:
深圳轩微胜电子科技STM32全功能工控板最小系统板/
2.2 CAN接口电路:
STM32的RS485通信
STM32的RS485通信
1.简介与CAN类似,RS-485是一种工业控制环境中常用的通讯块议,它具有抗干扰能力强、传输距离远的特点。RS-485通讯协议由RS-232协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。
用的是SP3485芯片:
通信的时候,A端口连接另一个设备的A端口,B端口连接B端口,不是交叉相连。最多能够连接128个设备,所以在某种情况下可以取代网络,RE引脚用来控制通讯数据的方向,要么进行接收,要么进行发送。本质还是串口通信
RS485_RE为高电平的时候,DE为高电平有效,允许发送数据RS485_RE为低电平的时候,RE为低电平有效,允许接收数据所以当你要发送数据的时候,需要将与RE连接的引脚置为高电平、
2.编码所以我们大致可以得到一个程序模板:
发送数据函数void rs485_send(uint8_t *pbuf,uint32_t len) { //设置RS458为发送模式,将所连引脚设置高电平输出PGout(2)=1; //调用串口2的库函数发送数据... //延时100us delay_us(100); //设置RS485为接收模式PGout(2)=0;
} 接收函数,使用中断接收void USART2_IRQHandler(void) { uint8_t data=0; if(USART2_GetITStatus(USART2,USART_IT_RXNE)!=RESET) data = USART2_ReceiveData(USART2);
STM32的485通讯程序(打印)
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
//OSTimeDlyHMSM (0, 0, 0, 3);
RX_485;
}
/*******UART3发送函数**************/
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
/* UART2中断配置*/
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
一种基于STM32的Modbus—RS485通信方法
一种基于STM32的Modbus—RS485通信方法
作者:赵艳明曾培峰
来源:《智能计算机与应用》2018年第03期
文章编号: 2095-2163(2018)03-0050-05中图分类号:文献标志码: A
摘要:关键词:(School of Computer Science and Technology, Donghua University,Shanghai 201620, China)
Abstract: Based on STM32 chip, a Modbus-RS485 communication method is proposed. The method uses the object-oriented technology to manage Modbus calls and serial ports is universal,which can be easily portable to other systems with the same characteristics. After that, the paper elaborates using a state machine to manage Modbus communication combined with logs, so that the communication network has self-diagnosis and adaptive function. In combination with the characteristics of STM32 chip and Modbus protocol, a DMA receiving data method is proposed which is independent of the Modbus command length. This method can be used as a reference scheme to solve the low communication efficiency and slow data transmission of Modbus-RS485.
STM32多路ADC采样数据经过RS485传输到另一块ARM板路虎(LPC1768)
#include "stm32f10x.h"
#include "string.h"
#include "stdio.h"
void Delay(unsigned short time);
/***********************************************************************
外设时钟使能
************************************************************************/
void RCC_Configuration(void)
{
/* 使能外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_ADC1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 |
RCC_APB1Periph_USART3, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
}
/*******************************************************************************
一种基于STM32的Modbus-RS485通信方法
一种基于STM32的Modbus-RS485通信方法
赵艳明;曾培峰
【摘要】基于STM32芯片,提出一种Modbus-RS485通信方法,本方法采用面向对象的思想管理Modbus通话和串口具备通用性,可方便移植到具有相同特点的其它系统.提出使用状态机结合日志来管理Modbus通信,使得通信网络具备自诊断和自适应功能;结合STM32芯片特点和Modbus协议规定,提出一种和Modbus命令长度无关的DMA接收数据方法.本方法可作为解决Modbus-RS485通信效率低、数据传输慢的参考方案.
【期刊名称】《智能计算机与应用》
【年(卷),期】2018(008)003
【总页数】5页(P50-53,56)
【关键词】Modbus;状态机;面向对象;DMA接收
【作者】赵艳明;曾培峰
【作者单位】东华大学计算机科学与技术学院,上海201620;东华大学计算机科学与技术学院,上海201620
【正文语种】中文
【中图分类】TP273
引言
Modbus-RS485是一种在工业现场广泛使用的布网方法[1]。RS485总线上最多
支持255个从站,然而在实际应用场景中从站的数量远远大于这个数量。可采用扩展Modbus地址域,或者数据域中添入物理地址来增加从站的数量[2]。
常见的Modbus通信方法有2种。一种是主站根据要请求的数据信息,封装相应的请求帧,并生成对应的定时器,通信程序通过定时器来执行Modbus通话[3]。这种方法存在明显的缺点,如果定时器时间设置过短容易发生数据碰撞,过长则导致通信效率低。另外一种是主站一次只允许发起一个通话,当从站回复数据或者从站在规定时间内不回复数据,主站才可以发起下一次通话[4],这种方法和第一种没有本质上的区别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include ""
#include "" #include ""
#include ""
#include "" #include "" #include "" #include "" #include "" #include ""
#include "" #include ""
#include ""
#include "" #include ""
#include "" #include "" #include "" #include "" #include "" #include ""
int main(void) {
u8 key;
u8 i=0,t=0;
u8 cnt=0;
u8 rs485buf[5];
Stm32_Clock_Init(9);
for(i=0;i } t++; delay_ms(10); if(t==20) { LED0=!LED0;//提示系统正在运行 t=0; cnt++; LCD_ShowxNum(60+48,150,cnt,3,16,0X80); //显示数据 } } }