最近通过参考网上的文章,成功将MicroPython移植到野火STM32F429开发板上,给大家分享一下自己的移植过程,可以作为STM32系列移植MicroPY的参考。

1.移植前准备工作

实验环境:WIN10 64位+Vmware Workstation虚拟机软件+Ubuntu20.04 64位 ,环境不一定要和我一致,只要是虚拟机系统是Linux系统就行

移植目标平台:野火STM32F429挑战者开发板

(1)安装Linux虚拟机

参考教程:虚拟机VMware最详细下载与安装教程!https://blog.csdn.net/zp17834994071/article/details/107137626?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162787456716780366589560%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162787456716780366589560&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-107137626.pc_search_result_control_group&utm_term=vmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187

为了便于在虚拟机和Windows直接传输文件,记得安装好VmwareTools,安装参考教程看这里:

https://blog.csdn.net/blessed_sy/article/details/81173746?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162788632916780264029069%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162788632916780264029069&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-81173746.pc_search_result_control_group&utm_term=vmwaretools&spm=1018.2226.3001.4187

(2)从git下载MicroPython源码,准备编译环境

打开Linux虚拟机的终端,并输入以下命令:

安装git

sudo apt-get install git

git安装完成后,下载MicroPython源码

git clone https://github.com/micropython/micropython

源码下载完成后,你的虚拟机的主目录(home)就会多出一个micropython文件夹,源码就在这个文件夹中。当然你也可以用其他方式下载到源码,git下载不挂VPN的话很慢,网上方法很多,自行搜索。

2.找到F429的移植文件并修改

打开micropython文件夹,进入以下路径:micropython/ports/stm32/boards

可以看到mpy官方支持的stm32开发板文件,这里我们选择STM32F429DISC进行移植,这个和野火F429开发板最相近。

复制STM32F429文件夹并重命名为FireF429-V1 (这个名字你可以随便取,只是后面编译的时候你要用你取的名字指定编译目标开发板,对应就行)

手动复制重命名自己操作就行,若要使用命令行如下:

cd ports/stm32/boards
cp -r STM32F429DISC FireF429-V1

复制重命名完成后会多出一个刚刚你命名的文件夹

进入 FireF429-V1文件夹,对照野火官方的原理图修改这三个文件:

mpconfigboard.h是板子的硬件配置文件

pins.csv是mpy的引脚映射表

stm32f4xx_hal_conf.h是f4的HAL库配置文件

(1)mpconfigboard.h修改

#define MICROPY_HW_BOARD_NAME       "FireF429-V1"
#define MICROPY_HW_MCU_NAME         "STM32F429"#define MICROPY_HW_HAS_SWITCH       (1)
#define MICROPY_HW_HAS_FLASH        (1)
#define MICROPY_HW_ENABLE_RNG       (1)
#define MICROPY_HW_ENABLE_RTC       (1)
#define MICROPY_HW_ENABLE_USB       (1)// HSE is 8MHz
#define MICROPY_HW_CLK_PLLM (25)
#define MICROPY_HW_CLK_PLLN (336)
#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
#define MICROPY_HW_CLK_PLLQ (7)#define MICROPY_HW_UART_REPL        PYB_UART_1
#define MICROPY_HW_UART_REPL_BAUD   115200// UART config
#define MICROPY_HW_UART1_TX     (pin_A9)
#define MICROPY_HW_UART1_RX     (pin_A10)
#define MICROPY_HW_UART2_TX     (pin_A2)
#define MICROPY_HW_UART2_RX     (pin_A3)
#define MICROPY_HW_UART3_TX     (pin_B10)
#define MICROPY_HW_UART3_RX     (pin_B11)
#define MICROPY_HW_UART6_TX     (pin_C6)
#define MICROPY_HW_UART6_RX     (pin_C7)// I2C buses
#define MICROPY_HW_I2C3_SCL (pin_A8)
#define MICROPY_HW_I2C3_SDA (pin_C9)// SPI buses
//#define MICROPY_HW_SPI1_NSS     (pin_A4)
//#define MICROPY_HW_SPI1_SCK     (pin_A5)
//#define MICROPY_HW_SPI1_MISO    (pin_A6)
//#define MICROPY_HW_SPI1_MOSI    (pin_A7)
#if defined(USE_USB_HS_IN_FS)
// The HS USB uses B14 & B15 for D- and D+
#else
#define MICROPY_HW_SPI2_NSS  (pin_B12)
#define MICROPY_HW_SPI2_SCK  (pin_B10)
#define MICROPY_HW_SPI2_MISO (pin_C2)
#define MICROPY_HW_SPI2_MOSI (pin_C3)
#endif
//#define MICROPY_HW_SPI4_NSS     (pin_E11)
//#define MICROPY_HW_SPI4_SCK     (pin_E12)
//#define MICROPY_HW_SPI4_MISO    (pin_E13)
//#define MICROPY_HW_SPI4_MOSI    (pin_E14)
#define MICROPY_HW_SPI5_NSS     (pin_F6)
#define MICROPY_HW_SPI5_SCK     (pin_F7)
#define MICROPY_HW_SPI5_MISO    (pin_F8)
#define MICROPY_HW_SPI5_MOSI    (pin_F9)
//#define MICROPY_HW_SPI6_NSS     (pin_G8)
//#define MICROPY_HW_SPI6_SCK     (pin_G13)
//#define MICROPY_HW_SPI6_MISO    (pin_G12)
//#define MICROPY_HW_SPI6_MOSI    (pin_G14)// CAN buses
#define MICROPY_HW_CAN1_TX (pin_A12)
#define MICROPY_HW_CAN1_RX (pin_A11)
#define MICROPY_HW_CAN2_TX (pin_B6)
#define MICROPY_HW_CAN2_RX (pin_B5)// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN        (pin_A0)
#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)
#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)
#define MICROPY_HW_USRSW_PRESSED    (1)// LEDs
#define MICROPY_HW_LED1             (pin_H10) // red
#define MICROPY_HW_LED2             (pin_H11) // green
#define MICROPY_HW_LED3             (pin_H12) // BLUE
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))// USB config
#define MICROPY_HW_USB_HS              (1)
#define MICROPY_HW_USB_HS_IN_FS        (1)
#define MICROPY_HW_USB_OTG_ID_PIN      (pin_B12)// SDRAM
#define MICROPY_HW_SDRAM_SIZE  (64 / 8 * 1024 * 1024)  // 64 Mbit
#define MICROPY_HW_SDRAM_STARTUP_TEST             (1)
#define MICROPY_HEAP_START  ((sdram_valid) ? sdram_start() : &_heap_start)
#define MICROPY_HEAP_END    ((sdram_valid) ? sdram_end() : &_heap_end)// Timing configuration for 90 Mhz (11.90ns) of SD clock frequency (180Mhz/2)
#define MICROPY_HW_SDRAM_TIMING_TMRD        (2)
#define MICROPY_HW_SDRAM_TIMING_TXSR        (7)
#define MICROPY_HW_SDRAM_TIMING_TRAS        (4)
#define MICROPY_HW_SDRAM_TIMING_TRC         (7)
#define MICROPY_HW_SDRAM_TIMING_TWR         (2)
#define MICROPY_HW_SDRAM_TIMING_TRP         (2)
#define MICROPY_HW_SDRAM_TIMING_TRCD        (2)
#define MICROPY_HW_SDRAM_REFRESH_RATE       (64) // ms#define MICROPY_HW_SDRAM_BURST_LENGTH       2
#define MICROPY_HW_SDRAM_CAS_LATENCY        3
#define MICROPY_HW_SDRAM_COLUMN_BITS_NUM    8
#define MICROPY_HW_SDRAM_ROW_BITS_NUM       12
#define MICROPY_HW_SDRAM_MEM_BUS_WIDTH      16
#define MICROPY_HW_SDRAM_INTERN_BANKS_NUM   4
#define MICROPY_HW_SDRAM_CLOCK_PERIOD       2
#define MICROPY_HW_SDRAM_RPIPE_DELAY        1
#define MICROPY_HW_SDRAM_RBURST             (0)
#define MICROPY_HW_SDRAM_WRITE_PROTECTION   (0)
#define MICROPY_HW_SDRAM_AUTOREFRESH_NUM    (4)#define MICROPY_HW_FMC_SDCKE1   (pin_B5)
#define MICROPY_HW_FMC_SDNE1    (pin_B6)
#define MICROPY_HW_FMC_SDCLK    (pin_G8)
#define MICROPY_HW_FMC_SDNCAS   (pin_G15)
#define MICROPY_HW_FMC_SDNRAS   (pin_F11)
#define MICROPY_HW_FMC_SDNWE    (pin_C0)
#define MICROPY_HW_FMC_BA0      (pin_G4)
#define MICROPY_HW_FMC_BA1      (pin_G5)
#define MICROPY_HW_FMC_NBL0     (pin_E0)
#define MICROPY_HW_FMC_NBL1     (pin_E1)
#define MICROPY_HW_FMC_A0       (pin_F0)
#define MICROPY_HW_FMC_A1       (pin_F1)
#define MICROPY_HW_FMC_A2       (pin_F2)
#define MICROPY_HW_FMC_A3       (pin_F3)
#define MICROPY_HW_FMC_A4       (pin_F4)
#define MICROPY_HW_FMC_A5       (pin_F5)
#define MICROPY_HW_FMC_A6       (pin_F12)
#define MICROPY_HW_FMC_A7       (pin_F13)
#define MICROPY_HW_FMC_A8       (pin_F14)
#define MICROPY_HW_FMC_A9       (pin_F15)
#define MICROPY_HW_FMC_A10      (pin_G0)
#define MICROPY_HW_FMC_A11      (pin_G1)
#define MICROPY_HW_FMC_D0       (pin_D14)
#define MICROPY_HW_FMC_D1       (pin_D15)
#define MICROPY_HW_FMC_D2       (pin_D0)
#define MICROPY_HW_FMC_D3       (pin_D1)
#define MICROPY_HW_FMC_D4       (pin_E7)
#define MICROPY_HW_FMC_D5       (pin_E8)
#define MICROPY_HW_FMC_D6       (pin_E9)
#define MICROPY_HW_FMC_D7       (pin_E10)
#define MICROPY_HW_FMC_D8       (pin_E11)
#define MICROPY_HW_FMC_D9       (pin_E12)
#define MICROPY_HW_FMC_D10      (pin_E13)
#define MICROPY_HW_FMC_D11      (pin_E14)
#define MICROPY_HW_FMC_D12      (pin_E15)
#define MICROPY_HW_FMC_D13      (pin_D8)
#define MICROPY_HW_FMC_D14      (pin_D9)
#define MICROPY_HW_FMC_D15      (pin_D10)

这是我修改好的文件,可以直接粘贴过去使用,我修改了时钟配置,串口引脚,LED引脚和其余外设的引脚,我这里是根据野火提供的开发板资料里的底板原理图和F429英文数据手册对应修改的,大家移植其他板子时也按照相应资料对应修改就行。

初步的移植修改考虑时钟,串口USART和USB就行,跑起来以后再去修改其他引脚。

大家可以看看STM32F429DISC中的和我修改后的有什么不同。移植成功的关键在于修改时钟参数,野火F429的外部时钟是25Mhz,我这里将时钟输出设置为168M,是为了兼容USB外设的FS模式,这是F429的一个奇葩设计,大家可以参考火哥的教程,里面有提到,相关参考文章:https://blog.csdn.net/flyleaf91/article/details/52325499

这里的USB是使用的HS模式,大家移植过程中要注意看使用的HS还是FS,这两个引脚不同,主要看自己的板子引出的是哪些引脚。

(2)pins.csv修改

这个文件用office软件打开,对应着你在mpconfigboard.h文件中做的修改进行改动就行了。以下是我的修改,大家可以参考着修改。

PF4  PF4
PF5 PF5
PF2 PF2
PF3 PF3
PF0 PF0
PF1 PF1
PC14    PC14
PC15    PC15
PE6 PE6
PC13    PC13
PE4 PE4
PE5 PE5
PE2 PE2
PE3 PE3
PE0 PE0
PE1 PE1
PB8 PB8
PB9 PB9
PB6 PB6
PB7 PB7
PB4 PB4
PB5 PB5
PG15    PG15
PB3 PB3
PG13    PG13
PG14    PG14
PG11    PG11
PG12    PG12
PG9 PG9
PG10    PG10
PD7 PD7
PD6 PD6
PD5 PD5
PD4 PD4
PD3 PD3
PD2 PD2
PD1 PD1
PD0 PD0
PC12    PC12
PC11    PC11
PC10    PC10
PA15    PA15
PA14    PA14
PA13    PA13
PA12    PA12
PA11    PA11
PA10    PA10
PA9 PA9
PA8 PA8
PC9 PC9
PC8 PC8
PC7 PC7
PC6 PC6
PG8 PG8
PG7 PG7
PG6 PG6
PG5 PG5
PG4 PG4
PF6 PF6
PF8 PF8
PF7 PF7
PF10    PF10
PF9 PF9
PH1 PH1
PH0 PH0
PC1 PC1
PC0 PC0
PC3 PC3
PC2 PC2
PA1 PA1
PA0 PA0
PA3 PA3
PA2 PA2
PA5 PA5
PA4 PA4
PA7 PA7
PA6 PA6
PC5 PC5
PC4 PC4
PB1 PB1
PB0 PB0
PB2 PB2
PF12    PF12
PF11    PF11
PF14    PF14
PF13    PF13
PG0 PG0
PF15    PF15
PE7 PE7
PG1 PG1
PE9 PE9
PE8 PE8
PE11    PE11
PE10    PE10
PE13    PE13
PE12    PE12
PE15    PE15
PE14    PE14
PB11    PB11
PB10    PB10
PB13    PB13
PB12    PB12
PB15    PB15
PB14    PB14
PD9 PD9
PD8 PD8
PD11    PD11
PD10    PD10
PD13    PD13
PD12    PD12
PD15    PD15
PD14    PD14
PG3 PG3
PG2 PG2
SW  PA0
LED_GREEN   PG13
LED_RED PG14
LED_BLUE    PD12

(3)stm32f4xx_hal_conf.h修改

这个文件就对应着你修改的时钟频率参数,修改第一个外部时钟参数就行了,这里我对应着修改到25Mhz

/* This file is part of the MicroPython project, http://micropython.org/* The MIT License (MIT)* Copyright (c) 2019 Damien P. George*/
#ifndef MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H
#define MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H#include "boards/stm32f4xx_hal_conf_base.h"// Oscillator values in Hz
#define HSE_VALUE (25000000)
#define LSE_VALUE (32768)
#define EXTERNAL_CLOCK_VALUE (12288000)// Oscillator timeouts in ms
#define HSE_STARTUP_TIMEOUT (100)
#define LSE_STARTUP_TIMEOUT (5000)#endif // MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H

到这里,最重要的一步---移植文件就修改完成了,后续就是编译源码并下载到开发板就行了

3.编译源代码

编译之前需要先配置好交叉编译环境,安装gcc和gcc-arm-none-eabi交叉编译器,

在终端中依次输入命令完成交叉编译器的安装:

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

回到源码目录micropython下,进入mpy-cross目录,先编译MicroPython cross-compiler(很多开发板需要先编译好mpy-cross 然后才能成功编译Micropython ),在终端中依次输入命令:

cd mpy-cross
make

回到micropython目录,输入下列命令将源码中的一些子模块submoudle下载下来:

git init
git submodule update --init

以上工作完成后,我们就可以开始编译刚刚修改好的STM32F429 Mpy源码啦!!!

进入stm32目录下执行以下命令进行编译,生成我们所需要的固件文件:DFU格式,HEX格式,ELF格式以及BIN格式。

cd ports/stm32/
make BOARD=FireF429-V1 PYTHON=python3

BOARD=FireF429-V1是用于指定要编译的开发板,与你之前复制重命名的文件夹名字要一致。PYTHON=python3参数可以不要,默认编译就是使用Python3,如果你的Linux虚拟机没有安装Python3请参照此文章安装:https://blog.csdn.net/L_15156024189/article/details/84831045?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162789161716780265464401%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162789161716780265464401&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-84831045.pc_search_result_control_group&utm_term=Linux%E5%AE%89%E8%A3%85python3&spm=1018.2226.3001.4187

编译完成后,会在micropython/ports/stm32文件夹里生成一个编译好的文件夹build-FireF429-V1,里面有我们下载程序所需要的固件文件:DFU格式,HEX格式,ELF格式以及BIN格式。

打开build-FireF429-V1文件夹,可以找到四个下载用的文件。

最后一步就是将程序下载到开发板验证就行啦!!

4.下载程序到开发板

上面生成的四个文件任意选择一种格式下载就行,注意:其中的bin要下载firmware1.bin才行!!!

我常用的是CoFlash软件通过CMSIS-DAP烧写bin或者elf格式文件的方式,用DfuSeDemo通过F429自带的自举bootloader下载DFU文件我也使用过,实测可以下载成功,只是这种方式比较麻烦,因为野火的F429开发板引出的是HS USB,而要下载dfu文件需要使用FS USB才能识别出来DFU模式,需要额外连线。

下面给一些文章参考这三种格式分别如何下载:

下载之前,记得将你要下载的文件发送到Windows。

(1)dfu格式下载:

https://blog.csdn.net/hbspring007/article/details/105967489?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162789256416780262584334%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162789256416780262584334&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-105967489.pc_search_result_control_group&utm_term=dfu%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

https://blog.csdn.net/wxh0000mm/article/details/108240065?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162789256416780262584334%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162789256416780262584334&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-108240065.pc_search_result_control_group&utm_term=dfu%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

因为我们已经有了DFU文件了,可以跳过参考教程里的文件格式转换部分。

F429进入DFU模式需要将boot0拉高,接3.3v,boot1拉低,接GND

接线可以参考以下截图:

 如果收拾有J-link或者cmsis-dap下载器的话,不建议用这种方式下载,太麻烦。

 特别注意!!!:下载完成后记得把boot0接回GND拉低,才能从flash启动,正常运行micropy!!!

(2)elf和bin格式下载:

CMSISI-DAP下载器:https://wenku.baidu.com/view/9e5a778f83c758f5f61fb7360b4c2e3f572725a5.html

J-LINK等其他下载器,在Coflash软件上选择对应的下载器就行了,如下图:

到此我们的MicroPython就成功下载到开发板啦!!!接下来我们验证一下是否能正常使用。

5.程序验证

程序下载完成后,给开发板断电。用两根USB线将开发板的USB HS和串口连接到电脑,如下图:

连接上电脑后,给开发板上电,如果程序正常运行,电脑会识别到一个名为PYBFLASH的U盘,

如下图所示:

打开设备管理器,可以看到两个串口设备:

打开你的Putty终端,或者下载一个MobaXterm软件,(自行搜索如何连接串口,这个太太太基础了)通过串口连接到开发板(注意波特率设置为115200),可以看到如下界面,进行人机交互:

 至此说明我们已经移植成功啦!!!下面控制一下LED试试吧!

在串口终端输入pyb.LED(1).on()

可以看到开发板上的红灯亮起!

移植完成!!!,可以开始你的micropython开发之旅啦!

micropython基础知识戳这里!!!:

https://blog.csdn.net/dmpnosvn28419/article/details/101463356

Ray-2021

如有错误请大家积极指出,我会尽快修改!

!!!!!!!转载请注明出处!!!!!!!

[长文干货]MicroPython移植到野火STM32F429开发板相关推荐

  1. 野火F1开发板STM32案例-MultiButton移植

    野火F1开发板STM32案例-MultiButton移植 硬件平台 野火STM32F103ZET6 霸道V2开发板 正点原子F1系列开发板 软件平台 Keil MDK 5.31 串口调试助手 Mult ...

  2. 【STM32F429开发板用户手册】第34章 STM32F429的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第34章       STM32F429的SPI总线应用之驱动DA ...

  3. imx6q 开发板_mplayer移植-迅为IMX6Q开发板

    0 1 mplayer简介 mplayer是一款开源多媒体播放器,以gnu通用公共许可证发布.它资源占用率低,无论是音频还是视频方面,支持的格式相当全面,支持的输出设备也很多,可以在各种主流操作系统中 ...

  4. 基于RTEMS的阿波罗STM32F429开发板(正点原子)适配

    最近忙着出差也没写什么文档,先把前段时间做的一个简单的RTEMS适配过程文档发上来供大家参考. 1.文档概述 本文档主要为描述基于正点原子的阿波罗STM32F429开发板,开展RTEMS适配的过程,以 ...

  5. mysql移植海思_live555 交叉编译移植到海思开发板

    1.首先到它的主页下载一个源码包: http://www.live555.com/liveMedia/public/ 我下载的是latest的,具体什么版本还真不清楚 2.放到linux目录下解压: ...

  6. 正点原子阿波罗STM32F429开发板资料发布,采用底板+核心板

    正点原子阿波罗STM32F429开发板资料发布,采用底板+核心板.... https://www.amobbs.com/thread-5654611-1-1.html 正点原子STM32开发板 htt ...

  7. 野火F1开发板STM32案例-USART使用

    野火F1开发板STM32-USART使用 硬件平台 野火STM32F103ZET6 霸道V2开发板 正点原子F1开发板 STM32蓝色板 软件平台 Keil MDK 5.31 串口调试助手 串口配置步 ...

  8. 野火STM32F103开发板使用串口3接收数据并通过串口2发送

    废话不多说先上最终效果图,硬件连接如下所示,野火的开发板在使用串口2和串口3时需要用黄色跳帽如下图连接: 具体代码如下所示: static void NVIC_Configuration(void) ...

  9. 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上

    在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...

最新文章

  1. oracle数据库装不成功,oracle 10.2.0.4安装 创建数据库时 em不成功需要大的补丁
  2. 打开 XP Pro SP2 远程桌面的多用户支持
  3. hadoop集群配置文件与功能对应解析
  4. linux网络基础设置
  5. C++爬虫项目爬取图片
  6. 我们为何要使用多线程,它有什么优点?
  7. leetcode1045. 买下所有产品的客户(SQL)
  8. Postman使用入门
  9. 前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例
  10. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
  11. 使用行为树(Behavior Tree)实现游戏AI
  12. C++ 求解一整数划分问题
  13. 液晶显示器测试软件6,屏幕坏点检测工具(Datum pixel repair)
  14. 牛客真题编程——day16
  15. intent跳转和转场动画
  16. 第一次见岳父岳母的攻略「转载」
  17. STM32H743内部所有SRAM的使用
  18. Vue+element ui表单中省市区级联选择—v-distpicker/Cascader
  19. 离职后心生不满、医院前网管“炫技性报复”
  20. 技术文摘9 刘 樱桃

热门文章

  1. 人工智能和区块链是什么关系?
  2. ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
  3. 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  4. c#实现打印快递单-提供源码
  5. 【51单片机】LD3320A语音识别控制设计
  6. GNURadio 3.9 使用 OOT 自定义模块问题记录
  7. 《金文女神解说VB基础入门系列视频教程》300集 第一章笔记
  8. 【2019年05月21日】A股ROE最高排名
  9. 网站域名历史记录批量查询-老域名建站历史快照数据查询
  10. P8311 [COCI2021-2022#4] Autići