一般对于 邀请写专栏这种事一般我都是拒绝的.
一来忙得一塌糊涂,二来......如果我有心思写东西, ** 嘛不给自己的公众号写呢?
刚瞅了瞅 @一只树懒 的 这个 嵌入式 专栏,其实说实话,我本来只是想看看丫的这个专栏是不是全写的 ARM LINUX。
后来我发现他写的虽然不多(估计刚开吧),但基本都是STM32。
单片机,很好。
STM32,更好。
看了他的几篇文章,听意思,感觉这哥们是从硬件工程师过来的。
不过我看了他写的STM32学习入门篇,我感觉有点过了,因为惭愧,说实在话,我用了将近十年的STM32,不瞒您们说,我还真的不是十分懂。
尽管对于时钟树抑或什么APB1 APB2 甚至以前还有过什么AHB来着,其实我曾经是懂的,但是,我发现在强大的ST库面前它根本只有被遗忘的份。
就如我大学时,曾把标准8051的所有寄存器和存储器分布等等几乎全部背了下来,但这其实没什么用。
——当然,我其实还是建议学51的人,现在还是可以去这么做一做,聪明人,用笨办法去做一件事,其实是很好的。
但是,STM32你给我背来试试,我要求不高,你把最主流的三个背下来就行
UART GPIO TIMER
不可能的。
STM32F1系列从2007年开始进入市场,随后一路高歌猛进,至今已经被其后辈 STM32F0 STM32F4逐步取代,尽管STM32F1仍然是当今的大主流机型。
相比于51,我们印象最深刻的是,再也不用去看什么寄存器,因为实在太多了。
功能强大了,寄存器自然就复杂,这没什么可说的。
但是为了解决复杂度,我们必须有一定的办法。
软件上我们用了封装,在硬件底层HAL上面我们同样采用了HAL。
当然,至今我仍然不反对 寄存器和ST库并着走,因为ST库,坦白说很多时候还是不是那么如人意,何况,即使如人意,总有需要特殊处理的时候。
但是不得不说,十年来,我基本上都是在用库,而极少极少看寄存器本身。
但这样的好处是,我在切换不同的MCU的时候,基本上是无痕过度,只要懂C语言,只要对MCU的硬件具有足够的共通性理解。
这些共通性理解大概有什么呢?
说起来其实也不多,基本上就是
1.时钟,比如你得知道它的主频,如何分频,倍频,以及能做到的范围;
2.FLASH和RAM的情况,有多大,是否分区之类的。这会在你设置IDE的时候起作用;
然后......好像我也就想不到什么了。
但实在的说,即使这些,ST库,或者说它附带的例程,都已经给你全数提供了,所以你连这都不用操心。
当然不止ST,事实上,自从ST开了这个先河,后来的绝大多数主流MCU,都这样,因为你不这样做,客户学习和迁移的成本太大,除非你是FREESCALE或者NXP这一类在某些场合(比如车规)有强制要求的场合下,谁愿意用你的产品?
所以说,其实现在,学单片机,这件事情,已经变得很简单。
只要你懂C——这方面最好懂得越多越好。
然后只要你曾经有过一两个实际的使用经验,而且你也没有被限制不能使用盗版的IAR或者MDK——当然如果有人帮你给钱更好,理直气壮。
基本上,可以说,你在转向任何一款MCU的时候,都是很轻松的。
然后,你真的不必太关心它的什么时钟树啊内里的外设寄存器啊。
相信库函数,绝大多数时候,它们都挺好的,而且比你写的好。
毕竟它们是由芯片制造者提供的。
回到题目。
尽管把单片机当一个模块用好了。
虽然,对于非程序员用户,尤其是非C程序员用户而言,它肯定没有Arduino简单易用。
但也真的没有必要回到以前8051的时代,苦逼去拼凑设置寄存器,那个,早就过时了。
事实上,如果或者一个团队里,你连硬件都别碰。
什么最小系统关我毛事,直接,见着谁卖的多逮谁,见着谁便宜(当然是要满足使用要求)就用谁。
要相信市场的选择。
以上,OVER。