你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32构建的Pyboard板上使用Python编程的大体流程,超简单

[复制链接]
源地1号 发布时间:2019-7-3 00:15
本帖最后由 源地1号 于 2019-7-3 11:02 编辑

还是在推广STM32组成的Pyboard,使用Python语言编程,一旦领悟其流程后,简单程度让人发指,学习者明显感受到自己的智商受到了侮辱,我x,这样就行!这样就完了!这xx就OK了!相见恨晚的言论不绝于耳。
人生苦短,快用Python!!
这句话放在这里,我们分析一下,在STM32构建的Pyboard(PYB)硬件平台上,使用Python编程到底简单在什么地方。 1、代码量少了,代码容易读了,容易理解了,也容易改了,代码相比于c语言大大降低,这是因为mpy库化的原因,将验证的控制细节程序打包成库直接调用就行,c语言一般都是从底层干起,例如写个STM32控制W5500的程序用户代码算到调用的官方库和w5500库都在300行以上,mpy就十几行代码。
c语言.jpg
python.png
代码少了,排查BUG的效率大大增加,
代码少了,所谓的写代码就变成了粘贴复制改参数了,
代码少了,程序猿脱发就少了,有时间看孩子找对象了,
代码少了,老板们产品上市周期短了,发财就更迅速了,
2、编写代码的软件简单了,由于Python解释器内置于STM32芯片内,这就不想C语言那样需要编译连接了,代码也少,也不需要文件组织软件了,这两方面,决定了使用Python开发任何文本编辑软件就行,不需要什么IDE(MDK  KEIL  IAR等)。
代码编写过程简单了,就不需要安装体积臃肿的IDE,电脑的空间就更大了,几乎任何一台电脑都能编写代码修改代码,甚至使用云编写都可以。
3、调试下载简单了使用C语言的时候可能还用到Jlink,stlink,脱机下载器什么的调试下载器,PYB现在插上电脑就可以生成U盘打开就能编辑,编辑完点保存就行,这一步相对于下载烧录程序,生成的虚拟串口来进行调试(REPL)或查看打印信息,巨方便。
4、报错机制简单了,如果程序有BUG可以很容易的通过REPL进行报错,很智能。
5、教程简单了,用户所谓的例程,短短的一个帖子就能说完,这个帖子最下边列出基本的应用例程。
我暂时总结了上边几点,再有什么心得体会再补充。
--------------------------------------------------------------------------------------------------
硬件认识:
pyboard_usb_micro.jpg
开发流程图:
py流程图2.png
写代码用的轻量级专业脚本编写软件sublime Text:
ST.png
REPL交互调试用的串口调试软件:
REPLC.png
-----------------------------------------------------------------------------------------------------
基本功能代码示例(直接粘贴复制验证):
uPython(μPython,MPY)基本功能代码示例:
基本控制代码:
   import pyb
    pyb.repl_uart(pyb.UART(1, 9600)) #duplicate REPL on UART(1)
    pyb.wfi() # pause CPU, waiting forinterrupt
    pyb.freq() # get CPU and bus frequencies
    pyb.freq(60000000) # set CPU freq to 60MHz
    pyb.stop() # stop CPU, waiting for externalinterrupt

延时和定时
----------------
    import time

    time.sleep(1)           # sleep for 1 second
    time.sleep_ms(500)      # sleep for 500 milliseconds
    time.sleep_us(10)       # sleep for 10 microseconds
    start = time.ticks_ms() # get value ofmillisecond counter
    delta = time.ticks_diff(time.ticks_ms(),start) # compute time difference
板载LED控制
-------------
    from pyb import LED

    led = LED(1) # 1=red, 2=green, 3=yellow,4=blue
    led.toggle()
    led.on()
    led.off()

    # LEDs 3 and 4 support PWM intensity(0-255)
    LED(4).intensity()    # get intensity
    LED(4).intensity(128) # set intensity tohalf

板子用户按键
---------------
    frompyb import Switch

    sw = Switch()
    sw.value() # returns True or False
    sw.callback(lambda: pyb.LED(1).toggle())

引脚和通用输入输出引脚控制
-------------
    from pyb import Pin

    p_out = Pin('X1', Pin.OUT_PP)
    p_out.high()
    p_out.low()

    p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
    p_in.value() # get value, 0 or 1

舵机控制
-------------
    from pyb import Servo

    s1 = Servo(1) # servo on position 1 (X1,VIN, GND)
    s1.angle(45) # move to 45 degrees
    s1.angle(-60, 1500) # move to -60 degreesin 1500ms
    s1.speed(50) # for continuous rotationservos

外部中断
-------------------
    from pyb import Pin, ExtInt

    callback = lambda e:print("intr")
    ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING,Pin.PULL_NONE, callback)

定时器
------
    from pyb import Timer

    tim = Timer(1, freq=1000)
    tim.counter() # get counter value
    tim.freq(0.5) # 0.5 Hz
    tim.callback(lambda t: pyb.LED(1).toggle())

RTC (实时时钟)
---------------------
    from pyb import RTC

    rtc = RTC()
    rtc.datetime((2017, 8, 23, 1, 12, 48, 0,0)) # set a specific date and time
    rtc.datetime() # get date and time

PWM (脉宽调制输出)
----------------------------
    from pyb import Pin, Timer

    p = Pin('X1') # X1 has TIM2, CH1
    tim = Timer(2, freq=1000)
    ch = tim.channel(1, Timer.PWM, pin=p)
    ch.pulse_width_percent(50)

ADC (模数转换)
----------------------------------
    from pyb import Pin, ADC

    adc = ADC(Pin('X19'))
    adc.read() # read value, 0-4095

DAC (数模转换)
----------------------------------
    from pyb import Pin, DAC

    dac = DAC(Pin('X5'))
    dac.write(120) # output between 0 and 255

UART (串口)
-----------------
    from pyb import UART

    uart = UART(1, 9600)
    uart.write('hello')
    uart.read(5) # read up to 5 bytes

SPI 总线
-------
    from pyb import SPI

    spi = SPI(1, SPI.MASTER, baudrate=200000,polarity=1, phase=0)
    spi.send('hello')
    spi.recv(5) # receive 5 bytes on the bus
    spi.send_recv('hello') # send and receive 5bytes

I2C 总线
-------
    from pyb import I2C

    i2c = I2C(1, I2C.MASTER, baudrate=100000)
    i2c.scan() # returns list of slaveaddresses
    i2c.send('hello', 0x42) # send 5 bytes toslave with address 0x42
    i2c.recv(5, 0x42) # receive 5 bytes fromslave
    i2c.mem_read(2, 0x42, 0x10) # read 2 bytesfrom slave 0x42, slave memory 0x10
    i2c.mem_write('xy', 0x42, 0x10) # write 2bytes to slave 0x42, slave memory 0x10

CAN 总线
---------------------------------
    from pyb import CAN

    can = CAN(1, CAN.LOOPBACK)
    can.setfilter(0, CAN.LIST16, 0, (123, 124,125, 126))
    can.send('message!', 123)   # send a message with id 123
    can.recv(0)                 # receive message on FIFO 0

板载加速度传感器
----------------------
    from pyb import Accel

    accel = Accel()
    print(accel.x(), accel.y(), accel.z(),accel.tilt())




收藏 1 评论2 发布时间:2019-7-3 00:15

举报

2个回答
STMCU 回答时间:2019-7-15 16:24:22
谢谢分享
shaoziyang 回答时间:2019-7-18 10:21:50
使用mpy编程,简单快速。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版