
本帖最后由 源地1号 于 2019-6-7 22:29 编辑 % g8 L2 d! s4 u% V8 l0 p 背景:传统印象中,使用STM32流程:在IDE环境下,使用C语言,编写,编译,链接,调试,修改,烧录过程。乍一听,使用Pyhton语言完成STM32编程和应用是不是一脸懵逼,当你熟悉了在STM32平台上使用python编程后,会情不自禁地怒吼道:卧靠,还能这样用,太爽了!7 t2 v s- Z# \ X- H! L 来来来,我先给大家讲一个用生命换来渴望使用Python开发STM32的故事(如有雷同,纯属巧合),请大家收起所有的疑问和不解,认真看一遍下述过程,感受一下 提供的硬件upython板子 -----------------------7 A" a3 P& c6 F% V1 B MCU:STM32F405RGT61 [- N. z1 O; @" X2 d0 w& a 外部主晶振:12M 外部RTC晶振:32.768K 板子上有4个LED灯 老板的要求,小A(程序猿)的板砖 -----------------------" e% T# @3 f0 ` 老板:使用RTC实时时钟,先校准时间,在时间走到每一分钟的第9秒时,点亮一盏灯,在每一分钟的第21秒时熄灭这盏灯,例如在,2019年6月5日07点59分9秒时,灯会亮起,2019年6月5日07点59分21秒时,灯会熄灭,等待下一分钟的第9秒时,再次点亮,一次次循环。 小A:老板还挺懂!嘿嘿……小的退下,7天内保证完成。 老板:7天!!!不行啊我赶时间去和客户吹牛,给你10分钟,代码不能超过10行,不行话,卷铺盖走人……4 [+ {/ u! e* \3 v' f 小A默默地掏出了珍藏多年的板砖,怒吼道:欺人太甚,今天你要是不给演示一下,10分钟内,10行代码完成项目,一砖两命!!! 老板见此状,屈服于小A的淫威,为小A开始演示。1 u9 N' @3 k8 v. l2 G 演示过程* J1 T& \' n4 v1 ] -----------------------5 `: w# T( V: Y 老板颤颤巍巍的拿出来从某宝上源地工作室购买的uPython板子,连接好USB线,. s1 n( k; Z' q4 J7 P B( w ![]() 叮咚电脑响了一下,生成了一个U盘,老板迅速地打开U盘,找到其中一个叫main.py的文件,双击用记事本打开了(其实用其他专业脚本打开更好,老板为保命节省时间,就没切换软件)! j1 o1 ~8 M. I4 T2 y 噼里啪啦敲入如下代码7 e8 w/ l- v8 _# J1 M :: pyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0)) while True: time1=int((((str(pyb.RTC().datetime()))[23:25]).replace(',',''))) if(time1==9):* v+ e8 O7 Q+ L% a& ?( i# Z4 _( {9 b pyb.LED(2).on()$ B5 J. @0 w* n* S3 n- y. O" F if(time1==21): pyb.LED(2).off() pyb.delay(500)& P8 W9 H/ q5 G2 ]6 V 正好8行代码,然后,老板激动的手,点击了保存(相对于传统意义烧写程序),板子上的LED提示保存完毕,上电重启(按复位也行),两人捏着手表读秒,变态的应用实现了!!老板的狗命终于保住了,小A流下了悔恨的泪水!!说道:老板我要学使用Python语言在STM32硬件平台之上实现高效编程与快速应用,人生苦短,我也要用Python……代码分析(很重要奥,建议仔细观赏)! F" w4 r$ ~( K$ B r, M ----------------------- , A+ r& ^) X/ c# v, g 同志们会发这个段代码就像一段程序片段,不像一个应用的全部代码,其实不然,这确实是一段完成度很高的程序工程,如果使用C语言编写这个应用的话不算加载的官方库函数,代码保守估计起码在300行以上,代码包括各种包含声明,变量声明,外设初始化,晶振配置程序,应用代码等,短短的8行代码就能实现,这就Python的魅力,人生苦短,快用Pyhton 诠释的一点也没有错。0 O- P6 n4 I- `3 M1 ?# V pyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0)) 这段代码是给uPython授时,就是校表,授时完成后就开始走表了' [$ m1 r0 N2 j" ~ R9 j# W# b' ] 你会发现这段代码上没有什么函数声明啊,变量什么啊,这就是Python的规则了,Python语言的一个原则就是用的时候你再声明,其实写这段代码的时候就在声明了,这个C语言不一样,多说一句,C语言讨好硬件这个“傻子”,Python是把人当“懒货” ,回到这行代码上,告诉板子现在地球时间是 2014年5月1号,星期4,13时,0分,0秒,0毫秒,校准时间,其实Python语言也是有包含声明的,这段代码也可以这样写,, O4 j6 `; x9 U, v: }, J from pyb import RTC$ b2 Z' B9 M/ V1 T+ D3 X# Y) O rtc = RTC() rtc.datetime((2014, 5, 1, 4, 13, 0, 0, 0))1 s, c' W5 P5 t+ c2 c: L8 U 是不是很容易理解了,为了节目效果我们完全可以用这段代码代替 pyb.RTC().datetime((2014, 5, 1, 4, 13, 0, 0, 0)) 4 L) U: G" P0 p4 {; ` python语言也是可以加载外部函数的,这有点涉及Python的知识,建议查阅其他详细资料,你只要明白 pyb. 有这个东西就不用 from……import……了。9 u, V; P6 F) k$ `- J N while True:& V [( q* ~- J9 \4 X8 B' f5 i 没什么可讲的,循环$ T+ J0 C( k- X5 z$ z& _ time1=int((((str(pyb.RTC().datetime()))[23:25]).replace(',','')))9 u" H, [8 v' Z- o5 c 这行代码NB了,睁大眼睛,你可能永远不会在C语言中见到的神迹,咱们一点一点分析这行代码,5 K0 M: U' y H- o/ ~; F' Z+ q pyb.RTC().datetime()意思是喂,板子现在什么时间? 板子会给你如下答复! ]+ }$ q$ v8 R) B7 z# M3 j (2014, 5, 1, 4, 13, 0, 0, 0) 前面加个STR转换,好做处理数据,咱们的目的是提取多少秒了,使用[23:25]截取秒数数值,这里有个问题就是这个23到25这个可能在单位数时保留逗号,例如((2014, 5, 1, 4, 13, 0, 7, 0)) 截取的数据是7,逗号也不是数啊,也没有用啊,就用replace(',','')将逗号去掉,这样你time1 得到数据就是 0~59的到时秒数了,Python处理数据流简直是老狗一枚,C语言哭晕在厕所~~~9 _! c ]# Z# w/ d4 n' ~4 e if(time1==9): pyb.LED(2).on()$ Y1 j) [1 Z; S8 ^ if(time1==21):* _" L6 C4 B1 _& C pyb.LED(2).off() pyb.delay(500)+ `% ]3 ^) ] Y1 D9 P6 \0 R; K 这段代码,我相信就不用过多解释了吧!各位老板 都是明白吧! 3 E, T" d/ g% M; Y; z 接下来我会在贵论坛,相继发布Python语言如何在STM32平台上各种应用和各种问题答疑,往请各位老板多多捧场,关注,打赏,投币 ![]() ![]() ![]() + E7 @. Z5 K# m3 i |
STM32F10xxx 正交编码器接口应用笔记 及源代码
基于STM32定时器ETR信号的应用示例
STM32 生态系统|基于STM32WB的低功耗蓝牙应用(一)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM32定时器触发SPI逐字收发之应用示例
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
【STM32图书分享之九】—《STM32F 32位ARM微控制器应用设计与实践》
无刷直流电机控制应用+基于STM8S系列单片机---电子书
STM32 USB的程序,包含固件、驱动和测试用的应用程序
STM32可以使用Python是硬件性能过剩的产物,确实牺牲了些效率,但是开发应用更加顺滑,就像电脑一样,新电脑一般都是装个系统,在系统之上运行自己应用,使用这一套系统可以入门Python ,熟悉电路知识,类似 Arduino学习和使用,一些应用确实可以使用Python开发,简单快速
开源圈里没有高仿这个词,该版本与pyboard官网的标准版大体是一样的也称为标准版本,使用芯片都是STM32F405RGT6,我们的标准版与官网的标准版还是有一点点区别的:
修改了用户按键抖动的bug(加了一个电容到下拉)" ?# F" \% g& s. ?% E6 [
在板子边缘增加了电源指示灯,虽然看起来破坏了原有的外观,如果不想要这个功能可以用钳子掰去(邮票孔设计非常方便掰去)
考虑到有很多用户是拿来作为传统核心板开发的,我们在板子另一边的边缘增加了SWD接口,方便接入例如 j-link或者stlink调试器,不用也可以方便的掰去' C) {2 z7 s" s2 t; O
在官方原版中如果你想刷固件,需要用金属导体短接boot0与3.3v,非常不方便,我们创新的加入了boot0按键,只要按着boot0按键再按一下rst复位就可以进入USB通讯下的dfu模式,非常方便刷固件或其他程序
该版本与pyboard官网的标准版大体是一样的也称为标准版本,使用芯片都是STM32F405RGT6,我们的标准版与官网的标准版还是有一点点区别的:9 A, G" q; t3 A5 j
修改了用户按键抖动的bug(加了一个电容到下拉)
在板子边缘增加了电源指示灯,虽然看起来破坏了原有的外观,如果不想要这个功能可以用钳子掰去(邮票孔设计非常方便掰去)
考虑到有很多用户是拿来作为传统核心板开发的,我们在板子另一边的边缘增加了SWD接口,方便接入例如 j-link或者stlink调试器,不用也可以方便的掰去
在官方原版中如果你想刷固件,需要用金属导体短接boot0与3.3v,非常不方便,我们创新的加入了boot0按键,只要按着boot0按键再按一下rst复位就可以进入USB通讯下的dfu模式,非常方便刷固件或其他程序
python语言实现是将一个类似于系统的固件(MicroPython)植入到STM23芯片中,在此基础上实现Python语言编程控制,目的是高效编程,快速应用,基本上STM32F4系列以上的都是可以适配这个系统的,不要理解为任何STM32系列,或者没有植入这个系统的STM32就能用Python了,谢谢支持—源地工作
只有明确这一点,所有的外部输入无非就是 串口,iic spi,can,ADC,GPIO, 并口 对外输出无非是 串口 iic spi,can,dac,GPIO,并口 对它们简单应用了,不论什么实际应用 编程就可以实现高效编程,快速应用
如果真正做项目,除了python,也可以考虑lua。/ G! K* n O0 x0 h8 f* w. }, j
如果要效率,甚至可以内置tcc。
或者是考虑动态加载。
但是没有那个公司制作应用吧?
嵌入式不就是强硬件相关吗?
我不认为嵌入式会出现一套硬件标准。/ Q; Y$ }$ \+ o: G; m- u- w
后续还有很多例程敬请期待
是的,是MICROPYTHON,其实我们很想提micropython,可是最近工作室遭遇到国内友商的商标投诉,我们也不敢问,也不知道为什么,开源技术术语 ,怎么就成了牟利的私有财产了