STM32简介
STM32系列是由意法半导体公司推出的ARM Cortex-M内核单片机,从字面上来看,ST为意法半导体公司的缩写,M是Microcontrollers即单片机的缩写,32代表32位
芯片系列
STM32系列芯片分类
STM32后缀的型号说明
模块准备
STM8S103F3P6
STM8S芯片,20引脚,8KB闪存,TSSOP封装,工作温度为-40℃到85℃。
这块芯片属于8位的低成本STM系列芯片,每个芯片成本不到10元,STM8S103F3P6在淘宝卖3元不到一个。
STM8和STM32的区别,很显然,一个是8位的,一个是32位的,在写STM8和STM32代码的过程中,我感受到的最大区别就是PLL,STM8是没有PLL(倍频器)这东西的,STM32的倍频和分频的概念理解得我头大,STM8相对来说就简单有一些了,STM32的外设也丰富得多,如果学会了STM32,再回头学习STM8非常容易,STM8也适合做一些相对简单的电路。
STM32F103RET6
STM32芯片,64引脚,512KB闪存,QFP封装,工作温度为-40℃到85℃。
STM32F103RCT6
STM32芯片,64引脚,256KB闪存,QFP封装,工作温度为-40℃到85℃。
STM32F103C8T6
STM32芯片,48引脚,64KB闪存,QFP封装,工作温度为-40℃到85℃。
STM32F767IGT6
STM32芯片,176引脚,1024KB闪存,QFP封装,工作温度为-40℃到85℃。
硬件开发前准备的设备
正品艾德克斯IT6720/IT6721直流稳压电源
宝工(Pro'skit) MT-1232 3 3/4 防护型多功能自动数字万用表
放大镜20倍支架焊接台
优利德数字示波器100m双通道示波器
数显调温拆焊台柔和旋转风热风枪
936恒温烙铁
其它零碎的元件
面包板、洞洞板、电源芯片、二极管、三极管、STM32的烧录座等等
学习动机及目标
现在是2019年了,明年5G正式商用,随着IPv6的逐渐普及,智能设备将开启万物互联的模式,作为一名有理想有抱负的软件/Web全栈工程师,也希望能拥抱物联网。
最初萌发想学习硬件开发的想法,是因为看了《钢铁侠》,托尼·史塔克利用智能管家贾维斯进行辅助研发Mark战甲,管理家里的所有家电,可以帮托尼联系武器公司定制材料,可以提供各种信息查询等等。
这可把我羡慕死了,心里萌发了想做一个自己的智能管家的想法。
最初是从图像识别和语音识别方面着手,申请了讯飞和百度的语音识别接口,后来发现云端识别实时性太差了,从语音发出到设备接受命令并处理,整个过程至少需要1-3秒的时间才能完成,这在我看来是无法忍受的。
因而想到何不自己做离线的语音识别,于是搜索学习了相关的资料,发现基于神经网络的图像识别和语音识别算法的正确率最高,深度学习需要线性代数、微分、统计学、概率论等为基础的,于是买了好几本不同的线性代数教材,下班后窝在宿舍学习、上网易公开课看可汗学院的微积分视频教程,陆陆续续学习了三个月,自己用Python基于CNN实现了手写数字的识别、手指数识别,手指的识别准确率有点惨不忍睹。
后来再看RNN和LSTM,想做NLP,因为在我看来,所有语音识别的结果都会是文字,NLP处理这些文字并做出反馈、最后生成语音消息播放出来,在后续的学习过程中,我发现这些算法所需的数学基础越来越高,凭借自己半桶水都不到的数学水平、再加上无人指导的尴尬局面,学习效率非常非常低,再加上工作忙的原因,几乎放弃学习了。不过中途做了一项挺有趣的事,因为训练聊天机器人的NLP模型,需要大量语料来训练,于是我基于开源了的易语言版的半成品安卓QQ模拟客户端,花了三个月时间实现了Python版的安卓机器人,QQ加密协议方面是最耗时的,通过Wireshark抓取了很多闭源的QQ机器人,终于实现了安卓QQ的加密协议,只是有个诡异的问题一直无法解决,每次模拟登陆安卓QQ后,过一阵子会自动掉线,这个掉线时间无法确定,不知道问题出在哪儿了,但也懒得探究了,Python版安卓QQ实现之后,我创建一个小号QQ加入了很多千人群,通过半年的时间收集了几千万条聊天记录和数百万张表情包链接(表情包似乎是CDN缓存的,会失效),在几乎放弃深度学习后,这些资料也就没用了。
那年应该是2017年,AI股大热正是那一年,被鼓吹为“人工智能元年”,可惜截至今天(2019年5月),所谓的AI本质仍然属于统计学的范畴,属于有多少人工,就有多少智能的阶段。
我买的小爱同学,无法理解上下文内容、基于云端的语音识别速度慢,准确率也不高,还限制了只有米家生态链上的智能设备才能控制,无法DIY,就应用上来说,家里利用率非常低。
至于对硬件感兴趣,还得从Arduino说起,在贴吧的Arduino吧知道了这款开源硬件,然后发现DIY硬件竟是如此的简单,买个温湿度传感器模块,连上三根线(VCC,GND,DATA),给Arduino接通USB到电脑,在Arduino IDE编写十行左右的代码并烧录到Arduino就可以获取周围的温度和湿度,这极大的激发了我对硬件DIY的兴趣,试想,我可以给Arduino接入WIFI模块和其它传感器模块,通过语音控制Python服务端与Arduino做交互获取周围的温湿度、控制继电模块操作220V灯的亮灭,通过红外线模块控制空调、电视等电器等等应用,这简直太酷了!后来还陆续购入的树莓派等硬件作为服务端设备,折腾了一年多,开始想着产品化,使自己DIY的工具让更多人能用上(其实主因还是想着多一条未来能恰饭的路子),最后发现这些终究算是“玩具”,虽然社区庞大,但不管是体积还是性能,都不如专业的单片机芯片,比如实现一个语音唤醒词识别的算法,利用STM32一款20-30块的芯片就能跑起来,以Arduino系列的性能,可能需要采购300块以上的Arduino mega2560才能实现,成本差距太大了!
作为程序员,据前辈的说法,程序员的职业生涯一般只有35岁,很多35岁的程序员要么转行,要么转管理岗,因为年纪太大写不动代码了,加不动班,熬夜熬不过年轻人,而做硬件的则不一样,一般是越老越值钱,虽然我对35岁论这点有些嗤之以鼻,但正所谓狡兔三窟,多一条出路总归是没错的,而这一条路也正是我喜欢的,也是未来万物互联的历史趋势。
我也不忘初心,希望能研发出像贾维斯那样的智能管家。
一切,就从STM32开始吧!