社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 4702|回复: 4

[原创] 移植MicroPython到SensorTile的过程

[复制链接]

6427

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-1-20 00:42:06 | 显示全部楼层 |阅读模式
本帖最后由 dcexpert 于 2017-1-20 00:41 编辑

两周前就应该写这一篇,但是因为各种原因耽误下来。今天晚上,终于抽出时间,将移植过程整理出来。在移植过程中,遇到不少新问题,经过反复研究和测试,终于逐个解决,我将移植的过程写下来,希望给大家一点参考。

大家知道,SensorTile使用的控制器是STM32L476JGY6。在MicroPython的支持开发板中,有NUCLEO_L476RG和STM32L476DISC,它们使用的控制器型号分别是STM32L476RGT6和STM32L476VGT6。STM32L476JGY6和它们的区别不大,因此想象中移植应该是很容易的,但是实际上结果并非如此。

开始的时候,和往常一样,先创建了SensorTile文件夹,并将STM32L476DISC的文件复制过去,然后将MICROPY_HW_BOARD_NAME定义改为SensorTile,将MICROPY_HW_LED1修改为pin_G12。编译后就会发现提示错误,有管脚定义冲突。将UART、I2C、SPI定义中该删除的删除,该修改的进行修改,然后再次编译,这次提示LED1没有定义。查看数据手册,发现PORTG端口正好STM32L476RGT6和STM32L476VGT6上没有,但是其它型号上都存在。micropython是使用ST的HAL进行开发的,因此不会因为型号的变化造成端口没有定义的错误,这个问题应该还是定义上造成的。因为Micropython在开发板的定义部分没有文档,只能自己研究了,经过反复分析和研究,并经过多次测试,终于发现是需要在pins.cvs中定义管脚,所有需要在micropython中使用的引脚、引脚的别名都需要在这里进行定义。在pins.cvs中添加了STM32L476JGY6引脚定义后,编译终于通过了。

使用STM32 ST-LINK Utility下载程序后(注意不能通过DFU方式下载,因为DFU程序对于STM32L476存在bug,在Linux和Windows下都是如此),可以正确识别出pybflash磁盘和串口。打开终端程序,输入pyb.LED(1).toggle(),先试试LED的效果,结果没有变化,这说明PORTG并没有真正工作。虽然micropython可以运行,但是LED不能使用就很不方便,此外蓝牙也是通过PORTG进行驱动的,所以必须解决这个问题。为了解决它,尝试了多种方法,最后发现还是需要深入底层,于是改用C++写测试程序,进一步去分析,最终找出了是因为在STM32L476中,PORTG需要额外使用VddIO2才能驱动。具体的过程可以参考这一篇帖子:【sensorTile】使用Mbed进行程序开发的问题及解决。将相关代码加入到MicroPython的底层驱动后,LED终于可以使用了。后来在我建议下,官方代码中也加入了对STM32L476的PORTG支持。

下一步就是传感器的驱动了,这部分还没有来得及开始测试,不过看原理图中,SensorTile在内部传感器上使用了半双工(3-Wire)模式的SPI方式,而没有使用I2C接口。这可能是为了更快的访问传感器,降低功耗。但是遗憾的是MicroPython目前还不支持这个模式,看来还需要继续研究了。等解决了这个问题,再继续和大家分享。

pins.cvs的定义:
  1. PA0,PA0
  2. PA1,PA1
  3. PA2,PA2
  4. PA3,PA3
  5. PA4,PA4
  6. PA5,PA5
  7. PA6,PA6
  8. PA7,PA7
  9. PA8,PA8
  10. PA9,PA9
  11. PA10,PA10
  12. PA11,PA11
  13. PA12,PA12
  14. PA15,PA15
  15. PB0,PB0
  16. PB1,PB1
  17. PB2,PB2
  18. PB3,PB3
  19. PB4,PB4
  20. PB5,PB5
  21. PB6,PB6
  22. PB7,PB7
  23. PB8,PB8
  24. PB9,PB9
  25. PB10,PB10
  26. PB11,PB11
  27. PB12,PB12
  28. PB13,PB13
  29. PB14,PB14
  30. PB15,PB15
  31. PC0,PC0
  32. PC1,PC1
  33. PC2,PC2
  34. PC3,PC3
  35. PC4,PC4
  36. PC5,PC5
  37. PC6,PC6
  38. PC7,PC7
  39. PC8,PC8
  40. PC9,PC9
  41. PC10,PC10
  42. PC11,PC11
  43. PC12,PC12
  44. PC13,PC13
  45. PC14,PC14
  46. PC15,PC15
  47. PD2,PD2
  48. PG9,PG9
  49. PG10,PG10
  50. PG11,PG11
  51. PG12,PG12
  52. PG13,PG13
  53. PG14,PG14
  54. PH0,PH0
  55. PH1,PH1
  56. LED_RED,PG12
  57. LED_GREEN,PG12
  58. LED_YELLOW,PG12
  59. LED_BLUE,PG12
复制代码


mpconfigboard.h
  1. #define MICROPY_HW_BOARD_NAME       "SensorTile"
  2. #define MICROPY_HW_MCU_NAME         "STM32L476JG"

  3. #define MICROPY_HW_HAS_SWITCH       (0)
  4. #define MICROPY_HW_HAS_FLASH        (1)
  5. #define MICROPY_HW_HAS_SDCARD       (0)
  6. #define MICROPY_HW_HAS_LCD          (0)
  7. #define MICROPY_HW_ENABLE_RTC       (1)

  8. // MSI is used and is 4MHz
  9. #define MICROPY_HW_CLK_PLLM (1)
  10. #define MICROPY_HW_CLK_PLLN (40)
  11. #define MICROPY_HW_CLK_PLLR (2)
  12. #define MICROPY_HW_CLK_PLLP (7)
  13. #define MICROPY_HW_CLK_PLLQ (4)

  14. // UART config
  15. /*
  16. #define MICROPY_HW_UART2_TX     (pin_A2)
  17. #define MICROPY_HW_UART2_RX     (pin_A3)

  18. #define MICROPY_HW_UART_REPL        PYB_UART_2
  19. #define MICROPY_HW_UART_REPL_BAUD   115200
  20. */
  21. #define MICROPY_HW_I2C_BAUDRATE_TIMING  {{100000, 0x90112626}}
  22. #define MICROPY_HW_I2C_BAUDRATE_DEFAULT 100000
  23. #define MICROPY_HW_I2C_BAUDRATE_MAX     100000

  24. #define MICROPY_HW_FLASH_LATENCY    FLASH_LATENCY_4

  25. // I2C busses
  26. /*
  27. #define MICROPY_HW_I2C1_SCL (pin_B6)
  28. #define MICROPY_HW_I2C1_SDA (pin_B7)
  29. #define MICROPY_HW_I2C2_SCL (pin_B10)
  30. #define MICROPY_HW_I2C2_SDA (pin_B11)
  31. */
  32. #define MICROPY_HW_I2C3_SCL (pin_C0)
  33. #define MICROPY_HW_I2C3_SDA (pin_C1)

  34. // SPI busses
  35. /*
  36. #define MICROPY_HW_SPI1_NSS     (pin_A4)
  37. #define MICROPY_HW_SPI1_SCK     (pin_B3)
  38. #define MICROPY_HW_SPI1_MISO    (pin_B4)
  39. #define MICROPY_HW_SPI1_MOSI    (pin_B5)
  40. */
  41. #define MICROPY_HW_SPI2_NSS     (pin_B12)
  42. #define MICROPY_HW_SPI2_SCK     (pin_B13)
  43. #define MICROPY_HW_SPI2_MISO    (pin_B14)
  44. #define MICROPY_HW_SPI2_MOSI    (pin_B15)

  45. #define MICROPY_HW_SPI3_NSS     (pin_G12)
  46. #define MICROPY_HW_SPI3_SCK     (pin_G9)
  47. #define MICROPY_HW_SPI3_MISO    (pin_G10)
  48. #define MICROPY_HW_SPI3_MOSI    (pin_G11)

  49. // USRSW is pulled low. Pressing the button makes the input go high.
  50. /*
  51. #define MICROPY_HW_USRSW_PIN        (pin_C13)
  52. #define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)
  53. #define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_FALLING)
  54. #define MICROPY_HW_USRSW_PRESSED    (0)
  55. */
  56. // LEDs
  57. #define MICROPY_HW_LED1             (pin_G12) // orange LED
  58. #define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_high(pin))
  59. #define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_low(pin))
复制代码






回复

使用道具 举报

2万

TA的帖子

74

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-1-20 11:43:03 | 显示全部楼层
哇  赞详细
2017,加油!继续为中国电子行业做出小小的贡献吧!
QQ 1206973913


回复

使用道具 举报

55

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-9-3 00:48:17 | 显示全部楼层
精华,详细,牛
欢迎使用长电科技二三极管:
二三极管,MOS管/TVS管/晶振等。
原厂直供,货真价实,量大从优。
欢迎QQ2714352007


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-9-11 10:05:31 | 显示全部楼层
不明觉历

点评

请看这一篇吧,完整的过程: http://bbs.eeworld.com.cn/thread-529142-1-1.html  详情 回复 发表于 2017-9-11 10:15
导热材料供应商www.xyx-tech.com,wx:15625221234


回复

使用道具 举报

6427

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-9-11 10:15:40 | 显示全部楼层


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-2-24 08:08 , Processed in 0.152297 second(s), 16 queries , Redis On.

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