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

移植 编译MicroPython到自己的板子

[复制链接]
codysafe 发布时间:2018-7-24 13:52
记录下为自己的板子编译MicroPython的过程。
6 r8 ?6 o$ `& v0 l' m1 R8 g( ?2 l! ^5 [% f
1、搭建环境8 Y$ {; M) P0 x% N. ^9 Z% S6 K* _
下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。
- Z# s" b- f" H% z下载gcc-arm-none-eabi,' D, o" o% W( P3 q3 k, D5 f/ l  s5 m5 B, q
在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加6 _9 U, d/ O) ?) N8 {
export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH0 R1 ]  \/ s! L5 D2 L1 g& t
保存,重新打开msys2.exe使配置生效。- E+ ]$ k+ W' `

- w$ q! K  N2 N) d, E5 m1 u下载源码。$ git clone --recursive http://github.com/micropython/micropython.git' m- t  o5 G$ b
完成时如下7 N0 L7 k& A: t. t! v2 ^9 f8 |
2 I) e8 K# g8 W9 P+ s0 z9 F
  }, R0 g2 n0 T+ e; o& H3 s
打开D:\msys32\home\Administrator (换成自己的目录)
3 g4 ?2 J8 O* d1 @' b! D" T会多出一个micropython 的文件夹,里面就是所有源码了。
+ i5 s" E# ?: Q; @: p: o- w8 s2 R- `1 m) s( r, _" h& b7 f
2、移植, i, {& {! X; @' |
打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。; G$ z) P' d1 L, i

# `) j7 @, f6 R, Gmpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。+ H: [0 t" I/ s& b
#define MICROPY_HW_BOARD_NAME       "F407": _( v3 P7 }! P+ X
#define MICROPY_HW_MCU_NAME         "STM32F407"+ P0 ~% v: p, W" U0 K2 o
5 |& \. x1 B" s# l7 w4 ~; q5 R
#define MICROPY_HW_HAS_SWITCH       (1)
* G: J, [9 @; m& I3 Q0 {& V#define MICROPY_HW_HAS_FLASH        (1)
. D. g6 ]/ j' F3 c, D5 s$ V. ]#define MICROPY_HW_ENABLE_RNG       (1); s6 H4 ~+ Q+ n1 V$ ?: A1 ]
#define MICROPY_HW_ENABLE_RTC       (0)3 k! p9 \5 W  f4 H. O" b( B. f
#define MICROPY_HW_ENABLE_DAC       (1)7 x4 A/ ?5 W; a! \) |1 e) F" {
#define MICROPY_HW_ENABLE_USB       (1)
4 `! l' c$ r6 _. G# p  d1 X#define MICROPY_HW_HAS_SDCARD       (1)
$ p3 B+ F+ M7 V8 P7 \2 J: X
5 B1 H, o! V- T4 I& L- F// HSE is 8MHz
+ u: i, V! y" ^1 t3 H#define MICROPY_HW_CLK_PLLM (25)1 T6 J5 W9 r. e7 Y
#define MICROPY_HW_CLK_PLLN (336)- V+ E, x- F! u7 g( k" p: e
#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)( M& }3 l: B; \, i6 j! j
#define MICROPY_HW_CLK_PLLQ (7)
. h7 D+ E2 |6 z  s1 M9 U! u6 i4 q6 y8 ]/ |+ Y2 k
// UART config! P! Q: J5 s$ |6 T0 \# H1 K  x( B
% O) I$ X* I! W1 T, B7 y% ~
// A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.
3 |% d0 x' e3 p1 I" n" k// UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line.
7 A: V$ |7 b7 q. e8 j// Without board modifications, this makes UART1 unusable on this board.! ~! U# s6 S; V1 T% W4 a
#define MICROPY_HW_UART1_TX     (pin_A9)) Y6 ~3 I! b! t' m' L
#define MICROPY_HW_UART1_RX     (pin_A10)
: g9 W* d/ L. u0 ?8 L6 V* h
  ~& x" G, O( |# y, W#define MICROPY_HW_UART2_TX     (pin_A2)- k! m6 T- v6 M/ j  e8 |8 B- B
#define MICROPY_HW_UART2_RX     (pin_A3)
9 R9 |3 D* E7 }, U4 n. l
+ R4 o( t1 X& L) C5 e0 u#define MICROPY_HW_UART3_TX     (pin_D8): y3 Y5 k6 K0 K
#define MICROPY_HW_UART3_RX     (pin_D9)/ y! e4 K! G, v6 O4 e
. ~, i; X* N8 o1 d" I( `& y# O
! M3 d8 W. a( Y2 l0 C
// NOTE: A0 also connects to the user switch. To use UART4 you should 5 }' ~4 W: K" y! K; M
//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back
0 W1 p6 n9 Y- W- X5 [" l//       of the board near the USER switch).
2 Z: R( T+ I. A0 ?* h3 D4 R8 E- \#define MICROPY_HW_UART4_TX     (pin_A0)! Y* ]; h) X, b9 @( k+ X1 _
#define MICROPY_HW_UART4_RX     (pin_A1)8 g( |2 A2 l* g3 u* _

3 ?$ i3 i0 T9 ]" B0 H( Q// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
& C. t7 b* F5 E9 a1 C$ v0 G/ }//       so I think as long as you're not using the audio chip then it should
  B$ S0 |8 e; V! b) }. ]//       be fine to use as a UART pin.
% ~" p7 I: a% ^) P) t. y
* d6 w0 ?5 `, q+ [
+ I* j0 C& O- F- s  H) }8 q2 y& g// I2C busses
& S- x1 i- @. B+ d#define MICROPY_HW_I2C1_SCL (pin_B6)
% O- c! H  D9 ]#define MICROPY_HW_I2C1_SDA (pin_B7)
4 |$ N* n& c7 m, @: e& g- N0 P7 J1 W9 ^0 W' ]# R. U
) A. E0 v, h  K' f
// SPI busses
; g& ?- a+ Y  l5 x# ]. i, s- J#define MICROPY_HW_SPI1_NSS  (pin_A4)
+ ~6 R2 ]/ d& ^' F" S" d- H#define MICROPY_HW_SPI1_SCK  (pin_A5)5 v$ |1 h5 O% H; Y7 P
#define MICROPY_HW_SPI1_MISO (pin_A6)
, M4 G) R. n# }#define MICROPY_HW_SPI1_MOSI (pin_A7)* Y/ m# }9 E% i- \' C" N
#define MICROPY_HW_SPI3_NSS  (pin_A15)
3 I- t2 o# l/ z" Y, T: f! R3 C. n  v* N#define MICROPY_HW_SPI3_SCK  (pin_B3)6 {% A7 f. ]0 ~1 N; W! R
#define MICROPY_HW_SPI3_MISO (pin_B4)  m& [, Y- N, V& ?' F# |, [1 S$ \
#define MICROPY_HW_SPI3_MOSI (pin_B5)9 q+ Z! P% }& p: _+ `! o
/ ~  y' X' e6 |. K" K& ]4 E  z1 b
// CAN busses
3 T7 ^" V2 L; {, y2 `* u#define MICROPY_HW_CAN1_TX (pin_B9)
0 I( `+ i5 W+ j: F/ x9 h#define MICROPY_HW_CAN1_RX (pin_B8)
0 e8 l2 A9 X5 L, g! e0 ~  Z" ?
) t# D* i% R7 K
7 W* J+ `8 j  [  p. I- ~! s0 o// USRSW is pulled low. Pressing the button makes the input go high.* }# |% Z1 X% l  h
#define MICROPY_HW_USRSW_PIN        (pin_C0)
6 _% \9 K! M' Z! C7 v6 S$ Y: z#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)
4 V" y1 p  D  A* B4 c- J3 U7 _#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)) X+ ~, L& i( d: e5 h1 l% N3 m$ k# l
#define MICROPY_HW_USRSW_PRESSED    (1)
& M" b& o: ?. b) I0 Q. u7 i/ [; O0 w) J4 p3 b4 p+ M3 T9 l( r
// LEDs1 k- W' T$ G: b8 g. ]3 h$ t
#define MICROPY_HW_LED1             (pin_E0) // red
4 o$ H- z6 V+ j% {# j# J#define MICROPY_HW_LED2             (pin_E1) // green
/ K9 _$ ]$ c! f8 X7 L5 ^#define MICROPY_HW_LED3             (pin_E2) // orange% b; z7 T: f: R& \# Q, H6 v( d
#define MICROPY_HW_LED4             (pin_E3) // blue% K7 _3 t' k3 ]  q" K
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
1 S2 q" f( Q% D0 h6 Q2 j- s#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))
% Q) s& d' E' v! m, f( J/ ]# I
7 g9 A2 \$ v; ~8 B6 l// USB config8 p! e: l3 d' ~. \: B0 C
#define MICROPY_HW_USB_FS              (1)# E+ u. k9 f. k
//*************end  mpconfigboard.h3 [$ J$ M' A5 G6 T" @) I
, I' _" V0 y. C4 h
pins.csv 用记事本打开修改。
  C$ o/ U6 L2 p" a8 ^0 x/ {缺少PB3 ,按格式添加。4 {( e. u+ T" D  j; n2 {' X& b
最后的LED SW对应mpconfigboard.h 的引脚修改。
; ^1 n) A% W! {) L& X. o1 c5 V0 _6 X8 A& O- B
接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。  i5 T9 X# ]5 h2 `4 X; w/ x& f+ ^
打开stm32文件夹下的sdcard.c,
6 I. T! w6 I1 G0 B- h3 D注释掉163行 引脚初始化。' j  d" J, \% T( }
检测函数直接返回1。5 ~2 y3 K2 r8 J: W. V3 i

' }) J, k  ~& B. sbool sdcard_is_present(void) {: j9 K& g4 Z# c% s
    return 1;0 F# h' _8 C, d% I8 |+ I- Z2 J+ M8 L
    //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;
+ ?- B$ b( u! M2 U$ e* N}* o( J' J- q! u. Q2 k+ Y' N
3 J! d+ k+ I2 \/ N2 y

2 [; }+ {$ T! k0 M3 `. umodules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。
% }3 x+ D5 l" s' C. `+ }0 n
% `( O7 }% I! q' M) E, F# O9 {3、编译
" l4 n; t3 ~; smsys2 进入到ports/stm32目录,执行 make BOARD=F407
" Q2 {% [# K9 e  o
" g$ W# M, f% H6 m
3 V5 @5 }9 T0 c" W' k
收藏 4 评论11 发布时间:2018-7-24 13:52

举报

11个回答
codysafe 回答时间:2018-7-24 18:30:29
图片都没了 补上编译OK的
2 k* }& s- l# Q( T8 c4 z" I2 q6 }# w) E5 S7 e! \/ l
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
/ Z4 w, |3 C0 j5 ]" X4 A; z' W2 _* @$ S/ k( Y! n- D: n
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% S* ]# e+ ]8 A3 T: H: s  E
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...
- [& F, K+ V  G' O- r
不应该和keil,iar相比了。是实现在单片机上用python语言编程。( a2 t' X: ~6 J2 ~
python相对c来说语法更简单更易学。
& j) O  T/ O) ~! m0 X& f我也没接触过micropython,不知道说的对不对。
酱哒哒 回答时间:2018-7-31 14:05:37
annqian 发表于 2018-7-30 16:46
/ U. A' ^9 D: M+ U我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

) V7 q! W3 k% Z% i- w. bmicro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。4 ~0 l# H# N/ K6 b2 V0 n

4 ]7 k+ t8 m- S" K& m这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
% N6 V2 w' e7 L1 C; ^
! Q! e6 ?# k; i8 ?& @
annQian 回答时间:2018-8-1 08:38:51
主要是针对哪个系列芯片的? 有无总括性的说明资料。
codysafe 回答时间:2018-8-2 09:26:58
annqian 发表于 2018-7-30 16:46
" t% O, K+ K) x  \- K6 Q1 |: q我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

3 o9 @5 }- m! `9 G+ s相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
: U' x4 I( x# s' }% V目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。% X1 {9 K  i( n) X
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。
单片机爱好者 回答时间:2020-5-31 19:05:50
能分享一下固件吗,刚开始学,还不会操作

所属标签

相似分享

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