请选择 进入手机版 | 继续访问电脑版

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

移植 编译MicroPython到自己的板子

[复制链接]
codysafe 发布时间:2018-7-24 13:52
记录下为自己的板子编译MicroPython的过程。/ E: Z* ^: H) U7 U3 q
- u) ?7 T4 `" Z! d( G4 e
1、搭建环境% U# A- v  a0 B1 ^8 y
下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。2 o8 E- Q6 M! t. T. C  Y
下载gcc-arm-none-eabi,' Y* ~; B  g  a' T, l2 _; u
在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加/ F# d1 I" k4 R0 M* ^2 W
export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH
# V6 ]& [9 r. C/ M" {保存,重新打开msys2.exe使配置生效。7 `  y9 `; K+ c* h7 h; K& B. E& K

2 r+ b# j+ C" V, t/ t下载源码。$ git clone --recursive http://github.com/micropython/micropython.git
3 D% f! S  j$ v0 H1 k完成时如下
& m+ h* a0 r2 f0 l2 g& X0 O3 R0 w8 T
6 l# V* r3 k4 E) |) b
打开D:\msys32\home\Administrator (换成自己的目录)$ o( N- |' ?1 O
会多出一个micropython 的文件夹,里面就是所有源码了。' P7 R3 X  e; [4 W3 [( E. E* `

6 O8 z5 X  h" Q. b5 p2、移植
) v6 D2 ~( V; q) o# d打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。( s5 G; G8 ~2 t; i+ M
7 n% |- P: U1 L: a0 ?& R
mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。3 ?: E$ _% o" I+ ~# ?* l7 H
#define MICROPY_HW_BOARD_NAME       "F407"
, A. h: V  y. A3 [" q#define MICROPY_HW_MCU_NAME         "STM32F407"
# h* Q8 B0 u( p' R
$ r! |- D4 J8 g5 o6 }" Z#define MICROPY_HW_HAS_SWITCH       (1)5 c- T/ F. i7 N" l' L/ K
#define MICROPY_HW_HAS_FLASH        (1)
( U3 r2 U0 A0 p2 l#define MICROPY_HW_ENABLE_RNG       (1)- {( p! W% |, m- L3 j! c' v
#define MICROPY_HW_ENABLE_RTC       (0)
9 o. o+ X6 c/ v#define MICROPY_HW_ENABLE_DAC       (1)# w; q( i5 V' F: `" K* K
#define MICROPY_HW_ENABLE_USB       (1)* W2 D3 S9 W  \: \2 U% a* V
#define MICROPY_HW_HAS_SDCARD       (1)
" i% n8 \# J& @+ p9 x8 f3 q6 F" e" D+ i
// HSE is 8MHz
$ V, k; e6 D( M#define MICROPY_HW_CLK_PLLM (25)( S  D  G' }" J0 E
#define MICROPY_HW_CLK_PLLN (336)% x. R0 }6 S. v* P) N$ ]
#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
9 I/ z$ x, l& ^. L( A: N( c#define MICROPY_HW_CLK_PLLQ (7)
& V; p' p  U7 j6 e6 ~4 U! y( u7 F& Z- e$ z
// UART config2 J- \, H8 N+ U) n% h) P  T

5 a) q) ^9 v7 y2 n// A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.
: @" u! r; @" j: _& h! V, Q" T' P& J// UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line.7 n4 P& K. d! V# e" c  t
// Without board modifications, this makes UART1 unusable on this board.$ [/ G. ?" s5 _" q3 x7 [
#define MICROPY_HW_UART1_TX     (pin_A9)
1 W3 t9 l4 ~8 J' J5 s# E/ g, W#define MICROPY_HW_UART1_RX     (pin_A10)1 _+ V1 n' r  n

7 B* J+ _" U/ B$ b: l  h#define MICROPY_HW_UART2_TX     (pin_A2)
0 K; t! f. H/ C' k8 x#define MICROPY_HW_UART2_RX     (pin_A3)
% m. }( a3 P) E/ Y( H1 P' S) m" s5 I9 F  l; d) a
#define MICROPY_HW_UART3_TX     (pin_D8)# O4 E' K; _  G/ X6 [8 y
#define MICROPY_HW_UART3_RX     (pin_D9)8 L! L9 |6 f  i! H
2 s/ X( V$ |6 _. B
# b% l5 }6 q% U# s7 m5 ~
// NOTE: A0 also connects to the user switch. To use UART4 you should
- J- ]2 v3 l9 n' w0 z8 p/ E//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back0 q! t. H0 |5 R9 L$ U3 \
//       of the board near the USER switch).1 W, O' x- R$ N/ s6 p2 M
#define MICROPY_HW_UART4_TX     (pin_A0)9 D# B1 ?+ f1 h% ^+ v! v& a. f
#define MICROPY_HW_UART4_RX     (pin_A1)
+ F$ L( \, ]$ F3 A4 o+ |5 D8 y9 t: B2 Q& p9 A' D+ |
// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
0 D5 }  w4 W5 B, u2 _* g. E//       so I think as long as you're not using the audio chip then it should
0 @9 _& j( `' f  C- N//       be fine to use as a UART pin.
6 I% g- V/ O3 R3 v, S8 p3 G' U, A2 \$ R8 g1 Q
$ _! d2 q- q4 s
// I2C busses2 D, z5 L( F6 V5 ^
#define MICROPY_HW_I2C1_SCL (pin_B6)' Y, {* q% R7 ?& q) O' w( _6 H/ |
#define MICROPY_HW_I2C1_SDA (pin_B7), Z" d, i6 B$ U, C% A4 f. ?1 g

2 P) w- ]2 r3 k) w! C3 I6 Z$ y+ @( N9 t/ _. o
// SPI busses
3 k( f  I& h* J#define MICROPY_HW_SPI1_NSS  (pin_A4)
! z% [0 q  B# S# d2 |#define MICROPY_HW_SPI1_SCK  (pin_A5)2 ~- s6 }; h9 q$ I( W. _4 N
#define MICROPY_HW_SPI1_MISO (pin_A6)
! {9 n9 E/ |+ k% l+ E4 `* W1 v, v#define MICROPY_HW_SPI1_MOSI (pin_A7)
6 \1 I. f2 A2 t5 D#define MICROPY_HW_SPI3_NSS  (pin_A15)
+ C$ N  |0 j  W2 g+ b#define MICROPY_HW_SPI3_SCK  (pin_B3)  m( c3 F1 @# v- @4 T. u
#define MICROPY_HW_SPI3_MISO (pin_B4)
/ |5 P" u5 D2 h#define MICROPY_HW_SPI3_MOSI (pin_B5)- K# D: X7 W( B
! Q* G# P* ]/ T" ~
// CAN busses5 V  P( f. s7 Q; V1 {
#define MICROPY_HW_CAN1_TX (pin_B9)
% d" ~" j' j; a6 e3 ?#define MICROPY_HW_CAN1_RX (pin_B8)
5 u# d% z4 d/ v7 |* z
9 Q" U1 O8 o; N* s7 n+ M9 V3 t
- v$ C! S& y: Z( C5 h  T, C; s// USRSW is pulled low. Pressing the button makes the input go high.
2 z* @) a: g3 S9 i4 w#define MICROPY_HW_USRSW_PIN        (pin_C0)" N0 L( Q; m3 O) p
#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)
& }( Z0 \1 `" z2 p  C4 t7 I+ s% O1 i1 @#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)% @, v6 [! y- j, W
#define MICROPY_HW_USRSW_PRESSED    (1)
6 ^7 {' m" m+ E* B) `
6 e* N) G% a' C0 j7 _) B// LEDs$ ]  D; |: ~/ |& z, A! L6 ~- ]# z
#define MICROPY_HW_LED1             (pin_E0) // red9 W! L" Y6 h! E1 r
#define MICROPY_HW_LED2             (pin_E1) // green
+ J- Y) p6 v7 r* d, j#define MICROPY_HW_LED3             (pin_E2) // orange
$ |  J0 C" x7 c) n1 E5 T" Q. I1 H#define MICROPY_HW_LED4             (pin_E3) // blue
9 u9 C/ e% p. i* v! f#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
9 L  g$ s; x" V- {( }#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))
+ A6 k! N* i/ ?8 E6 \5 \7 T1 k; k, C3 l: Z' _: a$ F4 x
// USB config& B3 ]$ ~5 ^! a5 h/ m7 c/ ?2 N- t
#define MICROPY_HW_USB_FS              (1)
0 O- c) h/ t9 F( R0 ^//*************end  mpconfigboard.h# b- |7 Y7 f& |# @9 U; R/ y

* |: z. a" ^, Bpins.csv 用记事本打开修改。" J% |; P( j) L& I- l
缺少PB3 ,按格式添加。
2 W/ H/ z" a* w5 g5 R5 t6 b/ }最后的LED SW对应mpconfigboard.h 的引脚修改。
4 k5 b% `4 e* U% Q$ J
) E$ }- }" K( {接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。
6 ]# F0 f- M& q2 v8 B6 X8 i* v" D  M打开stm32文件夹下的sdcard.c,7 f% O# I9 A& ?0 T$ b9 U4 Q- l
注释掉163行 引脚初始化。& v' @; {: u* j
检测函数直接返回1。
: d8 ?+ u3 r% U5 Q" j( V* w6 {2 F9 }4 L6 k! g9 Q! X9 u9 Q
bool sdcard_is_present(void) {* v' N( L" J% [4 {. `, H
    return 1;
8 ~  p9 N$ G) R4 ~8 x2 ?8 ]    //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;9 B- m. O8 @# h8 p  A1 o" P
}" C; T7 `# @1 E3 M; U0 E  {

4 O5 L" E; I, J3 k6 u/ o" T
9 E' @4 Y+ m3 }" `modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。
2 H3 E0 z) P: q! V- D6 h" `4 ]5 j$ ?' ^
3、编译" F, i6 s) O9 [1 C" z  ^$ [( x
msys2 进入到ports/stm32目录,执行 make BOARD=F407. w# \- @; t$ \- w4 {! i$ {

% Y$ }9 R  O  ]+ e
3 Z& V9 V" ^  g) z- A0 T6 k
收藏 4 评论11 发布时间:2018-7-24 13:52

举报

11个回答
codysafe 回答时间:2018-7-24 18:30:29
图片都没了 补上编译OK的
5 u8 b0 p4 d  r* C8 u2 W8 a* F, A
  c0 |, {6 q/ ^$ x/ H: ASD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
! c& O$ A& I9 [% z4 D7 e/ E. S4 P4 A! s) t7 X7 q8 \
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:460 r# C5 g4 E$ r
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...
7 \2 v0 R! `4 Q& J
不应该和keil,iar相比了。是实现在单片机上用python语言编程。
: M8 B0 Z( m% k" y- Ipython相对c来说语法更简单更易学。
/ H$ O/ |$ a+ f我也没接触过micropython,不知道说的对不对。
酱哒哒 回答时间:2018-7-31 14:05:37
annqian 发表于 2018-7-30 16:46: H! u* ~6 U7 ]1 S5 N; I
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

9 _- v# q: a7 C6 P4 Pmicro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
3 q2 {( R3 b6 r; [3 r  C8 z* v& P4 Q- M# N4 @' i
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
8 N( y( z2 h6 ~7 K8 d8 U! C3 j1 h8 v5 ~/ x7 z
annQian 回答时间:2018-8-1 08:38:51
主要是针对哪个系列芯片的? 有无总括性的说明资料。
codysafe 回答时间:2018-8-2 09:26:58
annqian 发表于 2018-7-30 16:46" U, S4 }6 E! N+ L
我想问一下 MicroPython 这个工具具体是做什么用的?和集成开发环境keil 、IAR相比,有什么优势? ...

! `0 s$ W" H+ [/ v9 x, |& G相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
& U: g3 ^1 S; F) s7 i目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。
* ?4 M6 w6 T, W0 E" b: o$ p试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。
单片机爱好者 回答时间:2020-5-31 19:05:50
能分享一下固件吗,刚开始学,还不会操作

所属标签

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