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

移植 编译MicroPython到自己的板子

[复制链接]
codysafe 发布时间:2018-7-24 13:52
记录下为自己的板子编译MicroPython的过程。9 r5 S$ J8 p: N

1 Z" Y, S4 u7 i5 y1、搭建环境
1 J/ v& j1 v6 C: q8 Z" L0 Q下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。- x5 P1 G: _6 N# [
下载gcc-arm-none-eabi,: r/ e; }; l; y3 H* e! S& f% [- P# X
在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加
: u6 s' Z" O- |8 q6 @export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH6 G& [4 s. U! d1 X  g; M
保存,重新打开msys2.exe使配置生效。
4 f$ g* B  h- @3 z3 \6 z. ^7 J& w: d! g
下载源码。$ git clone --recursive http://github.com/micropython/micropython.git
+ W& H1 P' Y) K) g完成时如下1 c$ @( e1 U7 K
* m8 I& x# _3 E5 `

+ q% J  e% m5 E6 e8 X. a: ]打开D:\msys32\home\Administrator (换成自己的目录)" H2 W2 @' w- ]
会多出一个micropython 的文件夹,里面就是所有源码了。
; i6 N0 Z0 z# l& x% E& o5 D1 I
, g! }7 z6 P  |) ?$ H5 i: E2、移植
- X) S2 k" }+ @  d" I8 J打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。& b6 e7 I. l; F9 }( K( i/ ]
/ N. {0 A2 \: K8 D  |3 H% N' |
mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。4 L. O4 J4 o5 x' X6 s$ O
#define MICROPY_HW_BOARD_NAME       "F407"4 m) U: f  O& L- ^6 @  P
#define MICROPY_HW_MCU_NAME         "STM32F407"5 Q$ v2 q, q  [  b3 K( G7 E0 W, M% t

5 D( l+ @, o5 @4 R( Y#define MICROPY_HW_HAS_SWITCH       (1)) _6 N0 @. P9 b7 E
#define MICROPY_HW_HAS_FLASH        (1)
9 X+ j- |3 G1 c) P. Q4 Y" Z/ g#define MICROPY_HW_ENABLE_RNG       (1)$ ?" Y9 S. V& d. E# u1 ^
#define MICROPY_HW_ENABLE_RTC       (0)
8 W+ K4 ~& X" _* r, r7 w#define MICROPY_HW_ENABLE_DAC       (1)
4 A3 [$ ^  X" J1 C# m! \; r#define MICROPY_HW_ENABLE_USB       (1)
- e. E: }4 [6 Y# a0 b  `- o7 P, g#define MICROPY_HW_HAS_SDCARD       (1)  f+ C6 s  G& G  F/ v8 W& |
( N8 c) \' t7 O, X; {. _
// HSE is 8MHz# R( W. b$ j' }+ ^! Z8 W0 b2 u
#define MICROPY_HW_CLK_PLLM (25)1 F, f. U5 Q# X4 p$ b
#define MICROPY_HW_CLK_PLLN (336)
& O+ `; J$ f! r/ r' K+ ]9 r#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
# u2 P( r4 s( F" t7 _; z: S0 s% G#define MICROPY_HW_CLK_PLLQ (7)2 T6 V3 T$ n# h

+ x4 a6 J! h- @* ^" I7 E7 y& }// UART config
8 {& r0 X, |' L/ |; Q& \$ U& P0 G$ x4 [7 a1 s
// A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.5 a% u) M, [. }. P
// UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line.
5 Z6 {+ X$ }+ Z% U// Without board modifications, this makes UART1 unusable on this board.4 I# j2 T% i+ y  ~
#define MICROPY_HW_UART1_TX     (pin_A9)/ `) c5 g2 s3 u5 L
#define MICROPY_HW_UART1_RX     (pin_A10)* ]! [6 S3 ?1 r' d* J+ L- \
! o% i. A# {, F8 b- X
#define MICROPY_HW_UART2_TX     (pin_A2)
  C# Y' [# ?3 j6 J! z#define MICROPY_HW_UART2_RX     (pin_A3)
6 P# g+ Q* K. ^$ Q
& y' \4 y, e$ f9 G& V1 P$ H#define MICROPY_HW_UART3_TX     (pin_D8)
7 z: Y- ?* I* j) ?$ L3 D#define MICROPY_HW_UART3_RX     (pin_D9)
8 z2 p0 Z  D7 Q: F! A; w7 O7 N& i! d% {2 z) E: ~' j% [8 u
$ P9 H) Z+ ?% C7 z3 W, ?9 `
// NOTE: A0 also connects to the user switch. To use UART4 you should & J- Y: O4 w' Q* ^
//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back- Z  `! Q+ ?$ S# j
//       of the board near the USER switch).
. D# g9 e' {% y+ D. y' C# O+ a#define MICROPY_HW_UART4_TX     (pin_A0)* K, _+ C; m$ P/ V3 Q4 Q. X  n
#define MICROPY_HW_UART4_RX     (pin_A1)
  g# D1 }( k. j( n2 p. i# t4 b, i# I- U
// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
) U  _) \5 S, t3 I  v- A/ {6 ~+ D//       so I think as long as you're not using the audio chip then it should
" p& V, k: y& o% M; q//       be fine to use as a UART pin.2 E$ q3 Q4 m+ z$ S5 ]0 b

5 s" a; C+ \& K5 S* v( K. e$ U$ \0 U
// I2C busses) ^5 L, W* ]0 [3 ^  J7 Z) A
#define MICROPY_HW_I2C1_SCL (pin_B6)
$ s! B' u  c/ s6 t#define MICROPY_HW_I2C1_SDA (pin_B7)/ q/ t  ?: f9 t6 I2 V
- O, \, e9 j! E4 t/ u* M
% U0 W7 y: E" J4 Y6 o+ \0 K" ~3 p
// SPI busses" V$ h9 P) L" }/ D" N# P
#define MICROPY_HW_SPI1_NSS  (pin_A4)
2 Z! W$ g* S5 t+ Q9 V" A#define MICROPY_HW_SPI1_SCK  (pin_A5): i, |$ ]% U$ u1 P
#define MICROPY_HW_SPI1_MISO (pin_A6)
: ^+ s7 l5 h  E+ |+ X#define MICROPY_HW_SPI1_MOSI (pin_A7)* ]6 X7 H3 W* Z3 j  J
#define MICROPY_HW_SPI3_NSS  (pin_A15)
& t1 p, j4 u9 x0 V, n$ M#define MICROPY_HW_SPI3_SCK  (pin_B3)
" D' g& v- Z$ O2 O. x! r8 c0 X#define MICROPY_HW_SPI3_MISO (pin_B4)
. U$ F! q; K  Z  A- p#define MICROPY_HW_SPI3_MOSI (pin_B5)
( ~; Z4 W% H4 _% c: @0 g- N( c  \3 Z
// CAN busses
5 G" L+ h% C8 G3 `% {8 K" L#define MICROPY_HW_CAN1_TX (pin_B9)
' `" @2 P% h' v  X, Z9 l* D#define MICROPY_HW_CAN1_RX (pin_B8)# T( ?0 i$ H$ }: z
- {5 z; S+ Z3 M! N  k0 x/ u

) F* ~2 P5 f, M) z( U// USRSW is pulled low. Pressing the button makes the input go high.
2 i( E9 ^" s( H. N1 r* c#define MICROPY_HW_USRSW_PIN        (pin_C0)! g, ~6 j$ h& x2 F: s3 \! o
#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)
3 S. e  [" k0 B#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)
  g; j" }" r1 O* L( u9 P- L7 m#define MICROPY_HW_USRSW_PRESSED    (1)
# \' i6 L* v/ q8 H) u
3 `' ]! `' r1 d" K- o% ~// LEDs5 f: N# j0 a3 w# V. s( m: B+ C
#define MICROPY_HW_LED1             (pin_E0) // red
$ W! G! s8 m5 J! x* b#define MICROPY_HW_LED2             (pin_E1) // green% _2 a5 Q( b, V
#define MICROPY_HW_LED3             (pin_E2) // orange: H  j( Q" H4 F+ t& M2 h- {2 p4 A
#define MICROPY_HW_LED4             (pin_E3) // blue, A7 W4 {, q' Z
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))5 e* N$ |/ J% T% {- C
#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))- S! j& a0 }: D

8 P" E! y! i( m" l4 P& @% G// USB config
! b3 N* @0 R% ]# X, B#define MICROPY_HW_USB_FS              (1)3 b8 x! h- ^( ?
//*************end  mpconfigboard.h; M4 U0 W2 Y: Z( E) p* Z
- E% _& h( o! x6 G
pins.csv 用记事本打开修改。* x% [+ q/ b5 t  e  P. ]- k  u
缺少PB3 ,按格式添加。$ }' A% [+ ~7 g: i5 _! j
最后的LED SW对应mpconfigboard.h 的引脚修改。- h5 D4 E' S+ ]3 T5 n
2 o/ R+ k6 o& V( W% H5 w
接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。
6 J: [( y5 g6 ^, Y打开stm32文件夹下的sdcard.c,# I% ^2 r: u. d( C- Y! }
注释掉163行 引脚初始化。
5 m6 K9 w/ d* p2 P' {5 {检测函数直接返回1。
- l! V5 Y5 @8 G- v7 c( l2 d( a( k
2 Y2 @: @' x( J" o0 dbool sdcard_is_present(void) {$ K+ v: ?( @5 m$ u! R& ^
    return 1;
6 O5 J' t. I& ~* t0 {" N    //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;" _5 P+ F: I& n% m& S# h. f; L; T/ a
}5 E5 j; r& {9 s- X
/ b2 W% b2 k, K% x, d8 p
2 l  ], w# v, P3 p, N* ^
modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。) b1 |' K2 V& j* B. P

; b5 F. d8 k+ G1 R) F0 k, j3、编译
' f$ D4 ]5 P, S$ a! v" rmsys2 进入到ports/stm32目录,执行 make BOARD=F407
+ a' w* U) k, f$ V+ w. N# V. _1 ^2 ^5 C! ]

4 q+ n, q4 J  c+ n
收藏 4 评论11 发布时间:2018-7-24 13:52

举报

11个回答
codysafe 回答时间:2018-7-24 18:30:29
图片都没了 补上编译OK的
& P9 [5 J# u7 }1 w: S6 x# B/ p4 `2 `7 C6 f; x8 d! L& F" z9 M
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
, B5 `$ a8 G6 a- `* u4 [7 I0 T! ?5 Z5 W, [5 V' ~/ t- ?$ E4 d8 }* A6 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
7 u, o# ?5 e) g1 C我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

& m8 |4 X( w! {. m, t) F不应该和keil,iar相比了。是实现在单片机上用python语言编程。
* s1 o' |- J- Q* P; S$ |9 Zpython相对c来说语法更简单更易学。
) [2 L& x/ M; `" \6 q我也没接触过micropython,不知道说的对不对。
酱哒哒 回答时间:2018-7-31 14:05:37
annqian 发表于 2018-7-30 16:46
* O  ~  e/ b7 d8 T我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...
* A; X; p# Z  o1 \7 U
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。! g, }6 C: \, I0 P" M% t
8 Y7 y; O8 E, E3 j
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
: b8 i1 f: _0 r7 q! B) B
5 B: U9 Z; F3 N2 g
annQian 回答时间:2018-8-1 08:38:51
主要是针对哪个系列芯片的? 有无总括性的说明资料。
codysafe 回答时间:2018-8-2 09:26:58
annqian 发表于 2018-7-30 16:46
. h& ]" D: w! e' d8 ]/ V我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

! |& O' O8 K. e9 M$ I/ ^% q相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。9 M' n2 x+ t: x# b6 \3 w# x
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。
6 p# q- @9 J" A& w9 X& l试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。
单片机爱好者 回答时间:2020-5-31 19:05:50
能分享一下固件吗,刚开始学,还不会操作

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版