GD32f303之rs485配置

这篇具有很好参考价值的文章主要介绍了GD32f303之rs485配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

        rs485是一种硬件通信接口,USART引脚的TTL电平通过SP485芯片转换为差分信号,+2V~+6V表示"0",- 6V~- 2V表示"1"。RS485有两线制和四线制两种接线,四线制是全双工通讯方式,本文采用两线制半双工通讯方式。文章来源地址https://www.toymoban.com/news/detail-539500.html

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配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机GD32F303RCT6 (Macos环境)开发 (二十)—— 光感芯片veml7700的使用

    1、veml有7个寄存器,每个十六位,见图。 00是config寄存器, 01 02 是中断设置的阈值 03是节能模式的设置 04 是得到的光的亮度值 05是得到的data of whole WHITE 06是中断设置值。 2、我们只测试得到光的亮度值,所以veml寄存器设置如下: 设置gain,integration time ,power save mode ,interrup

    2024年02月04日
    浏览(62)
  • GD32F30x系列---串口通信(USART)基础配置(中断接收模式)

    GD32F30x系列USART数据帧可以通过全双工或半双工、同步或异步进行传输,且支持DMA功能,目前我们这里先不使用DMA,下一节再使用DMA与其对比。 其他的原理与解析就不再赘述,大家可以自行搜索相关资料,要多看数据手册。 1、创建一个usart.c文件和usart.h文件到对应的文件夹中

    2024年02月12日
    浏览(36)
  • STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解 RS485 Modbus协议技术 。本实验是基于STM32F103开发 实现 通过RS-485实现modbus协议。 准备好了吗?开始我的show time。 1、硬件开发准备 主控:STM32F103ZET6 RS485收发器:SP3485P 2、软件开发准备 软件开发使用虚拟机 + VScode + STM32Cub

    2024年02月03日
    浏览(48)
  • 【正点原子STM32】RS485串行通信标准(串口基础协议 和 MODBUS协议、总线连接、通信电路、通信波形图、RS485相关HAL库驱动、RS485配置步骤、)

    一、RS485介绍 二、RS485相关HAL库驱动介绍 三、RS485配置步骤 四、编程实战 五、总结 串口、UART、TTL、RS232、RS422和RS485之间的关系可以如此理解: 串口 :是一个广义术语,通常指的是采用串行通信协议的接口,它可以包括多种具体的物理接口标准和逻辑电平标准。 UART (通用

    2024年04月13日
    浏览(64)
  • STM32CUBUMX配置RS485(中断接收)--保姆级教程

    ———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动,包括ADC、UART、RS485、EEPROM(IIC)、FLASH(SPI)等等。

    2024年02月16日
    浏览(67)
  • STM32CUBUMX配置RS485 modbus STM32(从机)亲测可用

    ———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动,包括ADC、UART、RS485、EEPROM(IIC)、FLASH(SPI)、mod

    2024年02月14日
    浏览(190)
  • GD32F30x系列---CAN通信收发配置

    GD32F30x系列CAN通信配置: 先找到CAN模块时钟时挂载在APB1总线上的,如下图所示: APB1总线的最大频率为60MHz,如下图所示: 根据总线频率可以计算出对应波特率的配置BS1,BS2等; 如果不会计算的话也可以直接使用工具,如下图所示: 这里工具会直接帮你你计算好BS1、BS2、P

    2024年01月19日
    浏览(98)
  • GD32F470之网络lwip+UDP配置+lan8720芯片

    先申明,本栏目用的都是GD32F470芯片240M,软件用的是keil,编写用的是C++(其实和C没有区别). 和STM32的lwip配置大致一样,主要不一样的地方在于 PHY的配置顺序问题,下面会讲到. 我用的是lan8720,所以头文件要修改一下,在gd32f4xx_enet.h中。 把PHY_TYPE改为LAN8700, PHY_ADDRESS改为0, 这是

    2023年04月09日
    浏览(46)
  • STM32之485通信(RS485串口编程)

    目录 1.编程思路 2.代码    USART串口的库函数:    USART_:       AIRCR中断分组设置表:            通过485通信来实现MCU之间的通信,把接收到的数据通过串口助手显示在pc端。第一是对usart1,usart2进行初始化,Usart1负责与串口助手通信,Usart2,485负责进行MCU通信。第二是

    2024年01月18日
    浏览(50)
  • STM32RS485通信

    本章所要实现的功能是:通过操作 KEY_UP 键,STM32F1 的串口 2 将 PC 机发 送过来的数据原封不动的返回给 PC 机串口,同时 DS0 指示灯不断闪烁,提示系 统正常运行。程序框架如下: (1)初始化串口 2,并使能串口接收中断等 (2)编写串口 2 中断函数(将接收到的数据返回出去

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包