GD32f303之rs485配置
简介
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配置相关推荐
- STM32CUBEMX开发GD32F303(14)----IIC之配置OLED
STM32CUBEMX开发GD32F303.14----IIC之配置OLED 概述 视频教学 csdn课程 样品申请 生成例程 配置时钟树 IIC配置 OLED 参考程序 HAL_I2C_Mem_Wr ...
- GD32F303调试小记(三)之IIC(硬件IIC+PCF8563实时时钟)
前言 前面的文章介绍了在单片机中常用的两种通信协议(USART和SPI),并给出了GD32F303对应的配置流程.这次介绍第三种常见的通信协议IIC.这此使用GD32的硬件IIC通信PCF8563实时 ...
- D-MNSV6-X8|D-MNSV7-X16磁导航传感器RS232/RS485(MODBUS-RTU)通讯协议说明
D-MNSV6-X8|D-MNSV7-X16磁导航传感器是一款支持RS232/RS485(MODBUS-RTU)通讯协议的传感设备,利用集磁道钉的磁场特性研究磁信号检测.车辆与磁道钉之间相对运动于一体 ...
- 【Buildroot】学习记录(2)配置注释
文章目录 一.前言 二.Buildroot目录结构 三.Buildroot配置选项 四.Target options(目标选项) 五.Build options(编译选项) 六.Toolchain(工 ...
- 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 ...
- BACnet MSTP协议485功能测试
文章目录 BACnet MSTP协议485功能测试 一.命令行运行方法 二.测试工具 1.使用sscom串口助手 2.使用yabe查看结果 三.代码部分 1.包含头文件 2.变量和宏定义 2.RS48 ...
- Linux UART驱动分析及测试
1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面.TTY的层次接口包括TTY应用层.TTY文件层.TTY线路规程层.TTY驱动层.TTY设备驱动层.T ...
- Linux内核(一) [ IMX RK ] TTY-UART驱动框架解析
平台:NXP imx6ull 内核版本:4.1.15 文章目录 一.Linux TTY驱动框架 二.Linux Uart驱动框架 三.UART相关结构体uart_driver(UART驱动结构体) . ...
- HaaS506-HD1 RTU快速开始
一.简介 HaaS506-HD1是一款基于4G-CAT1通信的工业级RTU. 支持一路485.一路232.2路AI.2路DI.2路继电器接口.支持TCP.HTTP.MQTT等多种网络协 ...
最新文章
- Microsoft .NET Pet Shop 4 架构与技术分析
- Mock session,cookie,querystring in ASB.NET MVC
- 理解I/O Completion Port(完成端口)
- WHUST 2015 Summer Contest #11
- MySQL中INSERT IGNORE INTO和REPLACE INTO的使用
- 微信小程序获取用户手机号--官方示例
- Linux 进程、父进程、子进程
- php mysql 实现原理_PHP底层和mysql的通信原理
- idea maven插件tomcat内存溢出
- ionic4页面常用判断
- 仿抖音上下滑动播放视频
- GPX格式地图轨迹生成python
- 分枝定界法matlab,分支定界法 求混合0-1规划问题
- iptable 帮助
- 免安装mysql_免安装版的Mysql
- swift3 下标subscript
- Arduino 用4位共阴数码管造一个计数器
- 进阶持续威胁(APT)与入侵防御系统
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 【Linux操作系统系列】 Linux压缩打包