STM32自学笔记-6-RS485串口通信
RS232的通信逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。这样高的电平和TTL不兼容,而且容易烧坏接口电路芯片,共地的方式也会带来共模干扰,传输距离也不长,实际的最远传输距离在15米左右
RS485针对这些缺点,将两条线上的电压差来表示电平高低,电压差为+(2-6V)时表示“1”,-(2-6V)时表示“0”。两条线的电平与TTL兼容,差分传输抗共模干扰强,最长传输距离也有效提高。
我手头上的正点原子开发板有一个485的接口,使用485转USB的线缆和PC连接,用最简单的方式测试测试单片机和PC的485通信是否可以完成。即写一个printf()
向PC发送数据,看是否能接收到。
首先STM32CubeMX新建工程这块就不赘述,开发板上和RS485驱动芯片连接的是PA2,PA3端口,即USART2。在Cube上配置一下USART2(说是配置,其实都是默认),千万别忘了需要配置PD7端口为GPIO_Output
,它是485驱动芯片的使能端口
PD7 高电平时,485为发送模式,低电平时为接收模式。
接下来在生成的Keil工程里要加上printf的改写,这里又一个重要的点,改写时要用USART2,具体如下:
int fputc(int ch, FILE *p)
{while(!(USART2->SR & (1<<7))); //一定要是USART2,因为485是USART2模块USART2->DR = ch;return ch;
}
使能PD7为高电平,发送模式
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_SET);
然后在while(1)循环中加入
while (1){/* USER CODE END WHILE */printf("rs485 test! \r\n");HAL_Delay(3000);/* USER CODE BEGIN 3 */}
编译烧写后,接上485转换器,然后打开串口调试助手,便可以看到接收到了rs485 test
的字符了。
这是最基本的测试了,可以再深入一些,设计一个既发送又接收的小程序,例如不停发送一串字符,然后开个接收中断,如果接收到了特定字符(例如0x88),则发送一串字符,如果不是0x88,则发送另一串字符。
首先,cubemx里面USART2的中断要使能,其他无需修改,再generate一下代码。
在main.c里添加中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(0x88 == RxByte){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); //发送模式printf("yes it is!\r\n");}else{HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); //send modeprintf("No it is not!\r\n");}HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); //进入接收模式HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxByte, 1); //重新使能串口接收中断
}
也需要在在while(1)
之前开启中断
HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxByte, 1);
在while(1)
中加入不停发送的字符
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET); //send mode
printf("rs485 test \r\n");
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET); //receive mode
HAL_Delay(3000);
调试效果良好,可以看到在串口调试助手里的结果
STM32自学笔记-6-RS485串口通信相关推荐
- STM32学习笔记7(串口通信)
一.简介 1.电平标准 2.串口参数及时序 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口.它由起始位.数据位.校验位以及停止位组成,通讯双方的数据包格式要约定一致才 ...
- STM32学习笔记(四 串口通信 3 串口寄存器库函数配置)
一.常用的串口寄存器 USART_SR状态寄存器 作用: 状态寄存器适用于检测串口此时所处的状态. 主要关注两个位:RXNE和TC(第5.6两位). RXNE(读数据寄存器非空): 当该位被置1的时候 ...
- python实现485通讯_Python编程实现USB转RS485串口通信
---作者疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:Python编程实 ...
- 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- Proteus仿真stm32和51单片机,串口通信调试过程记录
前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法. 这里要注意的是,在Proteus中 ...
- linux gpio 模拟串口,STM32的GPIO口模拟串口通信.rar
[实例简介] 利用GPIO.EXTI外部中断.TIM定时器实现URAT串口,该例子来自21IC网,未做改动,明天自己调试,看看效果 完全是根据UART协议编写 [实例截图] [核心代码] STM32的 ...
- stm32学习笔记-9 USART串口
9 USART串口 文章目录 9 USART串口 9.1 串口通信协议 9.2 stm32的片上外设-USART 9.3 USART收发相关实验 9.3.1 实验1:串口发送 9.3.2 实验2:移植 ...
- STM32最小核心板F103串口通信USART
文章目录 一.串口协议和RS-232标准,RS232电平与TTL电平的区别,"USB/TTL转232"模块的工作原理 1.串口协议 2.RS-232标准 3.RS232电平与TTL ...
- STM32通过DMA方式实现串口通信
目录 一.DMA工作原理 二.创建工程项目 三.编写代码 1.在main.c写入以下函数 2.main函数中的while循环中写入以下代码 四.编译烧录 1.编译运行 2.烧录结果 五.总结 六.参考 ...
- STM32单片机与Openmv的串口通信
openmv与stm32的串口通信 简谈闲话 Openmv主要代码 STM32单片机的配置 运行效果图片如下 简谈闲话 这两天本人利用周末时间粗略的学习一下openmv的使用,目的是用openmv图像 ...
最新文章
- 2016河北省职称计算机考试试题及答案,2016年最新河北省职称计算机考试试题及答案概要.doc...
- Salesforce - soql 多字段多值过滤查询思路
- 实例:如何设计一款好的Metro UI应用
- IBM的大数据就是返朴归真
- 城市大脑背后的技术有哪些?
- Go语言、Docker 和新技术
- 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?
- C#利用反射实现实体类ListT索引器
- ZooKeeper 3.0.0发行说明
- PHP------继承、多态
- 为什么有些人喜欢用fiddler来抓包?
- 网络编程_手写聊天室_群聊过渡板
- 魔改一波合成大西瓜!代码已开源~
- LSTM实现股票预测
- 14-受控组件和非受控组件使用
- css响应式网页设计:自适应屏幕宽度、移动页面开发技巧
- 第三十六篇:WinUSB调试实例
- 此nvidia驱动程序与此windows版本不兼容
- 序列划分c语言,看懂了这些,你对缠论中的线段划分就基本掌握了!
- mysql汉字拼音缩写查询