MicroPython技术细节(问题)总结 =============================== MicroPython线程问题(_thread)? ----------------------- 在标准的MicroPython固件不含有线程功能,用户强行使用线程功能,系统会抛出错误:: MicroPython v1.9.4-775-gf350b640a on 2019-02-18; PYBv1.1-YD407VG with STM32F407VG Type "help()" for more information. >>> import _thread Traceback (most recent call last): File "", line 1, in ImportError: no module named '_thread' >>> >>> .. image:: png/线程问题.png :width: 500px 我们修改了底层程序后生成的固件有包含了线程,不过线程的工作还是有诸多的缺陷,只能实现初级功能,这也是官方固件没有包含线程功能的原因吧!我们的标准固件也是不含线程功能的,带有线程功能的固件我们也会标出带线程的字样,烧写固件时请注意。固件可以向我们客服索要,我们的网店: `upython 各种PYB版本 `_ `upython PYBV1.1标准版本 `_ `upython PYBV1.1PLUS加强版本 `_ `upython PYBV1.1mini版本 `_ MicroPython大体的开发流程? ----------------------- 概述一下开发应用的大体形式和流程,将下载好μPython固件pyboard板子通过USB线联通电脑后,正常情况下,电脑会识别为一个U盘和一个串口,如果串口没有被识别,USB盘里有串口的驱动文件,加载即可。U盘中的boot.py为启动引导文件,main.py为用户程序文件,大部分的工作是在这个文件完成的. .. only:: not latex .. image:: https://img.alicdn.com/imgextra/i2/87224073/O1CN0153skjr1fxTiZGbQDV_!!87224073.png :alt: PYBv1.0 pinout :width: 750px MicroPython怎么使用串口中断? ----------------------- 在最新版的固件中可以使用串口中断了,使用例程:: from machine import UART def UART_ISR(t): print(u.read(u.any())) return u = UART(1) u.init(baudrate, 9600) u.irq(trigger = UART.IRQ_RXIDLE, handler = UART_ISR) 注意事项: - 串口需要使用machine库的UART模块 - 设置串口参数和波特率 - 定义串口中断的触发方式和回调程序(中断程序),触发方式目前只能选择UART.IRQ_RXIDLE - 串口回调函数必须带有伪参数 - 串口回调函数需要遵循回调函数的设计原则 该知识点出处:http://bbs.eeworld.com.cn/thread-1076851-1-1.html MicroPython如何编程,烧写,调试? ----------------------- 简单到怀疑人生,可能用户之前有过嵌入开发的经历,大部分是使用C语言开发它是一种编译性语言,C语言需要使用IDE编写程序编译链接,然后下载(烧写)到芯片内,完成应用,现在使用Python语言,python是一种解释性语言,在用户拿到的pyboard(PYB,出厂固化底层Micropython固件)内部已经有了语言解释器了,用户只需要将板子插入电脑,电脑就会识别为U盘,在U盘中使用文字或者其他程序编写软件打开编程程序就行,所谓的下载就是点击保存。注意生成的U盘里有虚拟串口的驱动,安装后就可以使用虚拟串口了,使用串口调试软件可以进行对板子的控制,命令测试,像极了传统的python命令行交互,这种技术实现叫作REPL交互,在交互中可以排错,分段测试等等,简直回归到传统的python学习了。 pyborad板子无法使用串口REPL调试? ----------------------- 首先查看硬件管理器中是否有虚拟串口设备,如没有先安装驱动文件,在生成的U盘中有驱动,安装好后,在串口调试软件,应该有串口号,如果没有串口号,请关闭调试软件,板子重新上电,等上10s钟,再次打开调试软件,硬件和软件可能反应慢,如果不行多次尝试上述过程,波特率默认是115200,如果能打开串口没有打印信息,很可能是系统卡在了mian.py函数中的循环中了,打开U盘,修改一下程序(将while改为for循环),或者清空程序,保存,重新上电再次打开调试软件就行了. MicroPython报错机制? ----------------------- 编写程序难免会出错,当你写好程序,保存时,不好给你提示错误的,怎么知道一行程序出错了?我建议一个是在编写main.py文件前,先用REPL分段调试验证程序,即使最终在main.py有错误,也会在串口调试窗口提示,这时要求你一直打开REPL串口调试就行了,对了,当你编写完main.py保存后,在串口调试窗口中按CTRL+D软启动,如果有错就打印出来信息了,通过提示信息进行修改。如果程序有错误也会通过LED1,LED2灯来回闪烁来提示。 MicroPython在线图像化编程软件? ----------------------- 为了更方便的入门,我们提供汉化后的国外开源图形化编程软件,以在线的形式提供。 `在线MicroPython图形化编程地址 `_ 使用Pyboard板子保存完main.py后运行LED1和LE2接替闪烁? ----------------------- 说明main.py编程有错误,我们建议的编程顺序是:在main.py中编写程序时候,打开串口调试软件使用REPL交互编程 `REPL交互编程`_ 使用REPL的目的是: * 将程序分段在repl交互中验证是否有错误,没有错误后写入main.py中 * 全部程序在main.py完成后,在REPL中按CTRL+D软启动,如果main.py还有错误,将会在REPL中提示是什么错误,在第几行,这个功能很有用,如果没有错误就直接执行了。 MicroPython官方网站(官网)? ----------------------- http://www.micropython.org/ Pyboard(MicroPython)如何烧写固件? ----------------------- 非常容易,Pyboard(STM32)一台电脑,一条USB就能搞定,大体而言,boot引导启动,进入DFU模式,烧写固件,重新复位就行.固件可以向我们源地仪器索取,标准版本的也可以从官方下载。 MicroPython固件下载地址? ----------------------- http://www.micropython.org/download MicroPython虚拟串口驱动装不上无法设备串口怎么办? ----------------------- 解决方法:http://microchip.eefocus.com/module/forum/thread-6191-1-1.html MicroPython使用SPI串口读取spi Flash(25x40b)ID号? ----------------------- 使用SP1接口,CS是PC4:: # main.py -- put your code here! from pyb import SPI from pyb import Pin p_out = Pin('PC4', Pin.OUT_PP) p_out.low() spi = SPI(1, SPI.MASTER, baudrate=2000, polarity=0, phase=0,crc=0x7,bits=8,firstbit=SPI.MSB) spi.send(0x9f) #发送固定指令,读取指令 data=spi.recv(2) #接收id号 p_out.high() print (data)