打印
[应用相关]

STM32使用HAL库实现RS485通讯(全双工串口)(转载)

[复制链接]
2764|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2018-11-13 12:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、硬件
如下图所示,485芯片链接到单片机的USART2上,但是默认的USART2并不是在PD5和PD6上,这里是需要重映射的。另外PG4作为485收发的控制(在485协议中,RE、DE同时为高电平那么芯片使能发送,如果同时为低电平那么芯片使能接收)

沙发
晓伍|  楼主 | 2018-11-13 12:35 | 只看该作者
二、软件设计
1.软件功能
默认485芯片是接收功能,每隔1s发送一个0x88,如果接收到0x55那么返回0x01,如果接收到的数据不是0x55就返回0x00。
2.CubeMX操作
(1)时钟
(2)调试
注意:这里一定要选择上,否则会导致Jlink无法下载,Cube这里默认是不使能的,那么调试引脚就会被配置成普通IO。
(3)usart2

使用特权

评论回复
板凳
晓伍|  楼主 | 2018-11-13 12:36 | 只看该作者
(4)重映射
(5)配置485芯片使能引脚-PG4
(6)配置时钟,这个要根据具体的芯片与晶振来配置

使用特权

评论回复
地板
晓伍|  楼主 | 2018-11-13 12:36 | 只看该作者
(7)配置串口,这里默认就行
(8)配置串口中断

使用特权

评论回复
5
晓伍|  楼主 | 2018-11-13 12:37 | 只看该作者
(9)配置485收发使能引脚PG4
默认是接收功能,所以是低电平
(10)点击生成工程

使用特权

评论回复
6
晓伍|  楼主 | 2018-11-13 12:37 | 只看该作者
3.软件设计
(1)根据功能,系统要每一秒发送一个0x88出去,那么就在main的while(1)循环中填写如下代码:

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

使用特权

评论回复
7
晓伍|  楼主 | 2018-11-13 12:39 | 只看该作者
(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, 1, 0xFF);
    }
    else
    {
        TxByte = 0x02;
        HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_SET);
        HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
    }
    HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_RESET);  //重新使能串口接收中断
    HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxByte, 1);
}

使用特权

评论回复
8
晓伍|  楼主 | 2018-11-13 12:39 | 只看该作者
(3)默认是要使能485接收的,那么串口接收中断默认应该也是开启的,所以在main函数的while(1)之前添加上下面的代码:


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

使用特权

评论回复
9
晓伍|  楼主 | 2018-11-13 12:39 | 只看该作者
齐活,下载验证:


使用特权

评论回复
10
xiaoqizi| | 2018-11-15 12:54 | 只看该作者
其实对arm来说就是一个uart吧 是吗

使用特权

评论回复
11
晓伍|  楼主 | 2018-11-15 14:48 | 只看该作者
感觉楼上理解的很到位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

3893

帖子

1

粉丝