打印
[其他ST产品]

求助大佬们看一下我的程序为什么实现不了RS485通信

[复制链接]
493|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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信号相匹配

使用特权

评论回复
5
yangxiaor520| | 2024-8-20 19:45 | 只看该作者
RS485收发器的发送和接收使能是不是弄反了

使用特权

评论回复
6
三生万物| | 2024-10-9 21:23 | 只看该作者
你使用的是PB3啊,所以需要关闭jtag估计才行

使用特权

评论回复
7
淡漠安然| | 2024-10-10 02:00 | 只看该作者
这个使能IO是不是有问题呢?

使用特权

评论回复
8
冰春彩落下| | 2024-10-10 03:00 | 只看该作者
一般情况你可以用逻辑分析仪抓一下波形试试

使用特权

评论回复
9
光辉梦境| | 2024-10-10 04:00 | 只看该作者
可能是需要关闭jtag才行,不然不行

使用特权

评论回复
10
远山寻你| | 2024-10-10 05:00 | 只看该作者
你这个发送485是不是高电平发送啊?

使用特权

评论回复
11
暖了夏天蓝了海| | 2024-10-10 06:00 | 只看该作者
你测测你的使能IO是不是没生效?

使用特权

评论回复
12
江河千里| | 2024-10-10 07:00 | 只看该作者
直接使用全双工的485不用使能端多好啊

使用特权

评论回复
13
别乱了阵脚| | 2024-10-10 08:00 | 只看该作者
这种还得看你电路和485芯片的使能操作的

使用特权

评论回复
14
夜阑风雨| | 2024-10-10 09:00 | 只看该作者
估计是你的IO没对,一般发送是高,接受是低电平吧

使用特权

评论回复
15
一秒落纱| | 2024-10-10 10:00 | 只看该作者
不记得了,你这种定是使能错了,改一下就好了

使用特权

评论回复
16
Stahan| | 2024-10-13 23:51 | 只看该作者
485是有问题吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1501

主题

4497

帖子

6

粉丝