OpenEdv-开源电子网

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

请问UCOSIII系统中可以使用RS485通讯吗?

[复制链接]

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
发表于 2015-12-2 16:29:51 | 显示全部楼层 |阅读模式
5金钱
我现在使用一个探索版一个战舰版,裸机的时候两个板子485通讯正常,但将485程序移植到UCOSIII后,好像就无法调用485函数发送数据了,编译通过,而且之前移植DS18B20程序到系统中也一切正常。求解

最佳答案

查看完整内容[请看2#楼]

谢谢,已经解决了,重写了一遍程序,然后在发送与接收之间多加了50ms的延时,就能正常发送与接收数据了,再次感谢前辈们的指教!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2015-12-2 16:29:52 | 显示全部楼层
落月枫情 发表于 2015-12-18 21:26
发送可以这么搞,接收数据难道不应该放到接收中断中去接收吗?

谢谢,已经解决了,重写了一遍程序,然后在发送与接收之间多加了50ms的延时,就能正常发送与接收数据了,再次感谢前辈们的指教!
回复

使用道具 举报

70

主题

6756

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12979
金钱
12979
注册时间
2012-11-26
在线时间
3786 小时
发表于 2015-12-2 17:25:17 | 显示全部楼层
当然可以,OS只是任务调度,跟你使用什么外部硬件毫无关系
学无止境
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-2 22:43:32 | 显示全部楼层
调试下代码看看了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-12-3 09:17:56 | 显示全部楼层
从你给出的信息无法判定,请描述下异常的细节?
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2015-12-3 09:40:55 | 显示全部楼层
太感谢了!我是一直跟着原子哥的视频学习的,没想到昨晚发的问题今天早上就给了答复,小弟心里真是暖暖的。既然确定在ucosiii中可以使用RS485了,我就再调试一下程序,如果还不行再详细请教各位前辈。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2015-12-3 16:30:26 | 显示全部楼层
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
for(i=0;i<2;i++)
    {
rs485buf_On=0x01;
LCD_ShowxNum(30+i*32,190,rs485buf_On,3,16,0X80); 
     }
 RS485_Send_Data(rs485buf_On,2);
 }

RS485_Receive_Data(rs485buf_Data,&key);
if(key)
{
  if(key>2)key=2;
  for(i=0;i<key;i++)LCD_ShowxNum(30+i*32,230,rs485buf_Data,3,16,0X80); 

  for(i=0;i<2;i++)
  {
    rs485buf_Off=0x02;
    LCD_ShowxNum(30+i*32,190,rs485buf_Off,3,16,0X80); 
  }
RS485_Send_Data(rs485buf_Off,2);
}

这个就是直接移植到探索板ucosiii中RS485的程序。主机探索板,从机战舰板。
逻辑很简单,如果按键按下则主机向从机发送两个字节的数据,然后接收从机发回来的数据,具体函数都是用的原子哥的,我只把数据个数由5个改为2个。
如果不用ucosiii系统,两个板子收发正常。
但移植到ucosiii中,主机就只能接收数据而不能发送数据。
现在排除了硬件问题PG8没有其它元件使用。
请前辈们多多指教

回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2015-12-11 15:52:18 | 显示全部楼层
把RS485函数移植到其它的UCOSIII程序中一切正常,最后确定是我的程序有问题,但还没找到原因。
回复

使用道具 举报

12

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2013-1-5
在线时间
22 小时
发表于 2015-12-18 21:26:59 | 显示全部楼层
发送可以这么搞,接收数据难道不应该放到接收中断中去接收吗?
天道酬勤
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-10 15:46:20 | 显示全部楼层
楼主,你的问题解决了吗,我也遇到同样的问题
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 10:42:53 | 显示全部楼层
风云 发表于 2016-5-10 15:46
楼主,你的问题解决了吗,我也遇到同样的问题

解决啦,你可以尝试在发送数据后,延时50ms左右再接收数据,如果不行,就调整延时时间,还不行的话,就像我,重写一遍程序,不过首先写RS485任务,成功后再写别的,友情提示:不要忘了调度器上锁。
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 14:22:31 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 10:42
解决啦,你可以尝试在发送数据后,延时50ms左右再接收数据,如果不行,就调整延时时间,还不行的话,就像 ...

能借鉴一下你的程序吗,真的很急,帮帮忙
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 14:29:09 | 显示全部楼层
风云 发表于 2016-5-11 14:22
能借鉴一下你的程序吗,真的很急,帮帮忙

没有设么特别的啊
        RS485_Send_Data(rs485buf_On,4);//·¢&#203;í4&#184;&#246;×&#214;&#189;ú μ&#196;&#198;eê&#188;&#195;üá&#238;                       
                OSTimeDlyHMSM(0,0,0,50,OS_OPT_TIME_PERIODIC,&err);//&#209;óê±100ms               
                RS485_Receive_Data(rs485buf,&key);
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 14:30:22 | 显示全部楼层
风云 发表于 2016-5-11 14:22
能借鉴一下你的程序吗,真的很急,帮帮忙

这两个函数都是原子哥的,一点没改,只是加了个延时。
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 14:31:52 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 14:29
没有设么特别的啊
        RS485_Send_Data(rs485buf_On,4);//·¢&#203;í4&#184;&#246;×&#214;&#189;ú μ&# ...

我是放在emwin中的,通过按键发送,接收通过定时器,所以有点不一样
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 14:33:36 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 14:30
这两个函数都是原子哥的,一点没改,只是加了个延时。

买板一个月学习笔记,ucosiii+emwin
http://www.openedv.com/forum.php ... 1&fromuid=56483
(出处: OpenEdv-开源电子网)
参考这个帖子做的,但没做出它的效果
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 14:35:47 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 14:29
没有设么特别的啊
        RS485_Send_Data(rs485buf_On,4);//·¢&#203;í4&#184;&#246;×&#214;&#189;ú μ&# ...

你的程序还在吗,能不能看一下完整程序
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 14:44:49 | 显示全部楼层
风云 发表于 2016-5-11 14:31
我是放在emwin中的,通过按键发送,接收通过定时器,所以有点不一样

我的也有EMWIN啊,接收通过定时器我就不太懂了。建议看看有没有其它任务打断了数据接收。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 14:56:58 | 显示全部楼层
风云 发表于 2016-5-11 14:35
你的程序还在吗,能不能看一下完整程序

不好意思啊,其实我的程序很简单,但涉及到老师,所以不太方便,你可以把你的RS485那部分贴出来,咱们一起看看。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 15:09:29 | 显示全部楼层
风云 发表于 2016-5-11 14:33
买板一个月学习笔记,ucosiii+emwin
http://www.openedv.com/forum.php?mod=viewthread&tid=70591&fromu ...

恩,建议你用JLINK硬件仿真一下了,看看程序有没有进入接收。
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 15:52:23 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 14:56
不好意思啊,其实我的程序很简单,但涉及到老师,所以不太方便,你可以把你的RS485那部分贴出来,咱们一 ...

我的程序485能接受,不能发送,既然你不方便,那你能不能把发送的那块程序截图给我看一下,谢谢了!
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-11 15:54:29 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 15:09
恩,建议你用JLINK硬件仿真一下了,看看程序有没有进入接收。

还有你的485通信那块有没有单独创建一个任务
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 16:20:27 | 显示全部楼层
风云 发表于 2016-5-11 15:54
还有你的485通信那块有没有单独创建一个任务

我的程序没有什么特别的,都是参考原子哥的,没有单独创建任务。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-11 16:20:44 | 显示全部楼层
风云 发表于 2016-5-11 15:54
还有你的485通信那块有没有单独创建一个任务

我的程序没有什么特别的,都是参考原子哥的,没有单独创建任务。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2016-4-21
在线时间
4 小时
发表于 2016-5-13 12:58:51 来自手机 | 显示全部楼层
楼主,请问你的rs485.c和.h文件有改动吗?还是直接复制粘贴之前的库函数中的例程?我和你的做的差不多,遇到了一模一样的问题,求指教,谢谢楼主
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-13 13:37:40 | 显示全部楼层
是直接复制的,目前我也没有其它办法,按我给的最佳答案试试吧。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2016-4-21
在线时间
4 小时
发表于 2016-5-14 17:45:00 | 显示全部楼层
楼主,按你的方法试过了,能够正常接收了,但是发送数据通过电脑监控仍然不正常。。。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-16 09:36:49 | 显示全部楼层
anny_li93 发表于 2016-5-14 17:45
楼主,按你的方法试过了,能够正常接收了,但是发送数据通过电脑监控仍然不正常。。。

发送数据的前后,调度器上锁、解锁了吗?还有,原子哥的板子上,发送、接收引脚之间跨接了一个电阻,有时可能会影响数据的准确性,参考485实验那一章,条件允许的话,把那个电阻去掉试试。
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-16 09:43:58 | 显示全部楼层
anny_li93 发表于 2016-5-14 17:45
楼主,按你的方法试过了,能够正常接收了,但是发送数据通过电脑监控仍然不正常。。。

如果你发送的是固定值,可能需要每次发送前重新赋值,或者定义变量类型为static类型试试。轻易不要干掉那个电阻,我的实验是没有影响的。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2016-4-21
在线时间
4 小时
发表于 2016-5-16 12:57:06 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-16 09:43
如果你发送的是固定值,可能需要每次发送前重新赋值,或者定义变量类型为static类型试试。轻易不要干掉那 ...

谢谢楼主,我调好了,我发送的是固定值,但是通过观测那个电阻对数据并没有影响,是我把初始化的顺序弄错了,按原子的初始化顺序调整了一下就ok啦
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-17 10:12:55 | 显示全部楼层
anny_li93 发表于 2016-5-16 12:57
谢谢楼主,我调好了,我发送的是固定值,但是通过观测那个电阻对数据并没有影响,是我把初始化的顺序弄错 ...

不客气,真正动手去做的人才能遇到问题,也才能成长,加油!
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-19 20:43:54 | 显示全部楼层
anny_li93 发表于 2016-5-16 12:57
谢谢楼主,我调好了,我发送的是固定值,但是通过观测那个电阻对数据并没有影响,是我把初始化的顺序弄错 ...

请问你是不是自己学习用,能不能借鉴一下你的程序
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2016-5-10
在线时间
13 小时
发表于 2016-5-20 10:19:32 | 显示全部楼层
早起的虫儿被鸟吃KKK 发表于 2016-5-11 14:56
不好意思啊,其实我的程序很简单,但涉及到老师,所以不太方便,你可以把你的RS485那部分贴出来,咱们一 ...

OSSchedLock(&err);
RS485_Send_Data(rs485buf,5);//发送5个字节                
OSSchedUnlock(&err);               
楼主,你发送部分是这么写的吗,我按照你说的方法做了一下,能接受,不能发送,不知道怎么回事                                          
回复

使用道具 举报

7

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-12-2
在线时间
25 小时
 楼主| 发表于 2016-5-20 10:49:37 | 显示全部楼层
风云 发表于 2016-5-20 10:19
OSSchedLock(&err);
RS485_Send_Data(rs485buf,5);//发送5个字节                
OSSchedUnlock(&err);               

我没遇到过不能发送的情况啊,建议你好好看看原子哥的教学视频,在原子哥的代码基础上加自己的程序,会很稳妥,扎扎实实的自己写代码,不然出现问题都无从下手。
回复

使用道具 举报

1

主题

29

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2016-4-16
在线时间
282 小时
发表于 2016-5-22 10:44:03 | 显示全部楼层
看到楼上各位的讨论,感觉真好
【有理想】【有道德】【有文化】【有纪律】
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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