为什么你学了几天 STM32感觉一脸茫然,是你的姿势不对
是的,你的感觉没错,其实你自己已经有朦胧的答案,在之前没接触过任何单片机,其实你的问题能够归结于以下几个理由:
1.MCU的根底知识了解的缺少失
2.单片机(也就是STM32)的详细工作认识不清晰。
依照整个进修阶段先后顺序的说明,下面更详细的解读来说明问题。
1.专用术语
对于MCU来说,在没有接触详细的功能,仅专用名词就一堆,交叉编译,内核,加法器/除法器、协处理器、算法加速器、指令集、浮点运算、流水线、哈佛构造、寄存器(通用和外设)、中断和异常、FLASH、RAM、Cache(缓存)、SDRAM(刷新时长)、USART(波特率,停下位,奇偶检验)、CAN,SPI(片选)和I2C等,这里面有的属于根底知识,有的属于进阶须要了解的知识点,这些名词的了解是作为入门者的第一个门槛,假如对一些专用名词不了解,那么组合起来的语句就愈加艰涩难懂,这里说我的进修方法:遇到听不懂的专业术语,去网络上查找了解,并找个本子或电脑通过文档的形式记录下,一段时长回顾一下,好记性不如烂笔头,这里举荐<>3权威指南>,对于单片机进修中须要了解的内核知识都有说明。
2.芯片工作流程
专业术语并不会多难,记住根本不会忘,就算忘了回顾下也简略,在迈过这个坎后,下一步就是了解芯片执行流程和我们要做什么才能让芯片工作起来。
1.在上电后,芯片复位启动
2.MCU从FLASH通过指令/数据总线分别读取指令和数据,配合解析执行,其中在通过RAM和通用寄存器(以就是R0~R12的内部寄存器)处理可变数据。
3.依据执行的指令,配置和操作外设的的寄存器,从而驱动对应外设实现详细的功能
4.配合上层组合逻辑,联合外设功能,执行详细应用的全部需求
上述就是芯片工作的流程,而作为单片机开发者,实现的代码就是放在FLASH中的程序,由官方提供的SDK包和用户裁剪实现定义的外设驱动组成,依照上述流程就包含:
芯片的启动过程中对堆栈的初始化,系统相关外设的处理(如时钟) =>这局部由厂商提供,我们把文件放入项目即可,以STM32为例就是启动文件和系统初始化的SystemInit函数
配置应用须要的外设模块,假如你看网上的教学视频,都是从这一步直接初始的,特别是STM32基于STM32CubeMx的实现,会告诉你这么写是满足要求的,假如你不是愿意深究的人到没所谓,当你深究这东西的时候,就会发现没有人告诉为什么要这么写,迷惑自然就来了,其实这局部就是嵌入式所谓的经历成分。
如大局部外设模块都要进行时钟使能,GPIO就要配置引脚的上拉/下拉,推挽/开漏,USART配置模式,波特率,奇偶校验,停下位,数据位,还要考虑对应GPIO的端口复用,I2C就要考虑主从模式,依据须要的传输速率确定模块时钟,SDRAM除了考虑引脚复用,时序,还要计算刷新时长来保证数据的稳定,这些知识理论上都是长期在工作中积攒出来的,在项目需求确定后,依据芯片和器件选型,就能够确定硬件PCB的绘图和布置,功能需求也能确定,如访问外部EPPROM,那么I2C就确定位主模式,并依据EPPROM的读写时序和芯片的性能,考虑到效率和稳定的均衡,就能够确定I2C的速率,考虑布局和其它需求,I2C对应的复用引脚也能确定,事实上,对于真实项目,都是从
需求=>项目方案书=>软硬件框架=>软件驱动
你所看的视频直接从软件驱动学起,不知道前后背景,才会迷茫,至于如何转换思维进修,可参照我之前这篇总结,末尾也有我关于嵌入式入门的说明。
听心跳的声音:转变思维进修嵌入式 --方法和总结111赞同 ?7评论文章
3.上层应用逻辑实现
配合外设的应用逻辑实现其实才是项目中最复杂的局部,包含中断前后台系统的交互,可能存在RTOS应用和协议移植,GUI的管理操作,和其它模块如wifi模块,蓝牙模块的交互,不过这局部属于进阶内容,当你对外设模块由一定认知后,这局部应该也会有自己的进修方法,这里我就不在赘述。
本答复到此就完毕了,这只是我对单片机问题关于自己了解的总结,单片机虽然并不须要创新研发未知的技术,但却波及从芯片底层到软件接口的全部实现,包含对现代计算机技术中向微处理器方向的全部精髓技术,也是须要不断进修才能不被时代摈弃。另外希望你也能总结出自己的方法,在这条道路上越走越好,假如有嵌入式Linux的进修需求,也能够看我这篇答复。
我的第一块开发板是arduino,最早学电子方向也是用的arduino。
我的第一块开发板也是arduino uno。再到8266,再到的stm32,再到的学校的51,是不是路径很诡异啊。其实进修单片机最重要的是什么。是兴趣,成就感,早些年的51都是用汇编的,那玩意劝退多少人,我第一个接的个人项目,用的就是汇编,鬼知道我一个程序写了半个月,人都吐了。
再说此时的51,你装个keil,然后呢,装51支持包,点灯程序,然后编译好hex,用什么下载,stcisp吧,烧录是不是还得重启一下啊。
再说stm32。是不是拿到正点原子或者野火的407zgt6开发板,一大坨,也不知道上面一堆啥玩意,一堆排针,一堆串口,网口,显示屏。不管了,先装mdk5,再装f4支持包,然后原子哥的点亮灯,然后烧录是用串口340还是stlink啊,是不是还要配烧录地址啊,h7系列是不是还要自己写外部flash配置文件啊,由于片内空间很小。你把这一堆搞完了,是不是头大啊,啊对,还有那网盘的大小,我记得有好几个g吧,下载完,都两天了。
所以,这一系列就很容易劝退很多学生。arduino就很蠢,什么也没有,d13点灯,一条蓝色数据线,安装arduino ide,不用装驱动,安装过程中点安装,就行了,翻开ide,点开程序blinker,自动识别串口,一条typeb的打印机线点击下载,好了,d13闪烁。再搞几个pwm,搞个oled屏幕,搞个继电器和蓝牙模块,直接能够做个小智能家居了。成就感满满对吧。
然后他就会遇到各种问题,假如pwm想控制电机,不能调频次对吧,只能重写定时器,假如没有uno模拟量输出,假如串口独有一个,假如外部中断独有两个不够用对吧,没有网口只能用5100或者5500扩展对吧,扩展了网口,flash又不够了对吧,很多限制出现了。这时候,你就会像吸烟成瘾一样,会去疯狂想办法攻克,假如选择mega或者due。或者转战stm32,有的问题能够直接用atmel studio开发攻克。兴趣会驱使你往前钻研。
而stm32进修茫然,是对的,由于stm32,国内的开发板,都是给你一坨,让你自己在那里搞搞搞,鬼都不愿意看,去看看意法半导体官方给出的评估板什么样子。用德飞莱的那种系统板,加一些扩展板和杜邦线,配合好的bootloader,让初学者有更多的时长琢磨本质的东西,而不是浪费在看你那个大开发板的原理图,看几个g的资料,才是正确的。当然,感觉说这些会引起国内的两个st教育巨头的不满,但是还是要说的,虽然我是大学里看着原子和野火的书学的32,也感激两位为中国嵌入式教学做出的贡献(我也买了好多两家的开发板和模块啥的,大几千有的,还有原子的示波器,虽然被我摔了)但不是如此以来,便是对的,教育的本质,本就是不断探索,不断创新,不断反思。
我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加蚣重呺也能领取。