久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6182|回復: 0
打印 上一主題 下一主題
收起左側

MicroPython-TPYBoard固件編譯教程

[復制鏈接]
跳轉到指定樓層
樓主
  本文主要介紹一下,在Linux環境下編譯micropython固件的方法和流程。

  首先,我們先來看一下MicroPython的源碼結構。

  github地址:https://github.com/micropython/micropython



  你會發現,micropython根據不同的MCU運行平臺進行了分類,比如esp8266目錄下就是esp8266-WIFI模塊上的micropython的源碼,stmhal是運行在stm32上的,還有cc3200等。
  
py/
  
Python實現的核心部分,包括編譯器、運行時、核心庫
mpy-cross/
MicroPython 自帶的交叉編譯器,可以將python腳本編譯為mpy加密文件
unix/
在UNIX上運行的MicroPython
stmhal/
在TPYBoard和類似的STM32開發板上運行的MicroPython
minimal/
MicroPthon的最小集,用于移植到其他微處理器
tests/
測試框架和測試腳本
docs/
MicroPython官方的reStructuredText文檔資料。地址:http://docs.micropython.org
bare-arm/
在ARM上MicroPython的最小版本
teensy/
在Teensy 3.1上運行的MicroPython
pic16bit/
在16 位 PIC 微控制器上運行的MicroPython
esp8266/
在ESP8266  WIFI模塊上運行的MicroPython
extmod/
C 實現的模塊
tools/
各種工具
examples/
Python腳本實例
READ.md
說明文檔


  開始編譯固件

  本人的系統環境:ubuntu15.0464位系統

  Ubuntu官網:http://cn.ubuntu.com/?_ga=2.2645 ... 95108721.1502953593

  1、安裝arm-none-eabi-gcc交叉編譯工具和gcc編譯器

  打開終端執行命令

  1. sudo apt-get install gcc-arm-none-eabi

  2. sudo apt-get install gcc
復制代碼



  2、下載micropython的源碼包

  我放在了/opt目錄下

  1. git clone --recursive https://github.com/micropython/micropython.git
復制代碼





  等待git完畢,進入stmhal/boards/目錄下,里面又根據不同型號的芯片進行了分類。



  3、開始編譯

  切換到stmhal目錄

  1. cd /opt/micropython/stmhal
復制代碼



  執行編譯命令,等待編譯完成。

  1. make BOARD=PYBV10
復制代碼


  BOARD參數為stmhal/boards/目錄下相應的開發板名稱。

  本次教程用的是TPYBoardv102(藍色)開發板,兼容PYBV10,所以選擇PYBV10開發板繼續編譯。

  若是TPYBoardv102(綠色)基礎板,同樣選擇PYBV10。

  若是TPYBoardv102(黑色)開發板,需選擇PYBV11。



  編譯成功。生成的固件文件stmhal/build-PYBV10/firmware.dfu和firmware.hex。

  4、燒寫固件

  請參考教程:tpyboard點com/support/reference11/302.html

  增加自定義類庫

  使用過micropython的小伙伴都知道,里面有一個重要的模塊pyb。下面我們就嘗試在micropython源碼中新建一個名為tpyboard的pyb子類,里面添加一個簡單的函數display,輸出一句”HelloTPYBoard”。

  5、首先大體來看一下stmhal目錄下的各種.c和.h文件。基本上根據他們的名稱就能判斷出功能來。

  6、先來參考一下led.c文件,了解一下大體的流程。

  找到了led_obj_on函數,這就是我們平時用的pyb.LED(1).on()

  1. /// Turn the LED on
  2. mp_obj_t led_obj_on(mp_obj_t self_in) {
  3.     pyb_led_obj_t *self = self_in;
  4.     led_state(self->led_id, 1);
  5.     return mp_const_none;
  6. }
復制代碼



  聲明注冊一下on函數,MP_DEFINE_CONST_FUN_OBJ_1最后的數字跟參數的數量相對應。

  1. STATIC MP_DEFINE_CONST_FUN_OBJ_1(led_obj_on_obj, led_obj_on);
復制代碼



  再往下可以看到led_locals_dict_table,將上面聲明的函數添加到led模塊函數字典中。

  1. STATIC const mp_rom_map_elem_t led_locals_dict_table[] = {
  2.     { MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&led_obj_on_obj) },
  3.     { MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&led_obj_off_obj) },
  4.     { MP_ROM_QSTR(MP_QSTR_toggle), MP_ROM_PTR(&led_obj_toggle_obj) },
  5.     { MP_ROM_QSTR(MP_QSTR_intensity), MP_ROM_PTR(&led_obj_intensity_obj) },
  6. };
  7. STATIC MP_DEFINE_CONST_DICT(led_locals_dict, led_locals_dict_table);
復制代碼



  建立micropython對象,遵循以下原則。

  1. const mp_obj_type_t pyb_led_type = {
  2.     { &mp_type_type },
  3.     .name = MP_QSTR_LED,
  4.     .print = led_obj_print,
  5.     .make_new = led_obj_make_new,
  6.     .locals_dict = (mp_obj_dict_t*)&led_locals_dict,
  7. };
復制代碼


  7、接下來我們在stmhal目錄下新建一個tpyboard.c文件,內容如下:


  1. #include <stdio.h>

  2. #include "py/nlr.h"
  3. #include "py/runtime.h"
  4. #include "py/mphal.h"

  5. mp_obj_t tpyboard_obj_display() {

  6.     printf("Hello TPYBoard\n");
  7.     return mp_const_none;
  8. }

  9. STATIC MP_DEFINE_CONST_FUN_OBJ_0(tpyboard_obj_display_obj, tpyboard_obj_display);

  10. STATIC const mp_rom_map_elem_t tpyboard_locals_dict_table[] = {

  11.     { MP_ROM_QSTR(MP_QSTR_display), MP_ROM_PTR(&tpyboard_obj_display_obj) },

  12. };

  13. STATIC MP_DEFINE_CONST_DICT(tpyboard_locals_dict, tpyboard_locals_dict_table);
  14. const mp_obj_type_t pyb_tpyboard_type = {
  15.     { &mp_type_type },
  16.     .name = MP_QSTR_tpyboard,
  17.     .locals_dict = (mp_obj_dict_t*)&tpyboard_locals_dict,
  18. };
復制代碼


  8、新建tpyboard.h文件,內容如下:

  1. extern const mp_obj_type_t pyb_tpyboard_type;
復制代碼


  找到modpyb.c文件,將tpybaord子模塊添加到pyb的pyb_module_globals_table[]子類表中。

  1. { MP_ROM_QSTR(MP_QSTR_tpyboard), MP_ROM_PTR(&pyb_tpyboard_type) },
復制代碼


  記得在modpyb.c中添加tpyboard.h的引用。

  1. #include "tpyboard.h"
復制代碼


  9、添加完畢后,將tpyboard.c文件添加到Makefile文件中,進行編譯。我就直接放到了led.c\下面。

  1. SRC_C = \
  2.         main.c \
  3.         system_stm32.c \
  4.         stm32_it.c \
  5.         usbd_conf.c \
  6.         usbd_desc.c \
  7.         usbd_cdc_interface.c \
  8.         usbd_hid_interface.c \
  9.         usbd_msc_storage.c \
  10.         mphalport.c \
  11.         mpthreadport.c \
  12.         irq.c \
  13.         pendsv.c \
  14.         systick.c  \
  15.         pybthread.c \
  16.         timer.c \
  17.         led.c \
  18.         tpyboard.c \
  19.         pin.c \
  20.         pin_defs_stmhal.c \
  21.         pin_named_pins.c \
  22.         bufhelper.c \
  23.         dma.c \
  24.         i2c.c \
  25.         spi.c \
  26.         uart.c \
  27.         can.c \
  28.         usb.c \
  29.         wdt.c \
  30.         gccollect.c \
  31.         help.c \
  32.         machine_i2c.c \
  33.         modmachine.c \
  34.         modpyb.c \
  35.         modstm.c \
  36.         moduos.c \
  37.         modutime.c \
  38.         modusocket.c \
  39.         modnetwork.c \
  40.         extint.c \
  41.         usrsw.c \
  42.         rng.c \
  43.         rtc.c \
  44.         flash.c \
  45.         storage.c \
  46.         sdcard.c \
  47.         fatfs_port.c \
  48.         lcd.c \
  49.         accel.c \
  50.         servo.c \
  51.         dac.c \
  52.         adc.c \
  53.         $(wildcard boards/$(BOARD)/*.c)
復制代碼


  10、執行命令開始編譯,編譯通過,重新將編譯好的固件燒寫到TPYBoard開發板上。

  11、燒寫完畢后,用putty連接TPYBoardv102,輸入以下內容:

  1. pyb.tpyboard.display()
復制代碼








分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 浮生影院免费观看中文版 | 日韩欧美一区在线 | 中文一区二区视频 | 久久久国产一区二区三区四区小说 | 欧美精品首页 | 欧洲精品一区 | 亚洲一区二区免费 | 国产精品高潮呻吟久久 | 国产精品视频在线免费观看 | 欧美亚洲免费 | 99热精品在线 | 欧美日韩在线高清 | 99资源| 欧美一级免费黄色片 | 久久国产精品一区 | 免费播放一级片 | 天天干天天草 | 精品欧美一区二区精品久久 | 日本天堂一区 | 国产精品高潮呻吟久久av野狼 | 国产农村妇女精品一二区 | 日韩欧美一区二区三区 | 在线只有精品 | 欧美一区免费 | 国产一二三区电影 | 黄色av网站在线免费观看 | 美女国产一区 | 波多野结衣在线观看一区二区三区 | 亚洲国产成人久久久 | 日韩av免费在线观看 | 日韩精品一区二区三区在线播放 | 婷婷亚洲综合 | 免费观看a级毛片在线播放 黄网站免费入口 | 久久中文字幕一区 | 一区二区三区欧美在线 | 国产精品久久久久久一区二区三区 | 成人精品鲁一区一区二区 | 精品国产一区二区在线 | 久久精品国内 | 亚洲成人一区二区 | 一本久久a久久精品亚洲 |