OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4720|回复: 4

485通信问题,串口助手收到的数据与发的数据不一致

[复制链接]

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2020-6-11
在线时间
26 小时
发表于 2022-4-2 15:12:44 | 显示全部楼层 |阅读模式
10金钱
今天调试485通信,简单测试程序,但是在调试时,使用串口助手收到的数据与发的数据不一致,求大神帮忙看看什么原因(ps:硬件电路可确认没问题)
#define RS485_RX_EN         GPIO_ResetBits(GPIOA , GPIO_Pin_11)          //接收使能
#define RS485_TX_EN         GPIO_SetBits(GPIOA , GPIO_Pin_11)            //发送使能

void RS485_Configuration(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
                USART_InitTypeDef USART_InitStructure;
          NVIC_InitTypeDef NVIC_InitStructure;
       
                //时钟
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA   ,ENABLE);
       
          //收发方向控制引脚配置 供MAX485所用
                GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
                GPIO_Init(GPIOA, &GPIO_InitStructure);

                //Usart1 NVIC 配置
                NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
                NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
       
                //USART1脚位配置
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);                  
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                //USART1配置
                USART_InitStructure.USART_BaudRate =9600;
                USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8个数据位
                USART_InitStructure.USART_StopBits = USART_StopBits_1;//1个停止位
                USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶校验位 USART_Parity_Even;//
                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制失能
                USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送和接受使能
               
                USART_Init(USART1, &USART_InitStructure);        
                //USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口一接收中断  
                USART_Cmd(USART1, ENABLE); //起动串口1
                RS485_RX_EN;

}

void USART_Send1(unsigned char data)
{   
        while((USART1->SR&0X40)==0);
        USART1->DR = data;       
        while((USART1->SR&0X40)==0);//检查发送标志
       
}

//485 tx data
void COM1_Send(unsigned char *send_buff,unsigned int length)
{
                unsigned int i = 0;
       
                 RS485_TX_EN;//使能发送
                delay_ms(2);
                for(i = 0;i < length; i++)
                USART_Send1( send_buff[i]);
                delay_ms(1);
          RS485_RX_EN;//使能接收       
}

//485 tx string
void UART1_SendString(unsigned char* s)
{
        while(*s != '\0')//检测字符串结束符
        {
               
                USART_SendData(USART1 ,*s++);//发送当前字符
                delay_us(1);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
                delay_us(1);
               
        }
}


int main(void)
{       
        u8 data[8]={1,2,3,4,5,6,7,8};
        delay_init();            //延时函数初始化          
        LED_Init();       
        RS485_Configuration();        //初始化RS485
       
        while(1)
        {
                COM1_Send(&data[0],8);
                delay_ms(100);

        }
}




PROGRAM.rar

2.36 MB, 下载次数: 158

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2022-4-2 15:30:35 | 显示全部楼层
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-2 16:03:07 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-4-2 16:04 编辑

收到些啥?发了啥?助手设置的数据位\校验位\停止位是否一致?要注意它是"半双工"哦.
专治疑难杂症
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-4-2 16:59:07 | 显示全部楼层
电脑一侧的AB线是不是接反了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2022-4-3 12:29:48 | 显示全部楼层
需要注意,RE/DE线控制的时机,发现有些485芯片不一样,最好有较好的冗余设计
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表