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

使用Python在STM32平台上高效编程快速应用1:人生苦短快用Python  

[复制链接]
源地1号 发布时间:2019-6-6 11:57
本帖最后由 源地1号 于 2019-6-7 22:29 编辑
6 w5 b' I6 T0 f7 m
& b3 P2 h3 J5 ^/ _: i背景:传统印象中,使用STM32流程:在IDE环境下,使用C语言,编写,编译,链接,调试,修改,烧录过程。乍一听,使用Pyhton语言完成STM32编程和应用是不是一脸懵逼,当你熟悉了在STM32平台上使用python编程后,会情不自禁地怒吼道:卧靠,还能这样用,太爽了!) L0 \# G; z* [: ?/ R0 o1 O' l
来来来,我先给大家讲一个用生命换来渴望使用Python开发STM32的故事(如有雷同,纯属巧合),请大家收起所有的疑问和不解,认真看一遍下述过程,感受一下+ o6 c! i. ~; A1 x
9 a# u4 S/ Y, y2 \- v4 f
提供的硬件upython板子
/ s9 `/ c! p0 D-----------------------
! e$ i) i7 H: k8 r# f8 q/ N+ BMCU:STM32F405RGT6
9 W$ y5 C4 v# {: ~5 R外部主晶振:12M( p6 m* k1 C* V7 l1 U' |/ q9 k
外部RTC晶振:32.768K
) _) m8 ^3 E' k板子上有4个LED灯7 I, a/ w( }6 q
老板的要求,小A(程序猿)的板砖
8 k8 b( ]  U- q9 b9 Z) ?-----------------------
% f* ~" x8 ]3 t5 @- h老板:使用RTC实时时钟,先校准时间,在时间走到每一分钟的第9秒时,点亮一盏灯,在每一分钟的第21秒时熄灭这盏灯,例如在,2019年6月5日07点59分9秒时,灯会亮起,2019年6月5日07点59分21秒时,灯会熄灭,等待下一分钟的第9秒时,再次点亮,一次次循环。
, f' V) m; k7 J8 F+ e小A:老板还挺懂!嘿嘿……小的退下,7天内保证完成。
' ]8 U; `; s8 \' g( b( e老板:7天!!!不行啊我赶时间去和客户吹牛,给你10分钟,代码不能超过10行,不行话,卷铺盖走人……- @( a" z9 u+ s! X0 Z+ N  E/ V
小A默默地掏出了珍藏多年的板砖,怒吼道:欺人太甚,今天你要是不给演示一下,10分钟内,10行代码完成项目,一砖两命!!!
$ v6 [3 m/ b6 y/ v  m5 {" W老板见此状,屈服于小A的淫威,为小A开始演示。4 T7 A7 U" r1 e% W* ^
演示过程+ g3 K. ^6 y& J4 ~5 a9 r2 c9 N  \
-----------------------* h5 g: }  g7 |4 w! f/ M
老板颤颤巍巍的拿出来从某宝上源地工作室购买的uPython板子,连接好USB线,/ }+ j3 Q$ c- W9 U2 ~$ L
pyboard_usb_micro.jpg
4 _+ |' ^$ b3 e叮咚电脑响了一下,生成了一个U盘,老板迅速地打开U盘,找到其中一个叫main.py的文件,双击用记事本打开了(其实用其他专业脚本打开更好,老板为保命节省时间,就没切换软件)
# W! ^* |3 g  {- P! T噼里啪啦敲入如下代码
- i  c0 m- W# q: k9 W" p- }::
$ W' b" A  I; j; E3 b* {5 c; A! s        pyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0))  0 u! O/ I% N2 [7 ?: M- _
        while True:2 q( ^9 E/ U' _
          time1=int((((str(pyb.RTC().datetime()))[23:25]).replace(',','')))3 H1 c4 U# a) O4 s$ O/ k1 I, R
          if(time1==9):7 p9 D% I/ A' a5 Z
            pyb.LED(2).on()
# A# @+ L& l7 M; ?0 o% [: t          if(time1==21):) P! U8 U8 z& J7 ~8 J  k) o
            pyb.LED(2).off()
" T( X# L' v; i/ p$ g) t6 q5 p          pyb.delay(500)
: N" A' ?& p* q- x! ^正好8行代码,然后,老板激动的手,点击了保存(相对于传统意义烧写程序),板子上的LED提示保存完毕,上电重启(按复位也行),两人捏着手表读秒,变态的应用实现了!!老板的狗命终于保住了,小A流下了悔恨的泪水!!说道:老板我要学使用Python语言在STM32硬件平台之上实现高效编程与快速应用,人生苦短,我也要用Python……代码分析(很重要奥,建议仔细观赏)/ o4 f, D- i! D( w$ t, T
-----------------------  
! Y5 j, Q; l' w. S, N, E# D$ Q3 L同志们会发这个段代码就像一段程序片段,不像一个应用的全部代码,其实不然,这确实是一段完成度很高的程序工程,如果使用C语言编写这个应用的话不算加载的官方库函数,代码保守估计起码在300行以上,代码包括各种包含声明,变量声明,外设初始化,晶振配置程序,应用代码等,短短的8行代码就能实现,这就Python的魅力,人生苦短,快用Pyhton 诠释的一点也没有错。
& s0 z! o7 r+ {' mpyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0)) 这段代码是给uPython授时,就是校表,授时完成后就开始走表了
+ N/ R# A  S4 c' E9 p$ t/ I你会发现这段代码上没有什么函数声明啊,变量什么啊,这就是Python的规则了,Python语言的一个原则就是用的时候你再声明,其实写这段代码的时候就在声明了,这个C语言不一样,多说一句,C语言讨好硬件这个“傻子”,Python是把人当“懒货” ,回到这行代码上,告诉板子现在地球时间是 2014年5月1号,星期4,13时,0分,0秒,0毫秒,校准时间,其实Python语言也是有包含声明的,这段代码也可以这样写,
0 E. g2 D  _6 P3 a& J3 {2 ^1 i# K7 Ffrom pyb import RTC- n2 N" k0 l2 {* e
rtc = RTC()
$ K6 @2 U, _2 M+ Y4 e- {rtc.datetime((2014, 5, 1, 4, 13, 0, 0, 0))
9 t1 I* x. ~  b! @( ^是不是很容易理解了,为了节目效果我们完全可以用这段代码代替
1 v( L' E$ d& Y- E- g6 J  ~& ?pyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0)) ! W9 ^" ^6 `8 y, R
python语言也是可以加载外部函数的,这有点涉及Python的知识,建议查阅其他详细资料,你只要明白 pyb. 有这个东西就不用 from……import……了。
3 H% x1 Z$ T5 ?4 ywhile True:  y& `  b  b. o) G3 H2 K1 v
没什么可讲的,循环
4 Q" X+ s( z( N' g3 ptime1=int((((str(pyb.RTC().datetime()))[23:25]).replace(',','')))
7 f5 m8 p1 N7 Q! U这行代码NB了,睁大眼睛,你可能永远不会在C语言中见到的神迹,咱们一点一点分析这行代码,
! ^# Z, A1 }. V; ^% O) [2 Ypyb.RTC().datetime()意思是喂,板子现在什么时间?
8 w8 g# g, b  k: Y3 M板子会给你如下答复: a8 {# l6 F! x3 M- O
(2014, 5, 1, 4, 13, 0, 0, 0)
) y) Y  [4 ]1 m2 V) I前面加个STR转换,好做处理数据,咱们的目的是提取多少秒了,使用[23:25]截取秒数数值,这里有个问题就是这个23到25这个可能在单位数时保留逗号,例如((2014, 5, 1, 4, 13, 0, 7, 0))  截取的数据是7,逗号也不是数啊,也没有用啊,就用replace(',','')将逗号去掉,这样你time1 得到数据就是 0~59的到时秒数了,Python处理数据流简直是老狗一枚,C语言哭晕在厕所~~~
0 T& j; C' D: l7 t$ y& F          if(time1==9):! n. X  F! _: H* W- q& |
            pyb.LED(2).on()6 l& r2 R5 r, P
          if(time1==21):
1 g& z2 ~) o. u- d+ [            pyb.LED(2).off()
1 E( X1 v0 p% i. Z5 j/ t$ X% X          pyb.delay(500)
( A( c- |) m% t3 o. ]
这段代码,我相信就不用过多解释了吧!各位老板 都是明白吧!
0 [7 W$ Y9 S( o; Q" @9 q# L, z
7 R7 i  f5 z; P' b- U" M接下来我会在贵论坛,相继发布Python语言如何在STM32平台上各种应用和各种问题答疑,往请各位老板多多捧场,关注,打赏,投币
3 |  Z4 R9 V3 \0 ~* D1 H
& O6 G1 n4 a$ n! J1 C

评分

参与人数 1 ST金币 +10 收起 理由
STMCU + 10 多谢分享

查看全部评分

赞 收藏 4 评论34 发布时间:2019-6-6 11:57

举报

34个回答
源地1号 回答时间:2019-6-10 19:37:14
huangxuejia-292 发表于 2019-6-10 17:16
$ Q4 \& ?2 s" M8 S$ [. a应用层确实可以考虑用python,或者说,用脚本。开发速度快,更新灵活。但效率很低。" V0 ^! ^3 K3 _
如果真正做项目,除了p ...
7 }/ f1 u% V" s7 S& K  _( ~0 {3 `, Q
STM32可以使用Python是硬件性能过剩的产物,确实牺牲了些效率,但是开发应用更加顺滑,就像电脑一样,新电脑一般都是装个系统,在系统之上运行自己应用,使用这一套系统可以入门Python ,熟悉电路知识,类似 Arduino学习和使用,一些应用确实可以使用Python开发,简单快速
源地1号 回答时间:2019-6-12 21:16:06
shaoziyang 发表于 2019-6-12 09:09
! K" o! @* q: x  W$ b这是PYB的高仿板吧

/ O) ?+ s1 v) K5 G  P! K0 B3 Y9 v6 j开源圈里没有高仿这个词,该版本与pyboard官网的标准版大体是一样的也称为标准版本,使用芯片都是STM32F405RGT6,我们的标准版与官网的标准版还是有一点点区别的:# E; e' A$ ~/ U/ H$ Q. X
修改了用户按键抖动的bug(加了一个电容到下拉)
% ?/ c! ]: D, J在板子边缘增加了电源指示灯,虽然看起来破坏了原有的外观,如果不想要这个功能可以用钳子掰去(邮票孔设计非常方便掰去)
3 W; k- M# r' O& ~8 e: m# _考虑到有很多用户是拿来作为传统核心板开发的,我们在板子另一边的边缘增加了SWD接口,方便接入例如 j-link或者stlink调试器,不用也可以方便的掰去
4 U1 i6 \9 A$ |# C3 Q在官方原版中如果你想刷固件,需要用金属导体短接boot0与3.3v,非常不方便,我们创新的加入了boot0按键,只要按着boot0按键再按一下rst复位就可以进入USB通讯下的dfu模式,非常方便刷固件或其他程序
源地1号 回答时间:2019-6-12 21:16:46
shaoziyang 发表于 2019-6-12 09:09
  m. U0 Z- m/ B& k这是PYB的高仿板吧

7 `+ M5 `7 f9 |" @该版本与pyboard官网的标准版大体是一样的也称为标准版本,使用芯片都是STM32F405RGT6,我们的标准版与官网的标准版还是有一点点区别的:! t! w/ ^# C/ H7 Q) _' n
修改了用户按键抖动的bug(加了一个电容到下拉)3 T1 R; y9 y5 Y
在板子边缘增加了电源指示灯,虽然看起来破坏了原有的外观,如果不想要这个功能可以用钳子掰去(邮票孔设计非常方便掰去)
1 o8 s  _& A7 i考虑到有很多用户是拿来作为传统核心板开发的,我们在板子另一边的边缘增加了SWD接口,方便接入例如 j-link或者stlink调试器,不用也可以方便的掰去6 d) Y; B, f/ l4 q
在官方原版中如果你想刷固件,需要用金属导体短接boot0与3.3v,非常不方便,我们创新的加入了boot0按键,只要按着boot0按键再按一下rst复位就可以进入USB通讯下的dfu模式,非常方便刷固件或其他程序
zhdzhd 回答时间:2019-6-6 21:55:17
这段子牛逼啊
五哥1 回答时间:2019-6-7 00:28:47
谢谢分享
网络孤客 回答时间:2019-6-7 11:28:10
牛,支持其他板吗?
源地1号 回答时间:2019-6-7 21:41:57
ldptest 发表于 2019-6-7 11:28
/ y2 ]$ X+ }1 o1 C( P7 W* O8 C牛,支持其他板吗?

: E+ y* E3 G' M' tpython语言实现是将一个类似于系统的固件(MicroPython)植入到STM23芯片中,在此基础上实现Python语言编程控制,目的是高效编程,快速应用,基本上STM32F4系列以上的都是可以适配这个系统的,不要理解为任何STM32系列,或者没有植入这个系统的STM32就能用Python了,谢谢支持—源地工作
MrJiu 回答时间:2019-6-7 21:42:21
看起来很牛逼,问题就来了,点亮个灯,驱动外设没啥问题。。。问题是如何把这些东西变成项目,这就难度来了!!!
源地1号 回答时间:2019-6-8 10:28:48
MrJiu 发表于 2019-6-7 21:42  ]) x5 n, X" F. w$ N) w
看起来很牛逼,问题就来了,点亮个灯,驱动外设没啥问题。。。问题是如何把这些东西变成项目,这就难度来了 ...

! {& r- I' C' O只有明确这一点,所有的外部输入无非就是 串口,iic spi,can,ADC,GPIO, 并口 对外输出无非是 串口 iic spi,can,dac,GPIO,并口  对它们简单应用了,不论什么实际应用  编程就可以实现高效编程,快速应用
海迹天涯 回答时间:2019-6-10 11:22:02
卧槽,牛逼啊感觉学起来
wujique 回答时间:2019-6-10 17:16:13
应用层确实可以考虑用python,或者说,用脚本。开发速度快,更新灵活。但效率很低。
* J2 R; Y. q0 z7 p7 y' Z如果真正做项目,除了python,也可以考虑lua。
3 @' c* x$ L9 G( _, c2 B/ Z5 |8 I如果要效率,甚至可以内置tcc。. h4 Z+ ?% P- ]% D0 d
或者是考虑动态加载。3 U5 l( M# ^" c* I% i1 d

9 U$ L+ S9 d" p1 P但是没有那个公司制作应用吧?
- R; x! D* e& V# a. ?4 r嵌入式不就是强硬件相关吗?
9 J! ?8 w- V, P6 D我不认为嵌入式会出现一套硬件标准。
6 \! x4 C9 u/ f5 L
milton6799 回答时间:2019-6-11 11:16:05
卧槽,牛逼 stm32居然也能這樣子開發,長知識了
源地1号 回答时间:2019-6-11 11:45:19
milton6799 发表于 2019-6-11 11:16( ]& L( T: ~% Z
卧槽,牛逼 stm32居然也能這樣子開發,長知識了

  a, Y+ x) K/ ~& R6 l& p$ s2 W后续还有很多例程敬请期待
七哥 回答时间:2019-6-11 12:55:26
段子很遛,是MicoPython吧
源地1号 回答时间:2019-6-11 13:15:30
toofree 发表于 2019-6-11 12:55% z2 ~8 n1 ^' G; [. T
段子很遛,是MicoPython吧
6 O0 J6 ?5 `- P$ q3 G+ ]( _0 o: X: `
是的,是MICROPYTHON,其实我们很想提micropython,可是最近工作室遭遇到国内友商的商标投诉,我们也不敢问,也不知道为什么,开源技术术语 ,怎么就成了牟利的私有财产了
Kevin_G 回答时间:2019-6-11 15:37:17
大神!学习下
123下一页

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版