实验三485通讯

Posted I am Supreme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验三485通讯相关的知识,希望对你有一定的参考价值。

/***************************************************************************//**
  文件: main.c
  版本: V1.0.0
  时间: 202101201
	平台:MINI-GD32F103C8T6开发板


*******************************************************************************/
#include "gd32f10x.h"
#include "gd32f10x_libopt.h"
#include "systick.h"

uint8_t transmitter_buffer[] = "HELLOWORLD";//定义发送数组
uint8_t receiver_buffer[10];//定义接收数组
#define ARRAYNUM(arr_nanme)      (uint32_t)(sizeof(arr_nanme) / sizeof(*(arr_nanme)))
#define TRANSMIT_SIZE   (ARRAYNUM(transmitter_buffer) - 1)//计算大小
uint8_t transfersize = TRANSMIT_SIZE;
uint8_t receivesize = 10;
__IO uint8_t txcount = 0; 
__IO uint16_t rxcount = 0; 

//USART0初始化,使用PB6(TX),PB7(RX)脚,9600波特率,无校验,8位数据,1位停止
void gd_eval_com_init(void)

    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOB);//使能GPIOB时钟

    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);//使能USART0时钟
    gpio_pin_remap_config(GPIO_USART0_REMAP, ENABLE);//PB6,PB7需要重映射 从芯片手册中可以看到PB67是需要REMAP的 它不是默认或者复用状态
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);//PB6输出 推挽输出

    /* configure USART Rx as alternate function push-pull */
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_7);//PB7输入 浮空输入
    /* USART configure */
    usart_deinit(USART0);
    usart_baudrate_set(USART0,9600);	//配置USART波特率
		usart_word_length_set(USART0, USART_WL_8BIT);//配置USART字长
    usart_stop_bit_set(USART0, USART_STB_1BIT);//配置USART停止位
    usart_parity_config(USART0, USART_PM_NONE);//配置USART奇偶校验位
	  usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);//配置USART RTS硬件控制流 除能RTS
    usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);//配置USART CTS硬件控制流 除能RTS
	usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//USART发送器配置
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);//USART接收器配置
    usart_enable(USART0);//使能USART0
		

int main(void)

	rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);//AHB主频是1分频
	systick_config();//系统主频108MHZ,采用外部晶振,由两个宏决定(__SYSTEM_CLOCK_108M_PLL_HXTAL与HXTAL_VALUE)
	rcu_periph_clock_enable(RCU_AF); //管脚复用时钟alternate function clock使能
	delay_1ms(1000);
	//USART相关配置
	gd_eval_com_init();
	nvic_irq_enable(USART0_IRQn, 0, 0);//使能USART0中断
	usart_interrupt_enable(USART0, USART_INT_RBNE);//接收中断打开
	
    while(1)
    
			
			if(rxcount >= receivesize)//接收满10个字节,在USART0_IRQHandler函数中计数 接收到10个字节后 就启动发送
			
				rxcount=0;
				txcount=0;
				usart_interrupt_enable(USART0, USART_INT_TBE);//发送中断打开
				while(txcount < transfersize);//等待发送完成,在USART0_IRQHandler函数中计数
				while (RESET == usart_flag_get(USART0, USART_FLAG_TC));//发送完成判断 发送完成之后 打开中断
				 usart_interrupt_enable(USART0, USART_INT_RBNE);//接收中断打开
			
    


以上是关于实验三485通讯的主要内容,如果未能解决你的问题,请参考以下文章

ttl转485模块rxd常亮

变频器uss通讯(rs232接rs485)的报文发送与应答是怎样的顺序?

2018-10-22 使用SN75176(RS485)通讯与STM32连接发现的问题

RJ45接口的485通讯线制作

RJ45接口的485通讯线制作

能帮我解释下PC机通过rs485串口接收智能电表的数据,具体过程是怎样实现的,谢谢