3852|6

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于 stm32的pyboard 使用SPI Flash 与 callback 问题 [复制链接]

 
SPI Flash
pyboard  stm32  版本的 ,搜了一下 官方论坛与本坛均没有人成功使用SPI Flash 作为外部储存呢 ?

感觉SD卡不够靠谱 ,为什么没人去尝试使用呢? 在官方论坛只找到一个帖子有讨论 ,但是最后也是没有做出来 。


Callback

最近在尝试使用按键的外部中断对IO进行控制,
通过 USR按键自带的pyb.Switch() 与 ExtInt 中断的callback 均不能正常调用函数 .
从代码可以看到 ,我已经使用了各种方式进行回调 , 但是均不成功.在论坛上想搜一下别人使用过的回调 但是也很小有人这样用

问题代码如下:
  1. import pyb
  2. from pyb import Pin, ExtInt
  3. import micropython
  4. micropython.alloc_emergency_exception_buf(100)


  5. def reverse(binary):
  6.     tmp = ''
  7.     for s in reversed(binary):
  8.         tmp += s
  9.     return tmp

  10. def binary_incremental(binary):
  11.     bits = len(binary)

  12.     to_int = int(binary, 2)
  13.     to_int += 1

  14.     to_bin = '{0:>0{width}b}'.format(to_int, width=bits)

  15.     return to_bin

  16. def adder(binary):
  17.     # b = reverse(binary)
  18.     b = binary
  19.     CS = b[:2]
  20.     COUNT = b[2:]

  21.     if COUNT == '0111' and CS == '01':
  22.         CS = '10'
  23.         COUNT = '0000'
  24.         return (CS + COUNT)
  25.     if COUNT == '1111':
  26.         CS = reverse(CS)
  27.         COUNT = '0000'
  28.         return (CS + COUNT)

  29.     COUNT = binary_incremental(COUNT)
  30.    
  31.     result = CS + COUNT
  32.     # pyb.LED(3).toggle()
  33.     return result

  34. def adder_callback(line):
  35.     global COUNT
  36.     COUNT = adder(COUNT)
  37.     print(COUNT)
  38.     pyb.LED(2).toggle()

  39. COUNT = '100000'
  40. sw = pyb.Switch()
  41. # sw.callback(adder_callback)

  42. #extint = pyb.ExtInt(Pin("X17"), pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, adder_callback)

  43. while True:
  44.     if sw():
  45.         adder_callback(1)
  46.         pyb.delay(1000)

  47. # if __name__ == '__main__':
  48.     # pass
  49.     # IO = '010111'
  50.     # i = 1
  51.     # while IO != '100000':
  52.     #     # IO = '100000'
  53.     #     if i:
  54.     #         print(IO)
  55.     #         i -= 1
  56.     #     IO = subtractor(IO)
  57.     #     print(IO)
  58.    

复制代码



以上代码是 在函数里再调用了其他函数. 以下测试代码没有调用其他函数可以正常运行 :

  1. import pyb
  2. import micropython
  3. micropython.alloc_emergency_exception_buf(100)
  4. global COUNT
  5. COUNT = 0
  6. def adder():
  7.         global COUNT
  8.         COUNT += 1
  9.         print("inside: ", end='')
  10.         print(COUNT)

  11. sw = pyb.Switch()
  12. sw.callback(adder)
复制代码


最新回复

是这样,直接运行是正常的,在中断里就有问题,估计还是micropython本身的问题。  详情 回复 发表于 2016-7-25 21:03
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
测试了一下,感觉和字符串函数有关。
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
我改成用整数就没有问题:

  1. import pyb
  2. from pyb import Pin, ExtInt
  3. import micropython
  4. micropython.alloc_emergency_exception_buf(100)


  5. def reverse(binary):
  6.     tmp = ''
  7.     for s in reversed(binary):
  8.         tmp += s
  9.     return tmp

  10. def binary_incremental(binary):
  11.     bits = len(binary)

  12.     to_int = int(binary, 2)
  13.     to_int += 1

  14.     to_bin = '{0:>0{width}b}'.format(to_int, width=bits)

  15.     return to_bin

  16. def adder(binary):
  17.     b = binary
  18.     CS = b//10000
  19.     COUNT = b%10000

  20.     if COUNT == 0111 and CS == 01:
  21.         CS = 10
  22.         COUNT = 0000
  23.         return (CS*10000 + COUNT)
  24.     if COUNT == 1111:
  25.         #CS = reverse(CS)
  26.         COUNT = 0000
  27.         return (CS*10000 + COUNT)

  28.     #COUNT = binary_incremental(COUNT)
  29.    
  30.     result = CS*10000 + COUNT
  31.     # pyb.LED(3).toggle()
  32.     return result

  33. def adder_callback():
  34.     global COUNT
  35.     COUNT = adder(COUNT)
  36.     print(COUNT)
  37.     pyb.LED(2).toggle()

  38. COUNT = 100000
  39. sw = pyb.Switch()
  40. sw.callback(adder_callback)
复制代码


点评

但是我上面这个代码 如果直接运行 adder(COUNT) 的话在 pyboard 是正常的. 如果 使用回调就会出错 . 我这个是: 后四位 二进制 加法 前两位 双位二进制 只需要作反转  详情 回复 发表于 2016-7-25 19:22
 
 
 

回复

2774

帖子

8

TA的资源

版主

4
 
应该是没有别特别去使用SPI Flash,毕竟,板载有TF卡,有空我也试试看!应该问题不大!

点评

主要是 SD的 如果比较极端的环境可能会出现 针脚氧化的情况 获取SD座 接触不好的 . SPI Flash 我看到官方论坛有相关的例子 ,但是都是没有 实现把 Flash 格式化成文件系统的.  详情 回复 发表于 2016-7-25 19:19
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

5
 
strong161 发表于 2016-7-25 15:21
应该是没有别特别去使用SPI Flash,毕竟,板载有TF卡,有空我也试试看!应该问题不大!


主要是 SD的 如果比较极端的环境可能会出现 针脚氧化的情况 获取SD座 接触不好的 .

SPI Flash 我看到官方论坛有相关的例子 ,但是都是没有 实现把 Flash 格式化成文件系统的.
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

6
 
dcexpert 发表于 2016-7-25 11:52
我改成用整数就没有问题:

但是我顶楼贴的这个代码 如果直接运行 adder(COUNT) 的话在  pyboard 是正常的.

如果 使用回调就会出错 .

我这个是:  

后四位 二进制 加法
前两位 双位二进制 只需要作反转

点评

是这样,直接运行是正常的,在中断里就有问题,估计还是micropython本身的问题。  详情 回复 发表于 2016-7-25 21:03
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
p0we7 发表于 2016-7-25 19:22
但是我顶楼贴的这个代码 如果直接运行 adder(COUNT) 的话在  pyboard 是正常的.

如果 使用回调就会出 ...

是这样,直接运行是正常的,在中断里就有问题,估计还是micropython本身的问题。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表