从51开始,到现在也有一年半的时间了,刚开始学51时,花了整整半年时间才觉得对它的功能有了基本掌握,后来在不断地做了些东西后,才感觉比较熟练了。但当时,对如何快速上手一款从未接触过的单片机这个问题,仍然一片茫然。这种感觉一直持续到熟练32后,终于对单片机的学习有一种一通百通的感觉。感觉到学习一款新的单片机,其流程不外乎以下几步,走完这几步后,这款单片机基本没太大问题了。
1,对单片机的基本情况进行了解(引脚,最小系统,电压,ROM,,RAM,主频 寻址空间的分配,时钟树,常用外设)。
2,对单片机的开发环境进行了解( 用什么软件开发,软件的安装,工程建立的流程,程序的编译,下载)。
其实,如果说硬件来说,学到这就算学完了。但是从51到32的转变,困难主要不在于硬件的学习,而是软件,或者说是开发思维的转变,我列举一些比较鲜明的变化。
1,从单文件编程到多文件编程的变化,这个C语言学得好的同学应该不会有太大的问题,但我的C语言比较差(是从学51开始,才一点一点补起来的),当时所有的程序都写在一个C文件里,而且往往在main函数里放一大堆东西。
2,从寄存器开发到库开发,从51到32,单片机变得越来越复杂,寄存器也越来越多,比如51的一组IO口,只有1个八位的寄存器来控制,而32的一组IO口,得7个32位的寄存器来控制。功能越来越强大,结构也越来越复杂,如果还以开发51的方式(直接配置寄存器)来开发32的话,工作将会变得异常麻烦,所以人们主要以库开发的方式来开发32,(库的作用是将单片机的功能封装成一个个函数,使用某功能时直接调用配置函数就行,其实还是操作寄存器,库的架构是这样,首先将某外设(比如IO口)所涉及到的寄存器封装为结构体,然后以不同的值填充结构体,以构成不同功能的函数,(未完。。)
还有对外围电路(传感器,显示屏,通信模块等)的理解
1,CPU与外围模块信号的传输无非数字量与模拟量,模拟量比较简单,只是AD或DA.
2,如果以数字量传输,传输方式一般就是 串口,并口,IIC,SPI,CAN,单总线。
3,显示屏一般为6800或8080时序。摄像头经常为VGA时序。
4,模块的结构一般是这样:功能模块(比如显示器的显示屏,通讯模块的发射与接收电路,传感器的探头),配置模块(寄存器,一个模块往往有很多寄存器。)通信的内容分为两类,命令(cmd)与数据(data),命令就是寄存器地址,而数据就是以数据内容配置寄存器。(有点模块比较简单,将命令与数据放在一个字节里,前几位是寄存器的地址(或者说,前几位进行地址的选择),后几位是数据,来配置寄存器,如1602,12864这些液晶显示器。而si4432,MPU6050,ILI9341这样比较复杂的模块(上百组寄存器),命令与数据分开放置,命令一般以寄存器表的形式写在Datasheet里,操作时,一条命令后面有时会跟着好几条数据)。
模块学习,使用的一般思路是这样的:
(1)了解模块的命令格式与时序。
(2)按需求初始化模块(配置寄存器)
(3)写好基本操作函数(写命令,写数据,读数据,延时操作等)
(4)将一些宏定义,声明放入H文件,基本操作函数,初始化函数,还有其他一些写好的功能函数保存为C文件。
(5)然后啥时间需要,啥时候将你保存好的H文件和C文件添加进你的工程,直接调用即可。