STM32F103系列的485通讯实现

首先我们需要准备一个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码发送就代表你要发送的是字符串,这时候程序就会一位一位的读。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值