大佬经验 % r8 O$ l* i7 e3 p4 E 一、想快速入门进阶,面向工作时 先把工作中需要的东西学会,一项一项的来,比如先把GPIO弄清楚,怎么初始化,怎么输入输出,然后定时器、串口、ADC、DAC、DMA、SPI等等先把用得着的一个一个地做,4 t6 i0 {' P5 p 都弄明白了再往一块整合,从简单到复杂,硬件操控起来了也就算对这种单片机入门了吧,软件方面,不管用什么单片机,用什么编译器,区别不大初学的最好还是买个开发板,不( @2 q6 p2 |8 i& Z+ u/ Q9 K& a& J 需要多高级的,有几个常用功能做出来,其它就容易了。--------hdxet 关于初学者是否需要弄清底层函数问题: 先玩起来再说底层函数,一般就用现成的库,绝大多数应用都没问题的,至于库里面是什么,先不管它,到了高级阶段再去看--------hdxet % T7 W2 M8 i- K- Q& d$ U# t 二、进阶步骤1 d' A0 O. `; s6 E 会点灯-入门; 会使用各个常见中断,能把项目做出来-熟练; 会DMA、PWM各种模式,能把项目熟练完成-精通;3 ]" _5 w" M+ L- Y% t$ _ 会CAN,USB,RS232,RS485,SPI,I2C,运动控制,电机驱动,各种滤波算法,PID算法-非常精通。--------coleyao ) l' B$ V3 f* T; p 三、经验分享 自己的体会,对不对不知道哈。我自己学MCU就是大学里学的51单片机,所有功能会用算是入门槛,后来学习和工作慢慢接触其他的PIC,Freescale,STM这些,慢慢发现其实 东西都是有相通的,但是一定要动手,不管是用例程还是自己写,都要带板子跑代码,过程中肯定有问题慢慢解决,才能有提高,而且现在的片子底层驱动库都有,项目用的时候就 是参考一下手册会调用,底层驱动功能正常就可以了,很少项目里面从零开始写代码了。--------Lu.Shi e8 r9 l. u# u0 t , i" n6 ?! a. r2 J$ `, N 四、经验分享 建议:初入STM32的学习者不用记,直接用就行了,这个玩意,实践才能进步;边学边用才是正途,关键是用,不是学。------leicai051 h# ?8 U2 P- W5 N 五、经验分享 可以自己试着完成一个功能,比如简单的流水灯,逻辑肯定自己写,涉及到stm32的比如怎么初始化、怎么配置之内的不会的可以查资料,但是一定要要有自己的思想, 完成了我觉得就算入门了。------Llinuxu ; w, m4 T0 o" b0 r2 L7 Y 六、关于初学者是否要弄懂底层函数5 K6 }: f# _& C" E; s# w1 L 初学者没必要弄懂底层函数。项目需要用到什么再去研究什么。比如你的项目只要点亮一个LED灯,那你只研究怎么配置GPIO就好了,没必要去研究什么PWM了。现在% m I4 I) [; f. I( ]& Q( j- P 有个神器叫STM32CubeMX,直接生成一些底层初始化代码,加上HAL库调用,哪里不会再查哪里。底层函数这玩意,你调用多了,自然会去研究怎么配置达到你要做的效果, 在项目中进击,没必要一上来就啃底层,专注你的算法才是真正有意义的事情。------oner ' V& d9 N6 d9 R, n 七、经验和观点的分享# K# W2 ?: U/ v6 K0 y 我也有思考,如何清晰、系统地学习 STM32,建立整个 Cortex-M 知识体系,以及相应的理论支撑,并最终应用到 Cortex-M 内核 MCU。现有的教程也都没有构建这样的. r0 C7 A0 Y% k, m- W E 知识体系,学习、成长路线,所以很多人(包括我自己在内)都会在某个阶段遇到瓶颈。到头来发现自己依旧停留在知道这个点,也会用,会面向百度编程,但一遇到问题需要 调试,需要更多的理论支撑的时候,就无从下手了。9 U0 x9 r+ T; _' | 另外,STM32 做项目的话,应该也少不了使用操作系统,所以 RTOS 还是需要学习的。RTOS 面又是比较多的,现在又有物联网操作系统的概念 (比如 RT-Thread【物联网相关的软件包非常多】,华为的 LiteOS【官方动作比较小】,阿里的 Aliosthings【WiFi 等模组支持的相对较好】)。 所以,有人能把这套内容整合出来一个学习路线和测试验证知识点,应该会非常好。-------MurphyZhao + w* e# K$ l" E2 x 八、经验分享(什么时候可以接触项目)(指导的很多方面)0 r H& y" w6 O6 |: T: F 会建立工程点灯就算入门' [4 J: T, {/ e: Z 知道各个外设的基本特性就算基本熟练(定时器 SPI UART IIC SDIO FMC,有需要再看网络和USB) 知道怎么读取、控制外围设备(采样、显示、射频一类的),% d" W0 z# q% v" E) k1 o 会用现有库就算精通(RTOS/UI/存储/网络)剩下的都是工程经验,代码组织、排错、调试一类的,多做就行。) O& R( \- K& ]. f 会用串口,能通过示波器看懂SPI/IIC的波形、能输出想要的波形,会输出PWM波,就可以开展项目了,另外是C语言要扎实,有一点总线知识,至少要明白7 Z$ [! v1 g/ y& y* n 堆栈的含义,知道自己随手定义的变量处在什么section,熟悉数据的内存组织结构更好(这些最好是多做调试多看MDK的Call Stack+local窗口和Watch窗口,看看0 N- I# N$ `- H5 b$ d 数据对应的内存地址和组织方式,对你深入了解语言、CPU有很大好处)。: ?& k9 Y* K6 n8 o 深入的逻辑、代码组织方式,需要你自己在实践中总结,看别人的源码也是比较不错的方式求快的话,不建议看视频,从PDF教程开始,配合官方的手册对照看。 一个月从0到会走路是没问题的。6 @( Y! }. [" u8 G% Q 关于学习方式:2 R0 D5 J8 @: k6 N 视频的进度和内容不容易筛选,你只能跳着跳着看,或者1.5倍速完整拉完,跳着看容易遗漏看PDF方便反复查看仔细比对。先看设计大纲,自己理解一遍,7 c" G9 m- z/ d, \* i7 I 然后针对性地看自己不太理解的的地方,在具体技术细节上配合datasheet,全程都是干货。再自己拿板子跟着走一遍基本就OK了。--------barryxiao 5 G; q- ^5 j* c4 M* X1 t |3 ^ 九、经验分享' i" J! a9 V, h1 W, ]3 Q 1.芯片只是一个底层工具,当然你只有完全了解你所使用的外设工作逻辑后才可能设计出可靠的底层系统。 2.底层熟悉后,剩下的就是项目的应用问题,算法,协议,应用逻辑等,这个就是行业属性,行业积累。 3.如果说入门,至少知道配置一个外设的完整流程,不一定每一个都要用一遍,只要你知道大概流程,用的时候知道看什么地方就入门了。------lingdianhao / H1 s1 Q8 Q1 N: a5 ^7 K* s 十、学习心态方面(关于工作面对项目)- \1 T @' z& P9 d# r/ ` 同意你的意见,我觉得搞技术心态很重要,就是蔑视他,不就是什么什么嘛,老子能搞定你。 如果遇到问题就是天大的事情,感觉自己不行,搞不定。这样即使解决问题了,也只是解决这样一个问题。-------梁皇山土匪8 @. M- H' e' H. y6 _. s 0 c; l; b. ^7 m- |: Y 5 `! Q1 D; Y1 @2 d/ D. o4 [# Q 以上是我节选各位大佬的经验分享和指导。希望对像我一样STM32的初学者们有帮助。同时感谢各位大佬的分享与指导。 |
0 @: _2 b, G: |/ @
STM32芯片系统结构4 B9 O2 r, c$ b% m
STM32F103 系列芯片(不包含互联网型)的系统结构如下:' L+ g3 [+ H3 w* `8 r1 t
5 p0 |% j8 i% J' A* z- D
从上图可以看出,在小容量、中容量和大容量产品中,主系统由以下部分构
成:
四个驱动单元:
• Cortex-M3 内核 DCode 总线(D-bus)
• Cortex-M3 内核系统总线(S-bus)! e+ x+ ~: c) F
• 通用 DMA17 a% h. e1 m/ l4 ^! d) H5 A( g
• 通用 DMA2( f% t& M/ E# P4 n. E {' s
四个被动单元:4 L6 \% x6 q8 Y6 M- i
• 内部 SRAM4 \9 n7 R% h) d3 a# G: f) o0 D
• 内部闪存存储器FLASH
• FSMC" t- @# ?9 _4 z' b
• AHB 到 APB 的桥(AHB2APBx),它连接所有的 APB 设备' w- r' t4 T$ q+ F
这些都是通过一个多级的 AHB 总线构架相互连接的。 下面我们看看它们各自的功能:
• ICode 总线
该总线将 Cortex-M3 内核的指令总线与闪存指令接口相连接。 指令预取在此; z& x! x+ C, E# J6 p w# Y
总线上完成。( D& b% z- F2 S$ \5 R! ^8 u9 Q& ~
• DCode 总线
该总线将 Cortex-M3 内核的 DCode 总线与闪存存储器的数据接口相连接(常量加载和调试访问)。
• 系统总线9 q) B. y% ]$ E' r
此总线连接 Cortex-M3 内核的系统总线(外设总线)到总线矩阵, 总线矩阵协/ r0 W2 \' L; }% N% @3 m
调着内核和 DMA 间的访问。8 m* z9 u. F2 o0 ^0 Q5 P2 L4 t
• DMA 总线( v7 L7 J$ U: g3 _, h
此总线将DMA的AHB主控接口与总线矩阵相联, 总线矩阵协调着CPU的DCode和 DMA 到 SRAM、闪存和外设的访问。) k* I- P" x( r4 K: r' G5 Q5 _
• 总线矩阵
总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁, 仲裁利用轮换算法。在互联型产品中,总线矩阵包含 5 个驱动部件(CPU 的 DCode、系统总线、以太网 DMA、 DMA1 总线和 DMA2 总线)和 3 个从部件(闪存存储器接口(FLITF)、SRAM 和 AHB2APB 桥)。AHB 外设通过总线矩阵与系统总线相连,允许 DMA访问。% f, }5 e' o' u- }0 L, {( e
• AHB/APB桥(APB)* I$ H/ a6 K9 ^. `
两个 AHB/APB 桥在 AHB 和 2 个 APB 总线间提供同步连接。 APB1 操作速度限于 36MHz, APB2 操作于全速(最高 72MHz)。有关连接到每个桥的不同外设的地址映射请参考《STM32F1xx 中文参考手册》存储器映像章节。在每一次复位以后,所有除 SRAM 和 FLITF 以外的外设都被关闭,在使用一个外设之前,必须设置寄存器 RCC_AHBENR 来打开该外设的时钟。# d8 U. ?' \& g9 }/ v7 g9 s- L
STM32F1 的时钟系统相对复杂,在后续文章中再介绍。) j5 B7 M: B% r7 b+ p5 E( \. Z
STM32学习进阶路径
• 基本外设:
GPIO 输入输出,外部中断,定时器,串口。理解了这四个外设,基本就入
门了一款 MCU。
• 基本外设接口:) B# u* p" K1 i$ X8 Y/ D; J
SPI,IIC,WDG, FSMC,ADC/DAC,SDIO 等。这些外设接口功能原理对每个芯片几乎都是一样。对芯片而言就是多和少而已。5 k0 M9 u) P% B- x! r
• 高级功能: L( A: w0 e* L; g, g
UCOS,FATFS,EMWIN 等。以及一些应用。- W3 C8 y3 H' p/ m A+ y/ B
另外值得一提的是,C 语言是嵌入式开发的基础中的基础。如果 C 语言不过关,很大程度限制嵌入式学习的进度与深度。在这里推荐3本书学习C语言,刚开始可以参看谭浩强的《C程序设计 第四版》,入门之后看一下关于C指针的书《C 与指针》《C 指针编程之道》。学习嵌入式开发要多动手编程、多调试。7 b5 w0 O2 V7 u2 d
快速入门, 问题是入了那一个门?那只不过是一个让你以为自己懂了的门。与能独自开发一个项目相差十万八千里。
我在这一行业混了N多年,也不记得带过多少刚毕业的同学了。多说几句都不爱听的话, 除非只是为了个人爱好, 就是随便耍一下, 否则想在这一行发展的, 不学寄存器就是浪费时间, 所谓学库函数的捷径只是自欺欺人的想法。
我就打个比喻吧, 我作为一个有N多年项目经验的码农,换一颗我从没用过的MCU, 只给我库函数的材料,不让我看参考手册, 不让看寄存器定义, 查错时不让我查看寄存器, 代码我一样能敲出来, 但是所谓查错, 就只能停留在把写好的代码翻来覆去的, 看看哪儿写错了, 这不是查错, 而是检漏。 没看到求助贴都是贴一段代码, 让你帮忙看看哪儿写错, 这不就是对寄存器一无所知的后果么? 能靠检漏做项目?0 B; Y0 K1 X, L" h# Y
# t; I: ?0 ~3 p
# \7 N' I5 K7 P+ _; m$ A
对这一方面也是很重要的,但是,很多人也考虑时间成本,学习寄存器,所花费的时间太长,不利于快速入门。对于学习者来说,学习一直没进展大概会有很大的挫败感,会不会衍生放弃这个行业的想法之类的呢
谢谢!
应该是大佬级别的:
不客气,谢谢支持
谢谢支持!可没白忙活哈哈
:不客气,有索取就要有分享,也会下载一些资料什么的。
好的,到时候关注一下