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串口通信相关推荐

  1. STM32学习笔记7(串口通信)

    一.简介 1.电平标准 2.串口参数及时序 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口.它由起始位.数据位.校验位以及停止位组成,通讯双方的数据包格式要约定一致才 ...

  2. STM32学习笔记(四 串口通信 3 串口寄存器库函数配置)

    一.常用的串口寄存器 USART_SR状态寄存器 作用: 状态寄存器适用于检测串口此时所处的状态. 主要关注两个位:RXNE和TC(第5.6两位). RXNE(读数据寄存器非空): 当该位被置1的时候 ...

  3. python实现485通讯_Python编程实现USB转RS485串口通信

    ---作者疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:Python编程实 ...

  4. 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. Proteus仿真stm32和51单片机,串口通信调试过程记录

    前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法.        这里要注意的是,在Proteus中 ...

  6. linux gpio 模拟串口,STM32的GPIO口模拟串口通信.rar

    [实例简介] 利用GPIO.EXTI外部中断.TIM定时器实现URAT串口,该例子来自21IC网,未做改动,明天自己调试,看看效果 完全是根据UART协议编写 [实例截图] [核心代码] STM32的 ...

  7. stm32学习笔记-9 USART串口

    9 USART串口 文章目录 9 USART串口 9.1 串口通信协议 9.2 stm32的片上外设-USART 9.3 USART收发相关实验 9.3.1 实验1:串口发送 9.3.2 实验2:移植 ...

  8. STM32最小核心板F103串口通信USART

    文章目录 一.串口协议和RS-232标准,RS232电平与TTL电平的区别,"USB/TTL转232"模块的工作原理 1.串口协议 2.RS-232标准 3.RS232电平与TTL ...

  9. STM32通过DMA方式实现串口通信

    目录 一.DMA工作原理 二.创建工程项目 三.编写代码 1.在main.c写入以下函数 2.main函数中的while循环中写入以下代码 四.编译烧录 1.编译运行 2.烧录结果 五.总结 六.参考 ...

  10. STM32单片机与Openmv的串口通信

    openmv与stm32的串口通信 简谈闲话 Openmv主要代码 STM32单片机的配置 运行效果图片如下 简谈闲话 这两天本人利用周末时间粗略的学习一下openmv的使用,目的是用openmv图像 ...

最新文章

  1. 2016河北省职称计算机考试试题及答案,2016年最新河北省职称计算机考试试题及答案概要.doc...
  2. Salesforce - soql 多字段多值过滤查询思路
  3. 实例:如何设计一款好的Metro UI应用
  4. IBM的大数据就是返朴归真
  5. 城市大脑背后的技术有哪些?
  6. Go语言、Docker 和新技术
  7. 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?
  8. C#利用反射实现实体类ListT索引器
  9. ZooKeeper 3.0.0发行说明
  10. PHP------继承、多态
  11. 为什么有些人喜欢用fiddler来抓包?
  12. 网络编程_手写聊天室_群聊过渡板
  13. 魔改一波合成大西瓜!代码已开源~
  14. LSTM实现股票预测
  15. 14-受控组件和非受控组件使用
  16. css响应式网页设计:自适应屏幕宽度、移动页面开发技巧
  17. 第三十六篇:WinUSB调试实例
  18. 此nvidia驱动程序与此windows版本不兼容
  19. 序列划分c语言,看懂了这些,你对缠论中的线段划分就基本掌握了!
  20. mysql汉字拼音缩写查询

热门文章

  1. 【Unity开发小技巧】FMS有限状态机详解
  2. 小睿睿的伤害(树上启发式合并)
  3. 2022年工业软件行业报告:激光加工体系之脑,产业链盈利效率之巅
  4. C# 利用PrintDocument定制打印单据
  5. 线性代数笔记-3Blue1Brown:(一)
  6. 【2023版】超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了
  7. 机房收费系统——用户类型
  8. 国标BAL 13-3铝白铜棒 BAL 13-3性能
  9. Unity Fog 原理 源码分析 案例
  10. 2022腾讯前端实习生笔试题与部分详细题解