一、硬件

如下图所示,485芯片链接到单片机的USART2上,但是默认的USART2并不是在PD5和PD6上,这里是需要重映射的。另外PG4作为485收发的控制(在485协议中,RE、DE同时为高电平那么芯片使能发送,如果同时为低电平那么芯片使能接收)

二、软件设计

1.软件功能

默认485芯片是接收功能,每隔1s发送一个0x88,如果接收到0x55那么返回0x01,如果接收到的数据不是0x55就返回0x00。

2.CubeMX操作

(1)时钟

(2)调试

注意:这里一定要选择上,否则会导致Jlink无法下载,Cube这里默认是不使能的,那么调试引脚就会被配置成普通IO。

(3)usart2

(4)重映射

(5)配置485芯片使能引脚-PG4

(6)配置时钟,这个要根据具体的芯片与晶振来配置

(7)配置串口,这里默认就行

(8)配置串口中断

(9)配置485收发使能引脚PG4

默认是接收功能,所以是低电平

(10)点击生成工程

3.软件设计

(1)根据功能,系统要每一秒发送一个0x88出去,那么就在main的while(1)循环中填写如下代码:

  while ()
{
//将485芯片设置为发送模式
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_SET);
TxByte = 0x88;
//发送数据
HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, , 0xFF);
//将485芯片设置为接收模式
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_Delay();
}

(2)如果接收到0x55那么返回0x01,如果接收到的数据不是0x55就返回0x00。

这里用到中断,写一个中断回调函数如下:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (0x55 == RxByte)
{
TxByte = 0x01;
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_SET);
HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, , 0xFF);
}
else
{
TxByte = 0x02;
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_SET);
HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, , 0xFF);
}
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_RESET);
  //重新使能串口接收中断
HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxByte, );
}

(3)默认是要使能485接收的,那么串口接收中断默认应该也是开启的,所以在main函数的while(1)之前添加上下面的代码:

HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxByte, );

齐活,下载验证:

(7)STM32使用HAL库实现RS485通讯(全双工串口)的更多相关文章

  1. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  2. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  3. (4)STM32使用HAL库实现串口通讯——理论讲解

    一.查询模式 1. 二.中断模式 1.中断接收. 1.1先看中断接收的流程(以 USART2 为例) 在启动文件中找到中断向量 USART2_IRQHandler 找到USART2_IRQHandle ...

  4. (2)STM32使用HAL库操作外部中断——理论讲解

    1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...

  5. STM32之HAL库、标准外设库、LL库(STM32 Embedded Software)-(转载)

    STM32 Embedded Software  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是 ...

  6. STM32基于HAL库通过DMA读写SDIO

    通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...

  7. (1)STM32使用HAL库操作GPIO

    一  初始化GPIO 使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成. 自动生成的HAL库GPIO初始化代码: static void MX_GPIO_Init( ...

  8. stm32 HAL库笔记(一)——串口的操作

    昨天分析了普通io口的使用,和初始化代码流程,回顾一下,首先定义一个配置io口功能的结构体,然后开启时钟,再去配置这个结构体里面的各个成员变量,每个成员变量都有很多种选择,可以看各个成员变量 后面的注 ...

  9. STM32 关于HAL库硬件SPI要注意的问题总结

    利用STM32CUbeMx编写程序,大大方便了开发,最近做的项目利用到了 STM32CUbeMx的硬件SP,这里对SPI的使用做一个总结. HAL库里的硬件SPI主要有以下几个库函数: /* hspi ...

随机推荐

  1. 解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列

    本节内容 1.迭代器协议与for循环 2.三元表达式 3.解压序列 4.列表解析 5.生成器 迭代器协议与for循环 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中下一项, ...

  2. gitolite服务器部署中的一些坑

    1.秘钥登录问题可参考< 安装gitolite,并ssh公钥无密码登录>http://www.cnblogs.com/tr0217/p/4517952.html,该文中推荐了阮一峰的< ...

  3. [译文]Domain Driven Design Reference(一)—— 前言

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. DDD到目前为止知 ...

  4. Asp.Net WebApi Swagger终极搭建

    [PS:原文手打,转载说明出处,博客园] 关于为什么用Swagger 目前稍微有点规模的公司,已经从原先的瀑布流开发到了敏捷开发,实现前后端分离,为此后端工程师只关注写好Api即可,那程序员最讨厌的就 ...

  5. hadoop is running beyond virtual memory limits问题解决

    单机搭建了2.6.5的伪分布式集群,写了一个tf-idf计算程序,分词用的是结巴分词,使用standalone模式运行没有任何问题,切换到伪分布式模式运行一直报错: hadoop is running ...

  6. Zookeeper + Dubbo + SpringMVC + dubbo-admin

    第一步:在CentOS/Windows上安装Zookeeper[前提] A:CentOS     Zookeeper作为Dubbo服务的注册中心,Dubbo原先基于数据库的注册中心,没采用Zookee ...

  7. htmlparser 学习

    htmlparser 学习系列 htmlparser 使用法使用与详解

  8. gawk编程语言

    gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...

  9. tomcat启动报错:Address already in use: JVM_Bind

    tomcat启动时出现Address already in use: JVM_Bind 的原因是因为端口被占用,有可能是因为多次启动tomcat或者启动了多个tomcat,或者是其他应用程序或者服务占 ...

  10. spring cloud 入门系列七:基于Git存储的分布式配置中心

    我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.它用来为 ...