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

移植 编译MicroPython到自己的板子

[复制链接]
codysafe 发布时间:2018-7-24 13:52
记录下为自己的板子编译MicroPython的过程。
, X' f  ], O9 _2 T7 O  m  b! T; U0 W" h" H3 f
1、搭建环境
2 _% H: J1 \' `( e下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。
8 j; F( Z4 J6 `0 L  f下载gcc-arm-none-eabi,1 o0 \; S; g/ z. B# s4 Z! o
在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加# Z5 G) _! l8 q* `2 D# ~5 s4 @  |
export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH
0 c3 u9 M8 `, }) y: |+ |保存,重新打开msys2.exe使配置生效。. c. ?' i  X; |1 f1 N* n& i% {

" l7 J% R( f+ P% w% z+ D下载源码。$ git clone --recursive http://github.com/micropython/micropython.git4 }, U3 j. t/ s0 ~, \& K4 p- b8 X
完成时如下* `6 z1 L1 o" _9 k0 g

( ^" b% C( L4 \+ P' I4 @! C. x
( g, b2 n$ v, b  t$ h& P打开D:\msys32\home\Administrator (换成自己的目录)
) T% w+ J* G6 ], K. X5 S& @会多出一个micropython 的文件夹,里面就是所有源码了。
4 l, P" }) k2 L& A* F! C! j9 [" W. b1 e4 ^1 o) E$ @
2、移植  i( Y! f7 I9 q8 E
打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。
9 J9 ]! Q; V7 D6 H& J2 M* Y9 ?
' V5 B$ G# F" u1 D# ^9 `7 W, i  X* Cmpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。% g1 ?& C" J  U' q2 k, e) Z
#define MICROPY_HW_BOARD_NAME       "F407"  I; S! y7 Y$ d
#define MICROPY_HW_MCU_NAME         "STM32F407"
7 i) h+ o  N4 Z/ W2 `4 Z3 g
  K  I- }4 o+ K/ A2 J3 o! v. {#define MICROPY_HW_HAS_SWITCH       (1)
' p# @7 a# W, P) [; h% s+ ]6 Q6 x#define MICROPY_HW_HAS_FLASH        (1)
* G7 X* M4 k, c: d1 w" U$ ?#define MICROPY_HW_ENABLE_RNG       (1)8 n6 K  v  u' s; ]3 D- H2 y- j
#define MICROPY_HW_ENABLE_RTC       (0)
' x3 t' C  f2 ]8 i#define MICROPY_HW_ENABLE_DAC       (1)
  g% c" C! u+ j+ l9 C- h#define MICROPY_HW_ENABLE_USB       (1)- R, ~+ f' X0 Z5 M5 K
#define MICROPY_HW_HAS_SDCARD       (1)
' ^+ m0 o* A) d' r2 P1 Y# ?
8 _& q4 ^! _. n: i3 e( Y// HSE is 8MHz
7 }! s' d, d' |4 G5 L6 J! ?#define MICROPY_HW_CLK_PLLM (25)
6 J) s8 |9 e. S! I$ y#define MICROPY_HW_CLK_PLLN (336)
) }* ~! h6 v. G5 W* n3 V#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
1 l" O; ?5 e; W) B#define MICROPY_HW_CLK_PLLQ (7)8 o, R5 s, |6 f7 r  q  F5 z- G

" ?/ C6 O5 D6 F* D// UART config2 H$ }5 {4 `( Z* U

; L, o' R2 Y6 |+ b( w& c8 o* @+ C// A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.
( L8 _4 z. K5 o# H5 F// UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line.
+ C, G6 g% K. U- d& g3 o" G// Without board modifications, this makes UART1 unusable on this board.
% W. p+ G+ k$ k#define MICROPY_HW_UART1_TX     (pin_A9)+ R* ]" c$ F5 M8 z& |
#define MICROPY_HW_UART1_RX     (pin_A10)
( C! M0 W: X  _% u
9 n3 s1 z7 D. ^( y#define MICROPY_HW_UART2_TX     (pin_A2)" p5 ?8 s/ c- Q7 J
#define MICROPY_HW_UART2_RX     (pin_A3)
7 B4 U+ s3 k: {9 V/ ^$ d. q# ]5 f% \) K
#define MICROPY_HW_UART3_TX     (pin_D8)$ X0 {  U! B6 i0 N3 _
#define MICROPY_HW_UART3_RX     (pin_D9)  M" _" L( C) t8 P

+ `! s4 P) ~) ]1 A8 A7 G0 [2 @; \8 j0 \
// NOTE: A0 also connects to the user switch. To use UART4 you should 9 `* {& }- q9 |! a3 N
//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back$ {' M1 O' [' N- R3 Z0 Y8 ?. k
//       of the board near the USER switch).$ g* }, {) K! ~# N$ }/ Q% u1 W' Y
#define MICROPY_HW_UART4_TX     (pin_A0)* Y$ l9 n! G5 w! [
#define MICROPY_HW_UART4_RX     (pin_A1)* ]) V# u& D/ i2 M/ v9 G) S

/ i9 _8 k. z* c; b) m: r// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
! o8 O* [9 W/ T; S, m1 j//       so I think as long as you're not using the audio chip then it should; I9 S9 I# T7 I6 m& w) Z4 ]7 |
//       be fine to use as a UART pin.
5 N& R- K8 f8 e2 T5 y6 A
' @- O/ Z- J4 V
4 R; R/ }8 T  n2 t2 p% J// I2C busses  {8 P) y: I! a& Z. U" G# _' F1 r5 s
#define MICROPY_HW_I2C1_SCL (pin_B6): u3 b$ D2 w& K: W+ T0 w( F
#define MICROPY_HW_I2C1_SDA (pin_B7)
% \' |$ {3 r$ |- B8 F! h7 N2 Z; \+ u+ T
+ q! Z* ]  W" m# n7 w
// SPI busses
4 m" ~9 ?( }( ]  |8 Y) {, Q#define MICROPY_HW_SPI1_NSS  (pin_A4)% U! y2 P# m* \. r2 ~5 W
#define MICROPY_HW_SPI1_SCK  (pin_A5); s! [1 }5 i9 a  \* K
#define MICROPY_HW_SPI1_MISO (pin_A6)
4 e- W# |9 v2 y$ [( h#define MICROPY_HW_SPI1_MOSI (pin_A7)6 T6 X. B: R% D/ S
#define MICROPY_HW_SPI3_NSS  (pin_A15)$ p9 e# w3 o+ {8 l' e% P& F4 T
#define MICROPY_HW_SPI3_SCK  (pin_B3)
/ S2 g1 u! }0 Z2 c1 ^9 @* [+ w6 X* x/ ~#define MICROPY_HW_SPI3_MISO (pin_B4)  \6 X9 Q0 G) W$ i
#define MICROPY_HW_SPI3_MOSI (pin_B5)' z2 }9 W. r" A- G' E4 @: `

4 |4 w6 ~  ?1 k% w7 D. N6 A// CAN busses" n% [8 J9 i0 c. ~' g
#define MICROPY_HW_CAN1_TX (pin_B9)) p( x2 ]0 G) _9 }& P: |
#define MICROPY_HW_CAN1_RX (pin_B8)
1 m* c- f) v9 }  p  x4 H$ D5 T" k& z8 k

$ K) @$ _2 ]% q/ m$ N4 j3 f" e' Q& y// USRSW is pulled low. Pressing the button makes the input go high.
( m/ E- u2 t9 U8 L* ]" N: I#define MICROPY_HW_USRSW_PIN        (pin_C0)8 Z9 x( v! l, W, [! {  G6 h
#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)' l" |% \  K" E0 Y7 g: Q: @( f$ C
#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)
0 d1 ?& w+ {: U0 Q- R& J#define MICROPY_HW_USRSW_PRESSED    (1)! J2 V2 J$ v& x2 J4 }1 O) [4 N$ Y

7 k/ m4 R3 ]8 \/ a* v! k+ ~% c( _// LEDs
' W  w2 Y( _7 Q9 l" f- `% X#define MICROPY_HW_LED1             (pin_E0) // red
! ?+ j+ S0 U+ B1 g9 U#define MICROPY_HW_LED2             (pin_E1) // green! ~) t6 C6 z3 H
#define MICROPY_HW_LED3             (pin_E2) // orange* I) p8 |1 F& r8 Q! i% ~, c" B
#define MICROPY_HW_LED4             (pin_E3) // blue* z2 [& w; z/ a+ Y  z5 P
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
: k( H0 [6 d- J( t# Y& T( k#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))+ m$ O6 C+ H" r5 M# i3 t' K% k/ V

' {) U7 [6 w4 a. b* y" G# _// USB config
8 k, s3 R# q" m8 R5 P" j#define MICROPY_HW_USB_FS              (1): C& f  b2 ]0 |- r0 v2 ?
//*************end  mpconfigboard.h
, d& Y4 R/ e. o8 V7 r0 X  t- x5 n3 F4 b
pins.csv 用记事本打开修改。) N+ d: Y' g) c5 l6 E( K+ P# J, X
缺少PB3 ,按格式添加。
/ c: i. Y3 F% ~6 M3 d; T最后的LED SW对应mpconfigboard.h 的引脚修改。
' U: Z5 Z' S+ n1 ]/ F0 T( Y, o. s% S$ |! I4 I9 w  p
接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。  E* Q- q* c6 V( _
打开stm32文件夹下的sdcard.c,
6 L: l7 o" B8 k  ^+ {6 q注释掉163行 引脚初始化。: H! P6 t; b, R3 e
检测函数直接返回1。
8 O: E. U2 `5 b9 x& I+ R: U" @
9 Z, B& T5 |6 a$ I$ q6 Qbool sdcard_is_present(void) {
% s4 J4 a9 o! e    return 1;8 _/ w9 Y9 I1 ^  d
    //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;$ t# C# u. W0 u
}% _) @5 [+ X. k$ V8 ?" f6 V

9 K( q+ \! A# u! B& y9 K  ]( F- P5 ^$ x4 u( {* Z
modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。- z' s+ u& ?& `$ I) y' W8 d* U
2 F& e" J" V  R6 z2 B$ `  g, r+ @: R
3、编译
$ _7 U9 o2 U- Z) U0 Xmsys2 进入到ports/stm32目录,执行 make BOARD=F407: O8 P: R; r3 J* s* O

; w  G; e8 `. L$ w0 I4 n, r) G* j! c
收藏 4 评论11 发布时间:2018-7-24 13:52

举报

11个回答
codysafe 回答时间:2018-7-24 18:30:29
图片都没了 补上编译OK的
( b: ^: Q( A& E; Q( j
! ~9 o$ H* |: N' }  rSD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
& H5 c9 m( }  }+ c. i- ?
' M$ x8 a2 O& U( k5 k. ~- p+ B/ e3 l
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
) w6 D( P9 p) e3 Q' H9 W9 a' {我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

$ s9 i$ T, C- e% T) a不应该和keil,iar相比了。是实现在单片机上用python语言编程。
$ N) Z; ]! t! C+ N' L7 }python相对c来说语法更简单更易学。; k* _& ^$ T% ^/ q+ C" w4 x
我也没接触过micropython,不知道说的对不对。
酱哒哒 回答时间:2018-7-31 14:05:37
annqian 发表于 2018-7-30 16:46. d/ D2 o% A9 T4 n8 H) U/ p
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

; V) V. B, n+ g9 E6 Kmicro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
! Z6 Y# m6 E' R( y( \
$ a' d' b0 n: ?# G* l2 Q" [' i& p这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
3 |8 M2 o$ G  \0 L. H
8 o' G& H$ `* W! i
annQian 回答时间:2018-8-1 08:38:51
主要是针对哪个系列芯片的? 有无总括性的说明资料。
codysafe 回答时间:2018-8-2 09:26:58
annqian 发表于 2018-7-30 16:46' h: s/ }7 m5 [$ a9 [
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

) \9 Q% O) W; X8 I: d; e相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
! H5 D. T( Y5 t: s目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。  S6 x" _1 c4 v9 O
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。
单片机爱好者 回答时间:2020-5-31 19:05:50
能分享一下固件吗,刚开始学,还不会操作

所属标签

相似分享

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