首先我们需要准备一个USB-485的转接模块。连接方式是单片机串口转486后的485_A直接接模块的A, 485_B直接接模块的B.然后模块的USB接口插在电脑上,电脑上需要有个上位机。然后还有记得供地,供电的话,单片机最好单独供电,不接USB的5V供电。
程序部分我们使用的是串口2,所以一定要先初始化串口2
void RS485_Init(u32 bound) //串口2定义函数
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOD,ENABLE);使能GPIOA,D时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_initStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_PinStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_initStructure);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);
#ifdef EN_USART2_RX
USART_InitStructure.USART_BaudRate=bound;//波特率设置
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity=USART_Parity_No;//奇偶校验位
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式
USART_Init(USART2,&USART_InitStructure);//初始化串口
NVIC_InitStrucure.NVIC_IRQChannel=USART2_IRQn;//使能串口2中断
NVIC_InitStrucure.NVIC_IRQChannelPreemptionPariority=3;
NVIC_InitStrucure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStrucure.NVIC_IRQChannelCmd=ENABLE;//从优先级2级
NVIC_Init(&NVIC_InitStrucure);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
USART_Cmd(USART2,ENABLE);
#endif
RS485_TX_EN=0;
}
接下来配置串口中断,配置完串口中断后,就是写发送 RS485_Send_Data(u8 *buf,u8 len)函数,就是把数据发送给寄存器。和接收RS485_Receive_Data(u8 *buf,u8 len)函数,就是从寄存器里面读数据。
弄完这4个之后,串口就可以用了,我们只需要在主函数里面调用函数RS485_Send_Data(u8 *buf,u8 len)和RS485_Receive_Data(u8 *buf,u8 len)就可以实现收发了。
我们采用串口助手,波特率和代码必须一致,设置成4800,切记一定要点HEX发送,不然会出现屏幕显示和发送内容不一致。选择HEX发送就代表你发送的是纯数据,同时你要保证你发送的数据是两位的,比如7就应该写07;选择ASCII码发送就代表你要发送的是字符串,这时候程序就会一位一位的读。