5656|20

1万

帖子

25

TA的资源

版主

楼主
 

STM32F7DISC上使用MicroPython的问题 [复制链接]

 周末在STM32F7DISC开发板上折腾MicroPython,遇到了几个问题,看来在STM32F7上的代码还有些bug。目前发现的问题有:

  • DS18B20无法驱动。同样的程序和传感器,在PYBoard上运行正常,在STM32F7DISC上就是无法使用,换了多个GPIO都不行。在小钢炮开发板上也无法驱动,在PYBOARD上也不是每个GPIO都可以。
  • I2C1可以通信,但是读取RTC(DS1307)的数据是错误的。同样的程序在PYBoard上是正常。




最新回复

哦,一般这种时候我都不紧张,因为说明硬件没问题。  详情 回复 发表于 2016-4-22 11:00
点赞 关注
 
 

回复
举报

1297

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
“在PYBOARD上也不是每个GPIO都可以”是指正常程序在pyb上也不是每个IO口都行的?照理说ds18B20只涉及IO口和定时操作,驱动应该是最通用的吧
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
johnrey 发表于 2016-4-18 23:11
“在PYBOARD上也不是每个GPIO都可以”是指正常程序在pyb上也不是每个IO口都行的?照理说ds18B20只涉及IO口 ...

仔细看了看onewire的驱动文件,发现是延时部分有影响。感觉是GPIO的速度在不同板子上不一样,造成的时序上的问题。

在onewire.py中原来定义是:
        self.write_delays = (1, 40, 40, 1)
        self.read_delays = (1, 1, 40)

将它修改为标准时间参数,在STM32F7上就正常了,但是PYBoard上就不行了。。
        self.write_delays = (6, 64, 60, 10)
        self.read_delays = (6, 9, 55)
 
 
 

回复

1297

帖子

2

TA的资源

纯净的硅(中级)

4
 
用udelay做个gpio翻转应该能看出两个板子上udelay的差异吧。这个udelay是用C代码实现的麽?还是不太了解micropython底层的原理
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
johnrey 发表于 2016-4-18 23:33
用udelay做个gpio翻转应该能看出两个板子上udelay的差异吧。这个udelay是用C代码实现的麽?还是不太了解mic ...

还没有看到那么底层。如果是这样,修改起来也比较麻烦。
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

6
 
会不会是系统时钟的不同,您在使用systick,来写delay函数的时候,这个延时的长短就不一样,造成的呢
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
huaiqiao 发表于 2016-4-19 08:54
会不会是系统时钟的不同,您在使用systick,来写delay函数的时候,这个延时的长短就不一样,造成的呢

感觉是解释语言造成的问题。python是解释型的语言,程序需要先由内核解析在执行,这需要一定时间。F7的速度更快,延时就短,而onewire对时序要求很严格,这样容易造成通信故障。
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

8
 
dcexpert 发表于 2016-4-19 09:44
感觉是解释语言造成的问题。python是解释型的语言,程序需要先由内核解析在执行,这需要一定时间。F7的速 ...

是的额,因为你python的那个板子是f4的,f7的板子的系统时钟肯定比它大,所以延时可能会有差异。再就是,您说的onewire的这种,时序要求比较严格,所以加上您说的解释性型的问题和这个时序问题,造成了不能在f7的板子上跑Python吧
 
 
 

回复

1万

帖子

25

TA的资源

版主

9
 
huaiqiao 发表于 2016-4-19 10:25
是的额,因为你python的那个板子是f4的,f7的板子的系统时钟肯定比它大,所以延时可能会有差异。再就是, ...

修改了延时时间后,现在可以跑了。就是在不同板子上,onewire.py需要调整时间,不能通用。
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

10
 
dcexpert 发表于 2016-4-19 10:52
修改了延时时间后,现在可以跑了。就是在不同板子上,onewire.py需要调整时间,不能通用。

哦哦,那就好。您这个调整时间还是在调整延时,还是在根据系统时钟调整,还是说是python解释语言的时间呀。
 
 
 

回复

1万

帖子

25

TA的资源

版主

11
 
huaiqiao 发表于 2016-4-19 11:46
哦哦,那就好。您这个调整时间还是在调整延时,还是在根据系统时钟调整,还是说是python解释语言的时间呀 ...

这个时间是onewire.py中自己设置的时间,它是根据onewire协议来的。和系统时钟无关
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

12
 
dcexpert 发表于 2016-4-19 14:25
这个时间是onewire.py中自己设置的时间,它是根据onewire协议来的。和系统时钟无关

知道了。我以为您这个Python中也要用到systick呢。原来不用啊。
 
 
 

回复

1274

帖子

2

TA的资源

版主

13
 
不一样的处理器,底层还真不好说!
 
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

14
 
F7 和 F4 的固件库,略有差别。。。
直接套用 可能有些东西不能用,,如果想在F7上完美的运行,,python包含的控制 底层的模块文件得重新修改一下。。
期待楼主修改,,,

我不会告诉你,我是伸手党的。
个人签名
分享铸就美好未来。。。




 
 
 

回复

1万

帖子

25

TA的资源

版主

15
 
574433742 发表于 2016-4-21 10:03
F7 和 F4 的固件库,略有差别。。。
直接套用 可能有些东西不能用,,如果想在F7上完美的运行,,python包 ...

这个和用STM32的库不一样,用python基本就应该是通用的。问题应该还在micropython固件。
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

16
 
这个好NX的感觉
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

17
 
时序要注意,I2C的我觉得还可能有别的,但ds18b20这货的时序是比较苛刻的。时间上既有上限又有下限,是比较难拿捏的,特别是对于运行顺序不单纯的环境。python没玩过,但感觉是比裸机C难把握时间的东西
 
 
 

回复

1万

帖子

25

TA的资源

版主

18
 
辛昕 发表于 2016-4-22 00:44
时序要注意,I2C的我觉得还可能有别的,但ds18b20这货的时序是比较苛刻的。时间上既有上限又有下限,是比较 ...

I2C只有STM32F7Disc那个板子有问题,连到外部的DS1307上,返回的数据不对。而同样的程序和DS1307,在小钢炮上是正常的。
 
 
 

回复

1万

帖子

25

TA的资源

版主

19
 
辛昕 发表于 2016-4-22 00:44
时序要注意,I2C的我觉得还可能有别的,但ds18b20这货的时序是比较苛刻的。时间上既有上限又有下限,是比较 ...

比较奇怪的是用i2c.scan()可以正确读取总线上的器件,但是用i2c.send和i2c.recv就是数据不对
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

20
 
dcexpert 发表于 2016-4-22 10:15
比较奇怪的是用i2c.scan()可以正确读取总线上的器件,但是用i2c.send和i2c.recv就是数据不对

哦,一般这种时候我都不紧张,因为说明硬件没问题。
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表