OpenEdv-开源电子网

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

rs485接不到数据

[复制链接]

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
发表于 2016-4-28 11:56:58 | 显示全部楼层 |阅读模式
10金钱
在调rs485,使用这个主程序在就是收不到15,只能收到00,敢问各位大神是程序问题吗
int main()
{
        u8 g=15;
        rs485_init();
       
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);//PA1是USART使能口
        USART_SendData(USART2,g);       
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        while(1);

}

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

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 15:21:46 | 显示全部楼层
自己排查过可能什么原因吗?
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 15:29:15 | 显示全部楼层
365mcu 发表于 2016-4-28 15:21
自己排查过可能什么原因吗?

毫无头绪,实在想不通为什么返回00,你觉得可能是什么原因
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 15:33:20 | 显示全部楼层
365mcu 发表于 2016-4-28 15:21
自己排查过可能什么原因吗?

关键是用串口调试软件发送数据可以正确接收,但是直接自己赋值发送就不行
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 15:42:54 | 显示全部楼层
zhuri 发表于 2016-4-28 15:33
关键是用串口调试软件发送数据可以正确接收,但是直接自己赋值发送就不行

接收端也是单片机吗?
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 15:47:12 | 显示全部楼层
365mcu 发表于 2016-4-28 15:42
接收端也是单片机吗?

不是啊,是电脑,我用了一个调试软件,通过这个软件给数据可以返回来,可是通过程序直接设定的数就接收00
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 15:52:00 | 显示全部楼层
zhuri 发表于 2016-4-28 15:47
不是啊,是电脑,我用了一个调试软件,通过这个软件给数据可以返回来,可是通过程序直接设定的数就接收00

  GPIO_ResetBits(GPIOA,GPIO_Pin_1);//PA1是USART使能口
        USART_SendData(USART2,g);      

你是要485芯片处于发送状态对吗?
USART_SendData怎么实现的
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 16:05:09 | 显示全部楼层
365mcu 发表于 2016-4-28 15:52
GPIO_ResetBits(GPIOA,GPIO_Pin_1);//PA1是USART使能口
        USART_SendData(USART2,g);      

...

是啊,复位标志位使他处于发送状态,把g内数据通过USART传输给电脑啊
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 16:14:34 | 显示全部楼层
zhuri 发表于 2016-4-28 16:05
是啊,复位标志位使他处于发送状态,把g内数据通过USART传输给电脑啊

程序打包看一下,按逻辑应该不会错的
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 16:15:32 | 显示全部楼层
365mcu 发表于 2016-4-28 15:52
GPIO_ResetBits(GPIOA,GPIO_Pin_1);//PA1是USART使能口
        USART_SendData(USART2,g);      

...

这里是出现了问题,可是改为置位PA1还是返回的00
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-28 16:19:47 | 显示全部楼层
365mcu 发表于 2016-4-28 16:14
程序打包看一下,按逻辑应该不会错的

全套程序

工程模板1.rar

2.3 MB, 下载次数: 76

回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 16:35:03 | 显示全部楼层
zhuri 发表于 2016-4-28 16:15
这里是出现了问题,可是改为置位PA1还是返回的00

那不应该啊,说明是不是根本就没有发出去呢!你修改PA1高低电平之后延时5us再发送试试
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-28 16:45:56 | 显示全部楼层

应该是切换成发送状态没有完成就已经发送完成了导致的,上位机收到的不一定是正式数据把。
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-29 08:37:23 | 显示全部楼层
365mcu 发表于 2016-4-28 16:45
应该是切换成发送状态没有完成就已经发送完成了导致的,上位机收到的不一定是正式数据把。

我增加了延时程序也没什么用,还是接到的是00,而且通过调试软件发送数据,接收回来的会自己增加一个FF
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-4-29 08:59:24 | 显示全部楼层
zhuri 发表于 2016-4-29 08:37
我增加了延时程序也没什么用,还是接到的是00,而且通过调试软件发送数据,接收回来的会自己增加一个FF

波特率9600 8 N 1对的吧!?你可以断点调试看你到底发送了什么数据呢
回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-29 10:30:47 | 显示全部楼层
365mcu 发表于 2016-4-29 08:59
波特率9600 8 N 1对的吧!?你可以断点调试看你到底发送了什么数据呢

int main()
{
        u8 g=15,k=1;
        rs485_init();
        GPIO_Config();
        USART_ClearFlag(USART3,USART_FLAG_TC);
        GPIO_SetBits(GPIOA,GPIO_Pin_1);
        delay_us(15);
        USART_SendData(USART2,g);//·¢Ëíêy¾Y       
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        k=USART_ReceiveData(USART2);
        if(k==0)
        {
                GPIO_SetBits(GPIOE,GPIO_Pin_11);
        }
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        while(1);

}我的主程序变成这样发现可以执行PE11的置位程序,是不是说明我发出去的就是0啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 15:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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