你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

移植 编译MicroPython到自己的板子

[复制链接]
codysafe 发布时间:2018-7-24 13:52
记录下为自己的板子编译MicroPython的过程。5 F5 G% h: ?; ]* t1 W
, v1 g* T# E2 m
1、搭建环境
* b* H8 p$ ~6 Y9 ]. X9 ?3 N下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。
4 b0 a" b9 z3 v8 }. P下载gcc-arm-none-eabi,
8 p3 v$ |1 W4 L/ ^9 _在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加
3 \! b! v' N3 M% X0 w9 {# uexport PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH9 \  L3 t5 a- v$ H+ s/ }& H7 U. p# L% r
保存,重新打开msys2.exe使配置生效。
  \1 J0 D6 N8 W& }! q1 j. d3 k8 e6 A- C7 p
下载源码。$ git clone --recursive http://github.com/micropython/micropython.git
/ c- f; L& Y; _' V! }- y! f完成时如下' N$ e6 _3 k; s& o' f( g

$ h. m; ~$ r  Z% |5 E* r( c/ J+ _$ D( ?. R4 @: |  |) s* v
打开D:\msys32\home\Administrator (换成自己的目录)1 k; [( _6 \& Z
会多出一个micropython 的文件夹,里面就是所有源码了。, L6 [# }) d" K# E

% P* A( }4 E. }# N2 _' U) t$ m2、移植( S8 A7 w) L3 l% b& Z
打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。
! F& K  B  Q* y, z) {7 O) S7 @
9 H& {* j, }: o; b% }# Cmpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。
' o/ L/ h: C  A( J#define MICROPY_HW_BOARD_NAME       "F407"/ ?8 C9 G1 p1 b% Q; g& r6 w
#define MICROPY_HW_MCU_NAME         "STM32F407"
2 v# Y! J+ V4 @/ _& ]+ r$ F
$ G4 P+ S+ E! j#define MICROPY_HW_HAS_SWITCH       (1)
, r& }6 K& \# I7 w#define MICROPY_HW_HAS_FLASH        (1)% X( g. m5 V  ^! U
#define MICROPY_HW_ENABLE_RNG       (1): l8 M$ [* Y, o; k- Q2 M
#define MICROPY_HW_ENABLE_RTC       (0)
7 b9 c, {8 ]- l4 L2 `: l#define MICROPY_HW_ENABLE_DAC       (1)
# Z5 D4 i6 W0 X+ s, g7 N& X, o( X#define MICROPY_HW_ENABLE_USB       (1), v- B  K* h# r' Q( T$ x, T
#define MICROPY_HW_HAS_SDCARD       (1)
* a/ m) _7 F$ I  v  b3 \7 u+ w0 n# H7 u& N) @* A6 q" P
// HSE is 8MHz
" i6 t  g8 j; |5 g" }7 ?#define MICROPY_HW_CLK_PLLM (25)& F8 l4 _; c' |& x
#define MICROPY_HW_CLK_PLLN (336)! I! M# r7 ~& X7 X; \; D
#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)  h( T# c: e9 h) C3 a& l' I6 p
#define MICROPY_HW_CLK_PLLQ (7)& X; `& ?( Z9 D5 {

8 v- Q. E! C  l  _// UART config2 _5 d3 t# Y1 g6 Y4 g! v, Z

, g3 T$ O0 `6 z/ c! a6 m// A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.
  ^0 p( J- {; f1 w! |: o// UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line.+ B5 Q3 \0 @2 h' o$ Y- X* j
// Without board modifications, this makes UART1 unusable on this board.
; f& |9 s+ g7 _: V- _#define MICROPY_HW_UART1_TX     (pin_A9)
0 z- A/ o0 j7 W% ~$ l, L. O#define MICROPY_HW_UART1_RX     (pin_A10)( S+ h' I8 p& H& e( L, u

) m: S5 c  a9 x1 H4 y#define MICROPY_HW_UART2_TX     (pin_A2)
* F4 B- Y. r7 D% H! }#define MICROPY_HW_UART2_RX     (pin_A3)" m4 Z4 s4 f4 e  H& i8 h
' i8 v/ j3 P4 K
#define MICROPY_HW_UART3_TX     (pin_D8)
( d0 T% Y: A" j, g/ N. W#define MICROPY_HW_UART3_RX     (pin_D9)
. M6 }0 }; K5 I9 A; ~
) x, [  L, W9 N. W: \. E6 d" E$ S9 |: K3 p
// NOTE: A0 also connects to the user switch. To use UART4 you should
( z1 E: H) {# X& ^! R+ W" A//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back
4 C7 M" {4 M; n8 v6 R//       of the board near the USER switch).
3 i& O5 [( o& Y" G0 r: M. v#define MICROPY_HW_UART4_TX     (pin_A0)- ^5 I1 @& K# J0 t
#define MICROPY_HW_UART4_RX     (pin_A1)
. g; j* t1 a4 }1 F( J0 b% b  D# G; t) y: h# V0 G- d7 @
// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
* q0 E9 d0 x6 P. z& K+ H3 }//       so I think as long as you're not using the audio chip then it should9 P7 K( Q. i; }: j# C. {6 f
//       be fine to use as a UART pin.& f4 H3 R, H0 @0 t" v
! |- n) U( q1 M- t0 r5 _
! Q4 n; i- ~3 S8 F4 K& v6 }
// I2C busses
* V- B: ~$ |, _2 ?#define MICROPY_HW_I2C1_SCL (pin_B6)# i0 y$ v: m# m2 q3 K! [* X4 |
#define MICROPY_HW_I2C1_SDA (pin_B7)4 T  t4 D6 Q4 `. N8 _$ N8 Y

% S4 K+ ^( U& v; {; l: ~9 y
% X0 Y# q$ B: @// SPI busses
0 i9 X2 {& f% L#define MICROPY_HW_SPI1_NSS  (pin_A4)9 i* o& y. m: {* m. T0 P8 j+ @2 u
#define MICROPY_HW_SPI1_SCK  (pin_A5)
9 j$ Q0 S8 b3 z" z! G( R! k#define MICROPY_HW_SPI1_MISO (pin_A6)' n5 g2 ?& z1 |1 x: a# e
#define MICROPY_HW_SPI1_MOSI (pin_A7)
& @1 T3 |/ v6 D#define MICROPY_HW_SPI3_NSS  (pin_A15)+ ?- i& D% }! y; E, H) V" l. K$ e
#define MICROPY_HW_SPI3_SCK  (pin_B3)
" z# ~0 H0 {, a8 w#define MICROPY_HW_SPI3_MISO (pin_B4)# ~/ D$ o" q$ ~' N6 I5 \4 x
#define MICROPY_HW_SPI3_MOSI (pin_B5)- h* ?7 |4 @( R+ }6 M6 Y0 {

* M6 a3 q* h( R4 t: k8 B' ^, R7 f// CAN busses
% r' r! j& X! N0 L, [#define MICROPY_HW_CAN1_TX (pin_B9)6 ^. D+ ^; V) S4 Z
#define MICROPY_HW_CAN1_RX (pin_B8)! i" O" J. L2 E& u% t" }- F% U

+ u. @  y6 {9 p8 C) {) v: h  i+ s* b- A3 V% K, b
// USRSW is pulled low. Pressing the button makes the input go high.
1 D! N5 U7 g" M' b0 t" J#define MICROPY_HW_USRSW_PIN        (pin_C0)
& R4 d1 a5 P  ~. I#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL); Y6 h9 y6 ]4 Q/ `9 C2 s; s* z
#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)
! M( Z, i3 o1 O* O& Q" |$ A* N#define MICROPY_HW_USRSW_PRESSED    (1)
' b. I/ D4 N+ n& C! f4 ]; Z% N& e0 V- j; T
// LEDs
1 Y* N5 ^. a6 H( J- r#define MICROPY_HW_LED1             (pin_E0) // red# ^) Q' @% J( l4 I8 @/ [
#define MICROPY_HW_LED2             (pin_E1) // green2 A, X/ r  w6 S$ Z
#define MICROPY_HW_LED3             (pin_E2) // orange
. S5 F1 L' C) G' r  s/ T#define MICROPY_HW_LED4             (pin_E3) // blue5 e+ \, \8 d+ d/ E
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
* u6 Z3 E  ^/ c4 @#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))$ `" S" o2 e8 C1 U- f! {- Q

0 e' H- O+ b) L* G0 N, w// USB config( z# `: M: p  X
#define MICROPY_HW_USB_FS              (1): m' r7 d+ s3 O. N- ]$ t) N8 S
//*************end  mpconfigboard.h; `9 I, Q- U2 {( h) Z) y

# w- p+ _0 Z! V% ]+ vpins.csv 用记事本打开修改。& F- X3 T1 C- o! F! A9 Z9 T
缺少PB3 ,按格式添加。
: b. y4 z7 y0 o: s+ N% v) \$ i# q最后的LED SW对应mpconfigboard.h 的引脚修改。% G5 s  A2 S4 B8 ?, T
  }/ T7 O1 q3 ^. ?% Z! o, I
接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。
" B) P  ?% [9 E* T0 H% l9 J0 d0 c打开stm32文件夹下的sdcard.c,) m/ w8 q# O2 i) E, H  W
注释掉163行 引脚初始化。
5 y2 d4 {  c, S, [- R6 |3 a检测函数直接返回1。
5 V; L) g! R* I  Q! b1 ~: u6 t2 n; n" o# S+ G' J
bool sdcard_is_present(void) {& z  r: W$ v0 |+ Q
    return 1;
3 o2 V3 R) P- w) D& e$ v* b3 w    //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;
" t. Q- J% b+ b+ V}  h( i% a: I) O# d% n0 v
, k1 p- F; X( q* _

5 ~% C: o4 c- W) i/ f4 h3 p5 j& mmodules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。
# d$ B5 g5 @2 M4 o$ K! t7 j' t- P
7 ?6 D" q: `  k3 H8 q( X8 t7 `& L3、编译
, r7 |- X, O# b" P( kmsys2 进入到ports/stm32目录,执行 make BOARD=F407
" H" }7 e* v+ }. L5 i* r+ n2 Y. N% D0 ^* Q
( H* C5 \+ F7 O# \, ?* w
收藏 4 评论11 发布时间:2018-7-24 13:52

举报

11个回答
codysafe 回答时间:2018-7-24 18:30:29
图片都没了 补上编译OK的: v' }- V  k* t; I2 f2 r+ l# \

  o; ^2 D/ N2 x# P2 }; QSD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用; c5 E- L) x: I) S! o9 @' F/ j

' {6 P. K* F& C, Y7 n8 w
ok.jpg
OK1.jpg
MrJiu 回答时间:2018-7-24 16:33:37
牛逼,膜拜一个!!!
夏明smile 回答时间:2018-7-26 16:17:12
大赞!!
Veiko 回答时间:2018-7-27 15:52:03
厉害
buddy_wwq 回答时间:2018-7-27 16:18:54
厉害,蹭点热度,下载需要金币
annQian 回答时间:2018-7-30 16:46:19
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势?
any012 回答时间:2018-7-31 10:39:05
annqian 发表于 2018-7-30 16:46
" _  g0 C6 q! R我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

; T8 f9 E8 Z" B4 c不应该和keil,iar相比了。是实现在单片机上用python语言编程。
5 d/ p$ Y! ?4 `& H4 Upython相对c来说语法更简单更易学。
) k0 k$ }9 p( u) q/ T/ S我也没接触过micropython,不知道说的对不对。
酱哒哒 回答时间:2018-7-31 14:05:37
annqian 发表于 2018-7-30 16:46
7 C, U2 F, `  e4 c* ]; y我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...
8 W) \9 @- i7 @6 H: ]
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
0 c+ ^; Z6 f; q  f: g# u5 q: d" Z1 I4 M/ q" d) T/ Z0 H
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。1 J7 r) J- y6 \6 v/ r' A. A

" p' Z! Y3 o9 W1 h: P( ^
annQian 回答时间:2018-8-1 08:38:51
主要是针对哪个系列芯片的? 有无总括性的说明资料。
codysafe 回答时间:2018-8-2 09:26:58
annqian 发表于 2018-7-30 16:46) x7 J3 Y. Y0 m
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...
" R3 V8 w# J+ S4 }0 u/ X: e" i
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
( J) V: \. c& @5 \& }* E8 I$ V目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。" M5 h2 H+ c9 e
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。
单片机爱好者 回答时间:2020-5-31 19:05:50
能分享一下固件吗,刚开始学,还不会操作

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版