[长文干货]micropython移植到野火stm32f429开发板(代码片段)

Ray_1999 Ray_1999     2022-12-16     522

关键词:

最近通过参考网上的文章,成功将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

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

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

解决将龙邱oled库移植到野火工程里,oled汉字无法显示问题

第一,检查oled是否和单片机控制引脚正确相连。GNDVCCCLK:时钟信号misoRST:DC:DATECOMMAND/CONTROLCS:CHIPSELECT第二,检查工程里是否有要显示的字的字库。第三,如果程序编译正确,英文、字符等也显示正常,唯独中文汉字不能显示,那么... 查看详情

st开发板评测使用python来开发stm32f411(代码片段)

...点有意思的东西,正好前一段时间看到过可以在MCU上移植MicroPython的示例,就自己尝试一下,记录移植过程。MicroPython是什么程序猿中有句俗语:人生苦短,我用Python。Python的强大和易用性让它不仅可以写网站,编程序,在嵌入... 查看详情

移植micropython(代码片段)

  MicroPython项目支持多个不同的MCU或平台,他们在MicroPython的port目录里面。当我们的项目能够在port目录里面找到支持的单片机时,我们可以直接应用port目录里面的工程,但是当port目录里面没有支持我们的单片机时&... 查看详情

stm32不同开发板之间的程序代码可以相互移植吗?

...代码我可不可以在神州开发板上用呢?如果可以,要怎么移植呢?修改哪些东西呢?可以是可以,不过别人编的东西,移植起来都是比较麻烦的。主要是硬件定义,比如管脚。你先找到原来的硬件定义文件,对照新的板子修改,... 查看详情

干货总结!kafka面试大全(万字长文,37张图,28个知识点)(代码片段)

关注并标星 Kafka面试的连环问题,保证你看完后,对Kafka有了更深层次的了解。全文总结的题目之间的关联性很强,本文将通过问答+图解的形式由浅入深帮助大家进一步学习和理解Kafka分布式流式处理平台。全文总计负责保... 查看详情

移植freertos到stm32

移植FreeRTOS到STM32单片机上引言介绍什么是RTOS?为什么嵌入式设备往往使用RTOS?FreeRTOS具体步骤总结引言本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上... 查看详情

移植freertos到stm32

移植FreeRTOS到STM32单片机上引言介绍什么是RTOS?为什么嵌入式设备往往使用RTOS?FreeRTOS具体步骤总结引言本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上... 查看详情

史诗级干货长文集成学习算法(代码片段)

集成学习算法1.集成学习算法简介1.1什么是集成学习1.2复习:机器学习的两个核心任务1.3集成学习中boosting和Bagging1.4小结2.Bagging和随机森林2.1Bagging集成原理2.2随机森林构造过程2.3随机森林api介绍2.4随机森林预测案例2.5bagging集... 查看详情

史诗级干货长文线性回归算法(代码片段)

线性回归算法前言1.线性回归简介1.1线性回归应用场景1.2什么是线性回归1.2.1定义与公式1.2.2线性回归的特征与目标的关系分析2.线性回归API初步使用2.1线性回归API2.2举例2.2.1步骤分析2.2.2代码过程3.数学:求导3.1常见函数的导数3.2导... 查看详情

史诗级干货长文朴素贝叶斯(代码片段)

朴素贝叶斯学习目标1.朴素贝叶斯算法简介2.概率基础复习2.1概率定义2.2案例:判断女神对你的喜欢情况2.3联合概率、条件概率与相互独立2.4贝叶斯公式2.4.1公式介绍2.4.2案例计算2.4.3文章分类计算2.5小结3.案例:商品评论... 查看详情

stm32cubeide连接w5500模块作为tcpclient

...it单片机用的是STM32F103VE,W5500模块是淘宝买的,本例程是移植野火的代码:http://products.embedfire.com/zh_CN/latest/野火用的是STM32固件库,软件是Keil编写的。本例程是用Hal库STM32CubeIDE软件编写。 查看详情

史诗级干货长文支持向量机(代码片段)

支持向量机SVM1.SVM算法简介1.1SVM算法导入1.2SVM算法定义1.2.1定义1.2.2超平面最大间隔介绍1.2.3硬间隔和软间隔1.2.3.1硬间隔分类1.2.3.2软间隔分类1.3小结2.SVM算法API初步使用3.SVM算法原理3.1定义输入数据3.2线性可分支持向量机3.3SVM的计... 查看详情

史诗级干货长文hmm模型(代码片段)

HMM模型1.马尔科夫链1.1简介1.2经典举例1.3小结2.HMM简介2.1简单案例2.2案例进阶2.2.1问题阐述2.2.2问题解决2.2.2.1一个简单问题【对应问题2】2.2.2.2看见不可见的,破解骰子序列【对应问题1】2.2.2.3谁动了我的骰子?【对应问题3... 查看详情

史诗级干货长文k-近邻算法(代码片段)

K-近邻算法前言1.K-近邻算法简介1.1什么是K-近邻算法1.2K-近邻算法(KNN)概念1.3电影类型分析1.4KNN算法流程总结2.KNN算法API初步使用2.1Scikit-learn工具介绍2.1.1安装Scikit-learn2.1.2Scikit-learn包含的内容2.2K-近邻算法API2.3案例2.3.1步骤分析2.3.2... 查看详情

史诗级干货长文聚类算法(代码片段)

ClusteringAlgorithm1.聚类算法简介1.1认识聚类算法1.1.1聚类算法在现实中的应用1.1.2聚类算法的概念1.1.3聚类算法与分类算法最大的区别1.2小结2.聚类算法api初步使用2.1api介绍2.2案例2.2.1流程分析2.2.2代码实现2.3小结3.聚类算法实现流程4... 查看详情

史诗级干货长文决策树算法(代码片段)

决策树算法1.决策树算法简介2.决策树分类原理3.cart剪枝3.1为什么要剪枝?3.2常用的减枝方法3.2.1预剪枝3.2.2后剪枝3.3小结4.特征工程-特征提取5.决策树算法API6.案例:泰坦尼克号乘客生存预测7.回归决策树1.决策树算法简介决策... 查看详情

mindmotionmm32单片机上的micropython移植-pwm(代码片段)

...:对于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试。首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之间还存在着差异:输出频率比设置频率小... 查看详情

openharmony移植3.1版本系统到stm32(代码片段)

文章目录【OpenHarmony】STM32F407移植3.1版本系统一、前言二、开发环境三、获取源码、添加第三方依赖四、导入STM32Makefile工程五、配置编译文件六、添加工程配置文件七、修改链接脚本八、修改中断服务函数九、修改串口映射十、... 查看详情