tag 标签: python

相关帖子
相关博文
  • 热度 4
    2020-9-24 13:42
    1003 次阅读|
    1 个评论
    安装python 可以在这里下载最新版本 安装包 去Python官网(https://www.python.org/)上下载你自己想要的版本 解压安装包 点击python-3.7.0-amd64 .双击安装程序,建议自定义安装路径,并且让它自动添加路径,要不然还要手动添加路径.之后一直 点“下一步“就行了。 验证一下是否安装成功 打开cmd,输入python,出现以下提示,大功告成 安装pycharm 安装包 PyCharm 请根据机器是64位还是32位来选择对应的PyCharm版本。 可以去PyCharm官网:https://www.jetbrains.com下载对应机器的安装包。 安装包下载 第一步:进入PyCharm官网,点击Tools,如下图所示: 第二步:点击“PyCharm”,进入安装包现在页面,如下图所示: 第三步:点击“DOWNLOAD NOW”,根据自己需要下载匹配的操作系统的安装包,如下图所示: 第四步:等待安装包下载完,运行即可。 pycharm安装过程 第一步:找到下载好的PyCharm安装包,如下图所示“ 第二步:双击已下载的PyCharm安装包,出现如下图所示的界面,点击“next” 第三步:选择安装目录,Pycharm需要的内存较多,建议将其安装在D盘或者E盘,不建议放在系统盘C盘: 第四步:点击Next,进入下图的界面: 数字1:create desktop shortcut(创建桌面快捷方式),系统32位就选32-bit,系统64位就选64-bit。现在大多数都是64位了,不清楚系统类型:我的电脑=》右键=》属性 笔者的电脑是64位系统,所以选择64位。 数字2:update path variable(restart needed)更新路径变量(需要重新启动),add launchers dir to the path(将启动器目录添加到路径中)。上一个PyCharm版本没有的,所以没有选择。 数字3:update context menu(更新上下文菜单),add open folder as project(添加打开文件夹作为项目)。上一个PyCharm版本没有的,所以没有选择。 数字4:create associations 创建关联,关联.py文件,双击都是以pycharm打开。 数字5:不要选,我第一次安装的时候就是勾选了,差点放弃。pycharn是国外的软件,网站就是国外,下载速度很慢。有人选上等一两个小时,我等半小时,直接强制关掉。没勾选安装很快完成。把数字1和数字4勾选就好,数字2和数字3看你自己需求。(数字5如果有需求,自己可以单独去官网下载安装JRE) 5. 第五步:点击Next,进入下图界面: 默认安装即可,直接点击Install。 6. 第六步:耐心的等待两分钟左右,如下图: 第七步:之后就会得到下面的安装完成的界面: 第八步:点击Finish,Pycharm安装完成。接下来对Pycharm进行配置,双击运行桌面上的Pycharm图标,进入下图界面: 从哪里导入pycharm设置,直接第三个(Do not import settings),以后还可以导入。选择Do not import settings,之后选择OK,进入下一步。 第九步:勾选I confirm that… ,界面如下: 第十步:点击“continue”,界面如下: 第十一步:数据分享,界面如下: 这个相当于一个问卷调查吧,看自己愿不愿将信息发送JetBrains来提升他们产品的质量 第十一步:点击“send”或者“Don’t send”。进入如下界面: 皮肤选择,建议选择Darcula主题,该主题更有利于保护眼睛,而且看上去也非常不错~~~ 第十二步:可以右上角关掉,也可以左下角:skip remaining and set defaults(跳过其余和设置默认值) 第十三步:点击左下角:skip remaining and set defaults(跳过其余和设置默认值)进入激活界面,选择第二个License server,如下图所示: Active 激活分为三种:1、JetBrains Account 账户激活;2、Activation code激活码(推荐亲测);3、License server授权服务器激活(推荐) Evaluate试用 一般是30天. 安装opencv 同时按下 Windows+R 手动输入 cmd 命令行窗口 直接输入pip install opencv-python, 测试:当你进入Python IDE后,敲入import cv2,未报错,说明OpenCV库安装成功。 注: 在pycharm 中调用opencv出现的问题 出现ModuleNotFoundError: No module named ‘cv2’ 在开始时候由于自己在cmd里面用pip install 进行下载过cv2,但是在pycharm里面需要用到cv2的时候出现:ModuleNotFoundError: No module named ‘cv2’ 这样的问题, 我也是在度娘找了很多的办法,类似导入.py文件之类的办法,但是都起不到效果,后来终于在自己理解了这个东西的使用之后,解决了这个问题: 解决办法如下: 第一种方法:在pycharm里面直接下载“opencv-python”的包,直接解决。 第二种方法(第一种方法不成功,可以尝试) 首先:打卡开自己机子上的pycharm,在file 选项里面找到Setting选项(如图) 点进去以后找到(如图)的按钮 点击以后有两个选项(add / show all),选择show all 的 选项,点击箭头所指的图标 进去以后是如图所示 点击右上角的+号,将自己下载的python路径下的site-packages文件夹路径放在这里就好了,类似上图我的一样,然后应用这个配置就好啦, 如果项目还报错,就重启一下就好啦。 2. img = cv2.imread(“D:/123.jpg”) “cv2不识别相对路径,需要为绝对路径,格式如上行 ” 后续 关注我的公众号
  • 热度 5
    2020-4-11 10:33
    942 次阅读|
    1 个评论
    【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
    1、hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython import sys for i in range(0, 2): print("hello micropython") print("hello ", end="micropython\n") print("implementation:", sys.implementation) print("platform:", sys.platform) print("path:", sys.path) print("Python version:", sys.version) print("please input string, end with Enter") r = sys.stdin.readline() w_len = sys.stdout.write(r) sys – 系统特定功能模块(标准库之一) sys.implementation——包含有关当前Python实现的信息的对象 系统:micropython 固件:V0.5.0 sys.platform——运行 MicroPython 的平台 平台:MaixPy sys.path——用于搜索导入模块的可变目录列表 路径: sys.version——实现的 Python 版本, 返回一个字符串 Python版本:3.4.0 sys.stdin——标准输入 sys.stdout——标准输出 2、查询闪存目录 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之二:查询闪存目录 import uos mount_points = uos.listdir("/") for fs in mount_points: print("------------") print(" dir:", fs) uos.listdir("/"+fs) uos – 基本的“操作系统”服务模块(标准库) uos.ilistdir( ) 此函数返回一个迭代器,然后生成与列出的目录中的条目对应的元组。如果不传参数,它列出了当前目录,否则它列出了dir给出的目录。 dir: flash 3、JSON编码和解码 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之三:JSON编码和解码 import ujson json_str = '''{ "name": "sipeed", "babies": }''' obj = ujson.loads(json_str) print(obj ) print(obj ) ujson –编码和解码模块(标准库) 该模块实现了相应 CPython 模块的子集,允许在 Python 对象和 JSON 数据格式之间进行转换。 load ujson.load(stream) 解析给定的流,将其解释为 JSON 字符串并将数据反序列化为 Python 对象。返回结果对象。解析继续,直到遇到文件结尾。如果未正确形成流中的数据,则会引发 ValueError。 loads ujson.loads(str) 解析JSON str并返回一个对象。如果字符串格式出错,则引发ValueError。 4、thread多线程 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之四:thread多线程 import _thread import time def func(name): while 1: print("hello {}".format(name)) time.sleep(1) _thread.start_new_thread(func,("1",)) _thread.start_new_thread(func,("2",)) while 1: pass _thread多线程支持模块 该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语-多个控件线程共享其全局数据空间。为了进行同步,提供了简单的锁(也称为互斥体或二进制信号量)。该threading模块提供了易于使用的功能,并在此模块之上构建了更高级别的线程API。 _thread.start_new_thread(函数,args ) 启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数 功能。可选的 kwargs参数指定关键字参数的字典。当函数返回时,线程以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。 5、更新频率演示 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之五:更新频率演示 from Maix import freq cpu_freq, kpu_freq = freq.get() print(cpu_freq, kpu_freq) freq.set(cpu = 400, pll1=400, kpu_div = 1) 6、引脚索引 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之六:引脚索引 from board import board_info wifi_en_pin = board_info.WIFI_EN print(wifi_en_pin)#输出为8 board_info.pin_map()#打印所有 board_info.pin_map(8)#只打印8号引脚的信息 board_info内置库 主要用于方便用户使用开发板引脚配置,其中内置了对人友好的命名及接口,可以使用户减少对电器连接原理图的依赖。是内部定义的一个 Board_Info 全局变量, 使用 MicroPython 语法编写。 引脚索引 主要是将数字转换为人类友好的字符串,让用户方便编程。输入以下,请注意不要忽略 . 号,然后按下 tab键 进行补全,可以看到板级相关的引脚功能 board_info. 比如 输入以下代码,将返回数字 8,代表的是开发板的第8号引脚,其电器连接是wifi模块的使能引脚 board_info.WIFI_EN 查找方法 当用户不清楚引脚电器连接时,可以使用该方法查找 board_info.pin_map(pin_num) 参数 该方法不传入参数或者传入一个参数 pin_num: 引脚编号,范围 当不传入参数时,将打印所有引脚的板级电气连接信息,传入参数时,仅打印指定引脚的板级电气连接信息。 7、定时3秒后打印信息 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之七:定时3秒后打印信息 from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_ONE_SHOT, period=3000, callback=on_timer, arg=on_timer) print("period:",tim.period()) machine.Timer函数 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。 MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。 共有 3 个定时器, 每个定时器有 4 个通道可以使用。 参数 id: Timer ID, (Timer.TIMER0~TIMER2) channel: Timer 通道, mode: Timer 模式, MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM period: Timer 周期, 在启动定时器后 period 时间, 回调函数将会被调用,(0,~) unit: 设置周期的单位,默认位毫秒(ms),Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者Timer.UNIT_NS callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg,更多请看arg参数解释 注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作 arg: 希望传给回调函数的参数,作为回调函数的第二个参数 start: 是否在对象构建成功后立即开始定时器, True:立即开始, False:不立即开启,需要调用start()函数来启动定时器 priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是 , 值越小优先级越高 div: 硬件定时器分频器,取值范围 , 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1) clk_timer*period(unit:s) 应该 =1 8、每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之八:每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 import time from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1, unit=Timer.UNIT_S, callback=on_timer, arg=on_timer, start=False, priority=1, div=0) print("period:",tim.period()) tim.start() time.sleep(5) tim.stop() time.sleep(5) tim.restart() time.sleep(5) tim.stop() del tim machine.Timer 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。共有 3 个定时器, 每个定时器有 4 个通道可以使用。 常量 TIMER0: Timer0 id TIMER1: Timer1 id TIMER2: Timer2 id CHANNEL0: Timer 通道 0 CHANNEL1: Timer 通道 1 CHANNEL2: Timer 通道 2 CHANNEL3: Timer 通道 3 MODE_ONE_SHOT: Timer 只运行一次(回调一次) MODE_PERIODIC: Timer 始终运行(连续回调) MODE_PWM: 定时器不用来回调函数,用以产生PWM UNIT_S: 单位秒 (s) UNIT_MS: 单位毫秒 (ms) UNIT_US: 单位微秒 (us) UNIT_NS: 单位纳秒 (ns) 9、SPI 基本读写 MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之九:SPI 基本读写 from machine import SPI spi1 = SPI(SPI.SPI1, mode=SPI.MODE_MASTER, baudrate=10000000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=28, mosi=29, miso=30, cs0=27) w = b'1234' r = bytearray(4) spi1.write(w) spi1.write(w, cs=SPI.CS0) spi1.write_readinto(w, r) spi1.read(5, write=0x00) spi1.readinto(r, write=0x00) machine.SPI SPI(Serial Peripheral Interface) 是一个同步串行协议,由主机和从机组成。 标准4线模式由 SCK(SCLK), CS(片选), MOSI, MISO 4条线连接主从机 在 K210 上, SPI 有一下特征: 共有 4 个 SPI 设备, 其中 SPI0 、SPI1、 SPI3 只能工作在主机模式下, SPI2 只能工作在从机模式时下, 在 MaixPy 上, SPI3已经用来连接了 SPI Flash, 暂时保留, 以后如果有必要再考虑开放接口与 SPI Flash 分时复用 支持 1/2/4/8 线全双工模式, 在 MaixPy 中, 目前只支持标准(摩托罗拉)4线全双工模式(即 SCK, MOSI, MISO, CS 四个引脚) 最高传输速率45M 支持DMA 4个可配置任意引脚的硬件片选
  • 热度 2
    2019-10-21 11:05
    1382 次阅读|
    1 个评论
    By Toradex 秦海 1). 简介 随着 Python 在互联网人工智能领域的流行,大家也慢慢感受到 Python 开发的便利,本文就基于嵌入式 ARM 平台,介绍使用 Python 配合 PyQT5 模块来开发图形化应用程序。 本文所演示的 ARM 平台来自于 Toradex 基于 NXP iMX6 ARM 处理器的 Apalis iMX6 ARM 嵌入式平台。 2. 准备 a). Apalis iMX6Q ARM 核心版配合 Apalis Evaluation Board 载板 ,连接调试串口 UART1 (载板 X29 )到开发主机方便调试。更多关于 Apalis iMX6 配合 Apalis Evaluation Board 载板的说明请参考 Datasheet 和 开发上手指南 。 b). Apalis iMX6Q 默认的 Linux BSP 是不包含 Python , QT 等支持的,需要重新编译。 ./ 基于 Toradex Linux BSP release V2.8 ./ 参考 这里 搭建 Openembedded 编译环境,然后适配下面 patch ,用于使本文测试需要的 libsoc 适配 Python3 。 https://github.com/simonqin09/libsoc-examples/blob/master/python/0005-libsoc-python3-support.patch ./ 修改 build/conf/local.conf 文件,增加需要的组件 -------------------------- #IMAGE_INSTALL_append = " python3 python3-pip python3-libsoc python3-pyqt5 rng-tools " -------------------------- ./ 适配下面 patch ,在标准 image bb 文件中增加 QT5 的支持 https://github.com/simonqin09/libsoc-examples/blob/master/python/0003-angstrom-qt5-lxde-image.patch ./ 重新编译 image -------------------------- $ bitbake -k angstrom-qt5-lxde-image -------------------------- ./ 新生成的 image 位于 deploy/images/apalis-imx6/ 目录,参考 这里 的说明更新到 Apalis iMX6 模块上面 3). Python GPIO 中断测试程序 a). 首先我们先不包含图形界面,单独通过 Python 来完成简单的 GPIO 中断测试程序,本程序通过调用 libsoc 来完成 GPIO 控制,关于 libsoc 的使用和说明请参考 这里 。 b). Apalis Evaluation Board 载板硬件连接配置如下, X4 GPIO05(MXM3_11) 对应系统中的 GPIO 号码是 170 ,作为按键输入使用; X4 GPIO06(MXM3_13) 对应系统中的 GPIO 号码是 169 ,作为输出驱动 LED 使用。 X4 GPIO05 X34 SW5 X4 GPIO06 X34 LED1 c). 源代码请参考如下,分别实现了阻塞模式和非阻塞模式中断相应,实现功能就是按键交替点亮和关闭 LED 灯。 ./ 阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_block.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出; test_interrupt_handler 函数实现中断相应,采用 gpio_in.wait_for_interrupt 为阻塞式中断,捕获中断才会继续进行,捕获中断后做了简单的防误触处理。 ./ 非阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_nonblock.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出;另外,在 main 函数里面采用 gpio_in.start_interrupt_handler 来使能中断相应,为非阻塞式;在 main 函数最后通过 while 来接收键盘输入实现退出应用; gpio_in.wait_for_interrupt 依然作为中断处理函数相应中断并驱动 LED 状态改变。 d). 将 Python 代码直接复制到 Apalis iMX6 上面测试运行结果如下: ./ 阻塞模式下,最后是通过 Ctrl-C 强制退出程序 ----------------------- root@apalis-imx6:~# ./gpiotest_block.py The LED initial status is ON The LED turns OFF interrupt times is 1 The LED turns ON interrupt times is 2 ^Clibsoc-gpio-debug: Interrupted system call Traceback (most recent call last): File "./gpiotest_block.py", line 54, in main(gpio_input_id, gpio_output_id) File "./gpiotest_block.py", line 45, in main test_interrupt_handler(gpio_in, gpio_out) File "./gpiotest_block.py", line 12, in test_interrupt_handler gpio_in.wait_for_interrupt(-1) File "/usr/lib/python3.5/site-packages/libsoc/gpio.py", line 118, in wait_for_interrupt if api.libsoc_gpio_wait_interrupt(self._gpio, timeout) != 0: KeyboardInterrupt ----------------------- ./ 非阻塞模式下 ----------------------- root@apalis-imx6:~# ./gpiotest_nonblock.py The LED initial status is ON please enter 'Q' to quit The LED turns OFF The LED turns ON The LED turns OFF Q Do you really want to quit? yes or no yes root@apalis-imx6:~# ----------------------- 4). 使用 PyQt5 实现图形化界面 GPIO 中断程序 a). 硬件配置和连接和上面的测试场景一致。 b). 为了方便开发 PyQt5 界面,首先通过 Qtcreator 创建如下 QWidget 项目 UI 界面 // LED Status 右边的 QFrame 方框以及 QLable 用于显示 LED 当前的状态 // ‘Turn ON’ 和 ’Turn OFF’ 两个 PushButton 用于通过界面控制 LED 状态, ’Exit’ PushButton 用于退出程序 ./ 最终的 UI 源代码参考如下,将对应的 mainwindow.ui 文件复制到 Apalis iMX6 Python 应用相同路径下 https://github.com/simonqin09/libsoc-examples/blob/master/python/mainwindow.ui c). 程序源代码参考如下: https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_pyqt5.py 说明如下: ./ class ApplicationWindow 用于实现 Qt5 界面以及相关按键操作: // 首先通过 loadUi 函数来加载之前制作好的 UI 文件 mainwindow.ui ,然后初始化界面显示,连接各个按键对应的处理程序 // 最后开启一个新的 Qthread 线程 self.thread ,用于处理外部 GPIO 按键中断相应,连接新线程反馈信号的处理程序,最后启动新线程 // LedStatusChange 函数为处理新线程反馈回来的 LED 状态变化信号而同步改变界面显示状态的函数 // Button_On_clicked 和 Button_Off_clicked 函数用于根据界面按键的点击来对应改变 LED GPIO 输出以及界面显示的函数 // Button_Exit_clicked 和 closeEvent 函数用于处理退出程序包括子线程的退出等相关的函数 ./ class gpioInterrupt 为用于处理 GPIO 中断同时对于改变 LED GPIO 输出以及将 LED 状态变化反馈给界面主程序 // 首先定义反馈信号,并初始化所需要使用的 GPIO 引脚 // run 函数部分基本就是上面第 3 章节的阻塞模式 Python 应用的代码,这里就不做赘述了 d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./gpiotest_pyqt5.py The LED initial status is ON set LOW set HIGH The LED turns OFF button clicked for setting LOW The LED turns ON button clicked for setting HIGH root@apalis-imx6:~# ----------------------- 5). 总结 如上述示例,使用 Python 和 PyQt5 非常方便了创建一个嵌入式界面应用程序示例,相对于传统 C 语言开机要配置交叉编译环境,整个流程更加快捷方便,同时在实现比较简单的控制的时候其运行效率也是可以接受的,另外 Python 还可以集成大量的组件方便开发,就更加简化了比如设计机器视觉、人工智能等领域的嵌入式应用开发流程。
  • 热度 13
    2019-6-4 22:54
    33174 次阅读|
    3 个评论
    前言 板子申请了也有一段时间了,也快到评测截止时间了,想着做点有意思的东西,正好前一段时间看到过可以在MCU上移植MicroPython的示例,就自己尝试一下,记录移植过程。 MicroPython是什么 程序猿中有句俗语: 人生苦短,我用Python 。Python的强大和易用性让它不仅可以写网站,编程序,在嵌入式领域也有一席之地。 MicroPython ,是Python3编程语言的一个完整软件实现,包括Python标准库的一小部分,用C语言编写,经过优化可在微控制器和受限环境中运行。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。 MicroPython官方网站: MicroPython - Python for microcontrollers ( http://www.micropython.org/ ) MicroPython中文社区: micropython - 中文社区( http://www.micropython.org.cn/bbs/ ) MicroPython支持的开发板 从官方网站我们可以了解到,官方开发板主要有以下几种: PYB Nano V1.1基于STM32F401 PYB Nano V2基于STM32F411 PyBoard CN V2基于STM32F405 MicroPython ESP32 另外还支持其他系列的开发板: WiPy ESP8266 boards ESP32 boards STM32F4 Discovery board NUCLEO-F401RE board NUCLEO-F411RE board NUCLEO-F767ZI board NUCLEO-L476RG board Espruino Pico MicroPython移植和板子关系不大,主要支持的是芯片,如果自己的板子芯片是上面的这些型号,也可以刷MicroPython固件,对应的IO口需要更改,而且需要重新编译生成对应的固件。具体操作方法可以查看:官方Github地址:https://github.com/micropython/micropython,里面包括了源代码和Linux下的编译方法。开发板固件下载: MicroPython downloads( http://www.micropython.org/download ) Nucleo-F411RE移植MicroPython固件 正好MicroPython支持本次申请的 Nucleo-F411RE开发板 ,就试着把刷成MicroPython的固件,尝试一下使用Python来开发STM32,具体移植过程。 1.准备工作 支持Nucleo-F411RE的MicroPython固件: NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ( http://www.micropython.org/resources/firmware/NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ) 用于STM32 DFU下载的软件: STSW_STM32080_V3.0.6.zip ( https://comm.eefocus.com/media/download/index/id-1015890 ) PUTTY串口终端: putty-64bit-0.71-installer.msi ( https://the.earth.li/~sgtatham/putty/0.71/w64/putty-64bit-0.71-installer.msi ) 2.安装Dfu下载软件 下载完成后,安装DFU下载软件DfuSeDemo,非常简单,一路Next就行,在选择安装目录时,可以选择非系统盘。 3.硬件连接 由于Nucleo-F411RE板子的USB口是连接到ST-Link调试器,并没有一个连接到STM32 USB引脚的接口,所以我使用的是这种转接板,把USB的5个信号转接成5个排针,并和板子上的引脚连接: 转接板 开发板 VBUS 3.3 D- PA11 D+ PA12 IO GND GND GND 4.烧录MicroPython固件 和串口下载程序一样,使用DFU烧录固件前,也要先把STM32切换为 系统存储器启动模式 :即下载模式。上电之前要先设置BOOT0=1,BOOT1(PB2)=0,然后烧录MicroPython固件。 设置完成之后,连接电脑,设备管理会出现一个DFU设备 打开DfuSeDemo软件,选择已经下载的固件: NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ( http://www.micropython.org/resources/firmware/NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ) 点击Upgrade升级,在弹出的界面,点击“是”。 等待升级完成,断电,把BOOT短接线拔掉,重新上电。 5.安装Putty 安装Putty,打开串口终端,选择ST-Link虚拟串口号,波特率115200 按一下板子上的黑色复位按键,串口输出: MicroPython v1.11-12-g6077d1715 on 2019-06-03; NUCLEO-F411RE with STM32F411xE Type "help()" for more information. help() Welcome to MicroPython! For online help please visit http://micropython.org/help/. Quick overview of commands for the board: pyb.info() -- print some general information pyb.delay(n) -- wait for n milliseconds pyb.millis() -- get number of milliseconds since hard reset pyb.Switch() -- create a switch object Switch methods: (), callback(f) pyb.LED(n) -- create an LED object for LED n (n=1,2,3,4) LED methods: on(), off(), toggle(), intensity( ) pyb.Pin(pin) -- get a pin, eg pyb.Pin('X1') pyb.Pin(pin, m, ) -- get a pin and configure it for IO mode m, pull mode p Pin methods: init(..), value( ), high(), low() pyb.ExtInt(pin, m, p, callback) -- create an external interrupt object pyb.ADC(pin) -- make an analog object from a pin ADC methods: read(), read_timed(buf, freq) pyb.DAC(port) -- make a DAC object DAC methods: triangle(freq), write(n), write_timed(buf, freq) pyb.RTC() -- make an RTC object; methods: datetime( ) pyb.rng() -- get a 30-bit hardware random number pyb.Servo(n) -- create Servo object for servo n (n=1,2,3,4) Servo methods: calibration(..), angle( ]), speed( ]) pyb.Accel() -- create an Accelerometer object Accelerometer methods: x(), y(), z(), tilt(), filtered_xyz() Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n) Control commands: CTRL-A -- on a blank line, enter raw REPL mode CTRL-B -- on a blank line, enter normal REPL mode CTRL-C -- interrupt a running program CTRL-D -- on a blank line, do a soft reset of the board CTRL-E -- on a blank line, enter paste mode For further help on a specific object, type help(obj) For a list of available modules, type help('modules') 6.开始Python开发之旅——点亮一个LED 点亮板载的绿色LED,串口输入命令点亮和熄灭LED pyb.LED(1).on() pyb.LED(1).off() pyb.LED(1).on() 更多Python控制外设的命令: Quick reference for the pyboard ( http://docs.micropython.org/en/latest/pyboard/quickref.html ) 参考资料 Micropython学习(二)STM32移植( https://blog.csdn.net/bobo184/article/details/84174990 ) 我的博客文章链接: http://www.wangchaochao.top/2019/06/04/Nucleo-F411RE-2/
相关资源
广告