请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
源地1号 发布时间:2019-7-3 00:15
本帖最后由 源地1号 于 2019-7-3 11:02 编辑 ' o% u/ v" j  |
; E( f2 s5 d$ n3 _; m' V' j$ J' n
还是在推广STM32组成的Pyboard,使用Python语言编程,一旦领悟其流程后,简单程度让人发指,学习者明显感受到自己的智商受到了侮辱,我x,这样就行!这样就完了!这xx就OK了!相见恨晚的言论不绝于耳。; T& z4 v4 u3 o
人生苦短,快用Python!!
1 K9 m3 P2 w$ K) y( H  l$ f1 \这句话放在这里,我们分析一下,在STM32构建的Pyboard(PYB)硬件平台上,使用Python编程到底简单在什么地方。 1、代码量少了,代码容易读了,容易理解了,也容易改了,代码相比于c语言大大降低,这是因为mpy库化的原因,将验证的控制细节程序打包成库直接调用就行,c语言一般都是从底层干起,例如写个STM32控制W5500的程序用户代码算到调用的官方库和w5500库都在300行以上,mpy就十几行代码。/ }& v5 ~6 Z* ^
c语言.jpg
8 P# p* [/ P4 e python.png
) ?" [' ^+ b; Y7 B7 W代码少了,排查BUG的效率大大增加,
: r6 p6 W) D& R1 B% F% ^2 W# J代码少了,所谓的写代码就变成了粘贴复制改参数了,
! ~: ^7 f7 ^6 E, d; ~2 X, Q! O代码少了,程序猿脱发就少了,有时间看孩子找对象了,
0 {6 C% H$ h8 k7 _1 ]( P8 W代码少了,老板们产品上市周期短了,发财就更迅速了,; N% q% z4 ~! N0 o; Y% k! e
2、编写代码的软件简单了,由于Python解释器内置于STM32芯片内,这就不想C语言那样需要编译连接了,代码也少,也不需要文件组织软件了,这两方面,决定了使用Python开发任何文本编辑软件就行,不需要什么IDE(MDK  KEIL  IAR等)。6 d# A- N- ~. K6 P  s
代码编写过程简单了,就不需要安装体积臃肿的IDE,电脑的空间就更大了,几乎任何一台电脑都能编写代码修改代码,甚至使用云编写都可以。! H, f+ F6 Q7 k2 Y& }2 A: o0 ]
3、调试下载简单了使用C语言的时候可能还用到Jlink,stlink,脱机下载器什么的调试下载器,PYB现在插上电脑就可以生成U盘打开就能编辑,编辑完点保存就行,这一步相对于下载烧录程序,生成的虚拟串口来进行调试(REPL)或查看打印信息,巨方便。3 [2 s' }# i8 c7 A: m, R
4、报错机制简单了,如果程序有BUG可以很容易的通过REPL进行报错,很智能。
& Q! Z) `+ r, @( ?5、教程简单了,用户所谓的例程,短短的一个帖子就能说完,这个帖子最下边列出基本的应用例程。2 ^# D# L3 z$ b/ h. _9 q$ u
我暂时总结了上边几点,再有什么心得体会再补充。5 P- x7 |* d; c; j1 x
--------------------------------------------------------------------------------------------------, T+ s/ x) Z3 g( `& I- W& ^6 _- L
硬件认识:
, X0 O& {; k8 m( |  S pyboard_usb_micro.jpg , p) B- |" x- {0 \/ Y  S
开发流程图:+ }* G% N7 e" w! ~  |# S
py流程图2.png
3 g* i) q0 G2 ~) w写代码用的轻量级专业脚本编写软件sublime Text:8 d7 s- g5 H+ H
ST.png ; i8 m) i3 I2 V: `% p2 ~
REPL交互调试用的串口调试软件:
, G6 q* h! ]2 E5 G1 ^1 N" F& ] REPLC.png ; z* I2 P- c% M4 l, _
-----------------------------------------------------------------------------------------------------, W. C# B- S7 h; k' F3 p4 N
基本功能代码示例(直接粘贴复制验证):/ M7 Q2 @2 P6 y- b- A3 s
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

) m: E; t6 x( a4 s/ b( ?) n9 T4 T
延时和定时
----------------
    import time

) S, N! A5 u% w8 m; V9 |8 W
    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

% Q1 I" V4 I9 e
    led = LED(1) # 1=red, 2=green, 3=yellow,4=blue
    led.toggle()
    led.on()
    led.off()
2 n, u' U1 c& J% _
    # LEDs 3 and 4 support PWM intensity(0-255)
    LED(4).intensity()    # get intensity
    LED(4).intensity(128) # set intensity tohalf
* V. g2 A- M7 q" U, E! [/ {
板子用户按键
---------------
    frompyb import Switch

$ x( ~1 V5 E! w) C
    sw = Switch()
    sw.value() # returns True or False
    sw.callback(lambda: pyb.LED(1).toggle())

% ~- @! {" k* S' N
引脚和通用输入输出引脚控制
-------------
    from pyb import Pin

! u8 X% ~$ x- j% L) Q! S" X
    p_out = Pin('X1', Pin.OUT_PP)
    p_out.high()
    p_out.low()

" S* @  H3 U& _* a5 s! I
    p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
    p_in.value() # get value, 0 or 1

* h9 @" |& A; D4 N$ s* Q6 b8 X0 [
舵机控制
-------------
    from pyb import Servo

$ \9 C, X- f( k3 C) U) [" w
    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
) q% g: X5 z' t& g- ^
外部中断
-------------------
    from pyb import Pin, ExtInt
* x0 p! g9 ]; ~: j
    callback = lambda e:print("intr")
    ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING,Pin.PULL_NONE, callback)
9 z2 ]: R# I  P* d
定时器
------
    from pyb import Timer

& H# P$ K3 a; H2 M
    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())
- }4 W( ^% b  z$ o3 M
RTC (实时时钟)
---------------------
    from pyb import RTC

% C# Q& p  d$ C; J% E
    rtc = RTC()
    rtc.datetime((2017, 8, 23, 1, 12, 48, 0,0)) # set a specific date and time
    rtc.datetime() # get date and time
! G+ b: m9 ~4 E& U8 g9 ^
PWM (脉宽调制输出)
----------------------------
    from pyb import Pin, Timer

) J0 u- m7 J  H1 {4 w& Z# m
    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)
! I/ ^# w3 \, Z+ _
ADC (模数转换)
----------------------------------
    from pyb import Pin, ADC
" i# C" m, v# P$ L( K, s
    adc = ADC(Pin('X19'))
    adc.read() # read value, 0-4095

: ^/ s3 F/ {7 l& |: g
DAC (数模转换)
----------------------------------
    from pyb import Pin, DAC
6 G. P/ a8 e0 z/ O+ b4 a
    dac = DAC(Pin('X5'))
    dac.write(120) # output between 0 and 255
. H" G  i. b+ j
UART (串口)
-----------------
    from pyb import UART

# T- a" y* L7 w# L
    uart = UART(1, 9600)
    uart.write('hello')
    uart.read(5) # read up to 5 bytes

! V- p' B, N9 T( @  n/ d& V- z
SPI 总线
-------
    from pyb import SPI

8 R) ^! s! t( p3 P7 e# \
    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
# s# M2 y  ]% `, Q) Q% r" e( m$ |
I2C 总线
-------
    from pyb import I2C
% g7 D2 K: r' J1 u( x
    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

/ s0 R* k7 T1 D
CAN 总线
---------------------------------
    from pyb import CAN
, P/ u* _/ t1 y3 K- j9 K
    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

& M0 G7 M% Y/ F; e" L; C4 F# ]
板载加速度传感器
----------------------
    from pyb import Accel
% e6 o" [5 @* I5 S( W9 C0 h
    accel = Accel()
    print(accel.x(), accel.y(), accel.z(),accel.tilt())

4 r; p% f' {- C  S9 D2 G, z: d# S% A. R" [5 n+ K
* O, j6 }2 N. T  X% h) x

4 l/ H& e1 p5 Z
收藏 1 评论2 发布时间:2019-7-3 00:15

举报

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

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版