上一年心血来潮,突然对嵌入式挺感兴趣,很有激情地学习了单片机相关的知识, 使用过STC89C52
、STM32F103C8T6
(江科大的视频教学讲的两款MCU),但是这个激情随着做出一辆STM32智能小车之后就戛然而止,可能都有半年时间了吧。
我的性格就是三分钟热度,追求新鲜感,新鲜感没了就索然无味了。
可能以后无聊了又会学习下怎么画电路板。
收获
收获还是蛮多的,理论知识补充了挺多,看了黑马的嵌入式教程,模电、数电、计算机组成原理、CPU运行原理这些大致都了解下,主要是解惑,因为之前我对于硬件底层知识很是欠缺,现在终于知道个所以然。以前看过一篇都市传说,说造CPU的技术是外星人带到地球的,现在回想起确实搞笑,愚蠢的人就喜欢用荒谬的解释来弥补自己见识上的短浅,但凡了解CPU的发展史都知道,一切都是循序渐进,有迹可循的。
对于MCU的理解,其实关键还是外设,不写汇编的话,CPU用啥指令集真不怎么重要,反正同一厂商不同型号的MCU的生态都是割裂的。
外设有GPIO、定时器、PWM、时钟等,通讯协议有串口、I2C、SPI、CAN等。
STC89C52
这个MCU太古老了,缺失了挺多东西,比如GPIO的推挽输出和PWM,不了解数字电路的情况下,用这个MCU入门嵌入式还挺简单。
学习STM32F103C8T6
的话,得事先对数字电路有一定了解,不如会学得一头雾水。
学习代码
学习51单片机时写的示例代码:study-51
学习stm32时写的示例代码:study-stm32
智能小车
使用到的零件
- STM32最小系统板
- 4WD智能小车底盘
- 废旧充电宝
- 面包板
- 三极管
- 3.3V/5V稳压模块
- 蓝牙串口通讯模块
- TB6612FNG电机驱动板
- 舵机
- 超声波模块
这些东西淘宝上都有得卖。
硬件层面
都过半年时间了,大概原理我还记得,具体的忘记得七七八八了,得重新翻资料才能回忆起来,而且当时又没有纪录好接线图和原理图,所以算了,B站大把视频教程。
蓝牙模块很简单,就是串口通讯,我还以为要实现啥蓝牙协议呢。
电机驱动板也简单,就是PWM,还有GPIO做控制。
舵机直接拿PWM当通讯协议用的。
超声波模块是它定义的基于GPIO的野鸡协议。
反正是会者不难,难者不会,全是模块化的东西,跟软件方面做调包侠没啥区别,大学生都能搞定的事情能有多难。
软件层面
小车的代码放在little-car这个仓库里,使用的是Rust的embassy。之前使用C语言写的spl或者hal,经常会不小心传错引脚,而调个大半天,但是embassy不会有这种问题,得益于Rust强大的所有权机制,这个问题在编译期就告警了。
而且我的小车支持蓝牙控制和超声波避障两种模式,并且可以通过蓝牙来切换模式,需要有一个多任务切换的能力,传统方案那得上RTOS了,但是使用embassy的async/await
就不需要了,非常省事。
感想
我觉得玩嵌入式得有一个自己的工作台,收拾嵌入式的零件太麻烦了,零件又比较细小,要是跟家中常用的东西混在一起,不整理好的话就很容易丢失。我看别人是有一个专属的台面,什么零件都往那一堆,虽然乱作一团,但胜在方便,想要啥东西随手一拿就行,还省去收拾的麻烦。
我的住所那么是工作地的单间宿舍,要么是鸽子楼家中的书房,面包板、飞线、各种电子元器件、烧录器等都整整齐齐地放在两个收纳盒里,还有电焊笔和万用表这些工具。之前我周末回家时还想玩,就得把这些东西背来背去,还是挺消磨兴趣的。
不如搞软件,一个笔记本电脑就可以到处开发。
现在我对8位单片机挺感兴趣的,特别是AVR指令集的,因为它有gcc和clang的支持,换言之,不会像8051那样用着Keil或者sdcc魔改过的C语言。最近知道搭载了ATmega328P
的Arduino UNO R3
板子就是这个指令集的,于是买了个耍耍。
相对于MCU的裸机开发,支持Linux的开发板则主要玩的是驱动,不过还是得有MCU的只是储备才好使。为了支持龙芯,我买了他家的2K300蜂鸟板,目前想玩外设的兴趣还不是很大,便搁置了。
龙芯的嵌入式板子是不错的,起码资源齐全还开源全套源代码,比那些抠抠索索不愿意提供资源的国产板子强太多了。
说些什么吧!