[其他ST产品] 求助大佬们看一下我的程序为什么实现不了RS485通信

[复制链接]
 楼主| jcky001 发表于 2024-8-20 16:34 | 显示全部楼层 |阅读模式
我这个是STM32F103通过串口2、RSM3485CT发送信息,为什么USB转RS485插上之后电脑收不到我发送的信息啊,求助求助,搞不明白

这是初始化代码:

void Usart_Init(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
   
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
   
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
   
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART2,&USART_InitStructure);
   
   
   
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
   
    USART_ClearFlag(USART2,USART_FLAG_TC);
    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
    USART_Cmd(USART2,ENABLE);
}
这是发送数据的代码:

void RS485_SendData(uint8_t *data, uint16_t len)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_3);
   
    for (uint16_t i = 0; i < len; i++)
    {
        while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
        USART_SendData(USART2, data[i]);
    }
   
    while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
   
}
这是main中的代码:
int main(void)
{
uint8_t txData[] = "Hello RS485!";

Usart_Init();

while (1)
{
    RS485_SendData(txData, sizeof(txData) - 1);
    Delay_ms(2);
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
}
呐咯密密 发表于 2024-8-20 17:05 | 显示全部楼层
发送的时候应该拉高485的使能吧
powerantone 发表于 2024-8-20 19:30 | 显示全部楼层
检查所有连接是否牢固,没有接触不良或短路。
laocuo1142 发表于 2024-8-20 19:31 | 显示全部楼层
使用示波器或逻辑分析仪检查USART2的TX引脚是否有信号输出,并且该信号是否与预期的RS485信号相匹配
yangxiaor520 发表于 2024-8-20 19:45 来自手机 | 显示全部楼层
RS485收发器的发送和接收使能是不是弄反了
三生万物 发表于 2024-10-9 21:23 | 显示全部楼层
你使用的是PB3啊,所以需要关闭jtag估计才行
淡漠安然 发表于 2024-10-10 02:00 | 显示全部楼层
这个使能IO是不是有问题呢?

冰春彩落下 发表于 2024-10-10 03:00 | 显示全部楼层
一般情况你可以用逻辑分析仪抓一下波形试试

光辉梦境 发表于 2024-10-10 04:00 | 显示全部楼层
可能是需要关闭jtag才行,不然不行

远山寻你 发表于 2024-10-10 05:00 | 显示全部楼层
你这个发送485是不是高电平发送啊?

暖了夏天蓝了海 发表于 2024-10-10 06:00 | 显示全部楼层
你测测你的使能IO是不是没生效?

江河千里 发表于 2024-10-10 07:00 | 显示全部楼层
直接使用全双工的485不用使能端多好啊

别乱了阵脚 发表于 2024-10-10 08:00 | 显示全部楼层
这种还得看你电路和485芯片的使能操作的

夜阑风雨 发表于 2024-10-10 09:00 | 显示全部楼层
估计是你的IO没对,一般发送是高,接受是低电平吧

一秒落纱 发表于 2024-10-10 10:00 | 显示全部楼层
不记得了,你这种定是使能错了,改一下就好了

Stahan 发表于 2024-10-13 23:51 | 显示全部楼层
485是有问题吗
flycamelaaa 发表于 2024-12-31 12:35 | 显示全部楼层
硬件连接问题?
probedog 发表于 2024-12-31 12:37 | 显示全部楼层
使用逻辑分析仪或示波器检查串口2的TX引脚是否有信号输出,并且该信号是否与预期的RS485信号相匹配。
两只袜子 发表于 2024-12-31 12:38 | 显示全部楼层
电脑端串口软件配置是否有问题
cr315 发表于 2024-12-31 12:40 | 显示全部楼层
检查RS485总线上的信号质量有没有信号反射或衰减导致的通信问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1636

主题

5575

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部