简介

rs485是一种硬件通信接口,USART引脚的TTL电平通过SP485芯片转换为差分信号,+2V~+6V表示"0",- 6V~- 2V表示"1"。RS485有两线制和四线制两种接线,四线制是全双工通讯方式,本文采用两线制半双工通讯方式。

1 rs485初始化

    //1、USART配置/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOB);/* enable USART clock */rcu_periph_clock_enable(RCU_USART2);/* connect port to USARTx_Tx */gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 );/* connect port to USARTx_Rx */gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);/* USART configure */usart_deinit(USART2);usart_baudrate_set(USART2, 9600U);usart_receive_config(USART2, USART_RECEIVE_ENABLE);        //默认接收使能usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);usart_enable(com);//2、 rs485使能/* enable the RS485_OE clock */rcu_periph_clock_enable(RCU_GPIOC);/* configure led GPIO port */gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);GPIO_BC(GPIOC) = GPIO_PIN_3;    //默认接收使能//3、rs485中断初始化nvic_irq_enable(USART2_IRQn,0, 1U);usart_interrupt_enable(USART2, USART_INT_RBNE);         /* 使能USART2读区非空中断 */  usart_interrupt_enable(USART2, USART_INT_IDLE);         /* 使能USART2空闲中断 */

2 rs485发送数据

//发送数据
int rs485_send_data(uint8_t *buf, uint32_t len)
{   gpio_bit_set(GPIOC,  GPIO_PIN_3);; // 设置为发送模式while(len--){while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)); // 等待发送区为空usart_data_transmit(USART2, *(buf++));          // 发送数据}while(RESET == usart_flag_get(USART2, USART_FLAG_TC));    // 发送完成中断rxcount = 0;      gpio_bit_reset(GPIOC,  GPIO_PIN_3);     // 设置为接收模式return 0;
}

3 中断接收数据

void USART2_IRQHandler(void)
{   if((RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)) && (RESET != usart_flag_get(USART2, USART_FLAG_RBNE)))// 接收到数据{   rxbuffer[rxcount++] = usart_data_receive(USART2);usart_interrupt_flag_clear(USART2, USART_INT_FLAG_RBNE); //清中断标志} else if (RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_IDLE)) {usart_interrupt_flag_clear(USART2, USART_INT_FLAG_IDLE);usart_data_receive(USART2); /* 清除接收完成标志位 */g_rs485_receive_end = 1;     //事件通知接收完成}
}

GD32f303之rs485配置相关推荐

  1. STM32CUBEMX开发GD32F303(14)----IIC之配置OLED

    STM32CUBEMX开发GD32F303.14----IIC之配置OLED 概述 视频教学 csdn课程 样品申请 生成例程 配置时钟树 IIC配置 OLED 参考程序 HAL_I2C_Mem_Wr ...

  2. GD32F303调试小记(三)之IIC(硬件IIC+PCF8563实时时钟)

    前言 前面的文章介绍了在单片机中常用的两种通信协议(USART和SPI),并给出了GD32F303对应的配置流程.这次介绍第三种常见的通信协议IIC.这此使用GD32的硬件IIC通信PCF8563实时 ...

  3. D-MNSV6-X8|D-MNSV7-X16磁导航传感器RS232/RS485(MODBUS-RTU)通讯协议说明

    D-MNSV6-X8|D-MNSV7-X16磁导航传感器是一款支持RS232/RS485(MODBUS-RTU)通讯协议的传感设备,利用集磁道钉的磁场特性研究磁信号检测.车辆与磁道钉之间相对运动于一体 ...

  4. 【Buildroot】学习记录(2)配置注释

    文章目录 一.前言 二.Buildroot目录结构 三.Buildroot配置选项 四.Target options(目标选项) 五.Build options(编译选项) 六.Toolchain(工 ...

  5. S7-1212C AC/DC/DLY作为PN主站通过PROFINET转Modbus RTU网关设备与Micro Logix 140

    S7-1212C AC/DC/DLY作为PN主站通过EnTalk PROFINET Slave – Modbus RTU Master 3 Port RS485网关设备与Micro Logix 140 ...

  6. BACnet MSTP协议485功能测试

    文章目录 BACnet MSTP协议485功能测试 一.命令行运行方法 二.测试工具 1.使用sscom串口助手 2.使用yabe查看结果 三.代码部分 1.包含头文件 2.变量和宏定义 2.RS48 ...

  7. Linux UART驱动分析及测试

    1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面.TTY的层次接口包括TTY应用层.TTY文件层.TTY线路规程层.TTY驱动层.TTY设备驱动层.T ...

  8. Linux内核(一) [ IMX RK ] TTY-UART驱动框架解析

    平台:NXP imx6ull 内核版本:4.1.15 文章目录 一.Linux TTY驱动框架 二.Linux Uart驱动框架 三.UART相关结构体uart_driver(UART驱动结构体) . ...

  9. HaaS506-HD1 RTU快速开始

    一.简介 HaaS506-HD1是一款基于4G-CAT1通信的工业级RTU.         支持一路485.一路232.2路AI.2路DI.2路继电器接口.支持TCP.HTTP.MQTT等多种网络协 ...

最新文章

  1. 虚拟机安装Ubuntu14.04打开FireFox提示Server not found
  2. 汉字为什么能流传至今_女皇武则天自创18个汉字,有17个被废除了,只有这1个字流传至今...
  3. 数论 —— 佩尔方程与连分数
  4. STL map与Boost unordered_map - 有何不可的日志 - 网易博客
  5. 这有一个机器人,粉刷本领强
  6. Loonframework-DAO-Alpha-0.1.0发布
  7. 【ACL 2019】腾讯AI Lab解读三大前沿方向及20篇入选论文
  8. 如何设置高度为1的分隔线
  9. 安卓post 提交图片流和字符数据
  10. 高斯消去法,列主元法,LU分解法python程序
  11. 54、消防控制室的设置要求
  12. Unity Mesh网格编程(三) Shader实现水面或旗帜飘扬效果
  13. 电子商务H5游戏推荐:创意h5消消乐案例模板
  14. 2022危化品企业双重预防机制数字化建设成为迫切任务
  15. C#程序设计之windows应用程序设计基础
  16. 使用UltraISO制作Ubuntu16.04 U盘启动盘
  17. CUDA编程--邻近点查询
  18. MongoDB---数据类型,集合操作
  19. 也碰到了刷新后再闪烁的问题
  20. MySQL5.7.28_03_一张图片带你进阶MySQL

热门文章

  1. 元宇宙游戏新体验,Aquqnee的“P2E”完美平衡
  2. ICASSP2023|达摩院语音实验室入选论文全况速览
  3. P4799 [CEOI2015 Day2]世界冰球锦标赛 (双端搜索)
  4. 飞行机器人专栏(十一)-- 空中机器人综合健康管理系统
  5. 研究生毕业在杭州落户
  6. 设n是一任意自然数,如果n的各位数字反向排列所得的自然数与n相等,则n被称为回文数。 从键盘输入一个5为数字,请编写程序判断这个数字是不是回文数。
  7. 单片机控制发光二极管的显示(2)
  8. 思绪尘埃梦婉花舞,心事微风彩蝶翩跹
  9. 【Android】条形码/二维码扫描——ZXing源码分析及相关jar包导入
  10. 【沐风老师】3dMax一键生成中央空调排风口插件使用教程