学习总结在基地学习的这段时间里,通过不断的实践,我对单片机也有也算是入门了。在我单片机学习的历程,围绕着“单片机+外设硬件+程序”这三个方面来学习。大一第一个学期我学习C语言的基础知识、AT89S52单片机的IO口的操作、流水灯实验、定时器中断的使用、数码管实验、键盘的原理与制作、对12864液晶的驱动、对直流电机的驱动、对步进电机的驱动;大一第二个学期,我学习了超声波模块的使用,单片机的串口通信,蓝牙模块的与调试使用,陀螺仪的使用与调试,最小51单片机系统板的制作,DXP_AltiumDesignerSummer9软件的使用,AutoCAD的使用,并开始做一些往年控制类的电赛题目,开始接触STM32的库开发和MSP430G2553单片机的学习。大二第一个学期,进一步学习STM32的库开发和MSP430G2553单片机、开始学习二极管和三极管的原理。要完成一个功能或一个项目,单片机内部环境配置与外部硬件的对接协调是非常重要的。AT89S52单片机以AT89S52单片机为例,通过AT89S52.h头文件使抽象的单片机内部寄存器地址简单化,更易于操作如:定义特殊功能寄存器名称地址这样我们就可以用C语言来调用单片机寄存器来进行环境配置了。下面我们来看一下51单片机的中断系统,通过对不同的寄存器进行操作,就可以让单片机实现不同的功能,如下图是51中断系统结构示意图定时器/计数器控制中断允许控制寄存器IE串行口控制寄存中断优先级控每一个寄存器都有八位,每一位都有它对应的功能,每一位可以看作一个开关,每一个用语句EA=1;就相当于闭合上IE寄存器内EA这个位这个开关,也就开启了这一位的功能,将不同的开关组合起来,就可以实现我们想要的功能了如:PS=0;//串行口中断为低优先级PX0=1;//设置外部中断0为高优先级IT0=1;//外部中断0为边沿触发方式,下降沿有效ES=1;//允许串行口中断EX0=1;//允许外部中断0EA=1;//开总中断懂得操作和设置寄存器后,我们就可以以单片机为核心,控制外部硬件设备了。如我要使用LEADDIY_M3陀螺仪模块,通过查阅它的使用手册可知,可以用串口通信与它进行信息交流,信息的处理有了对这个模块的了解,我们就可以对单片机进行设置,来获取陀螺仪的信息了。voidInitUART(void)//定时器初始化{TMOD=0x20;SCON=0x50;TH1=0xFD;TL1=TH1;PCON=0x00;EA=1;ES=1;TR1=1;}voidSendOneByte(charc)//发送{ES=0;SBUF=c;while(!TI);TI=0;ES=1;}unsignedcharuartRead(void){unsignedcharch;while(!g_u32RecCnt);ch=rxBuffer[rxBufferRhead];rxBufferRhead++;if(rxBufferRhead=UART_BUFFER_SIZE){rxBufferRhead=0;}g_u32RecCnt--;returnch;}unsignedcharuartAvailable(void){returng_u32RecCnt;}voidUARTInterrupt(void)interrupt4//定时器服务{if(RI){RI=0;rxBuffer[rxBufferRTail]=SBUF;rxBufferRTail++;if(rxBufferRTail=UART_BUFFER_SIZE)rxBufferRTail=0;g_u32RecCnt++;}elseTI=0;}之后我们就可以对单片机获得的数据做进一步的处理,得出我们我们想要的信息了if(uartAvailable())//检测是否收到LEADIY-M3数据{BufC=uartRead();//读一个字节if((BufC==0xA7)){//判断是否为帧头BufC=uartRead();//读一个字节if(BufC==0x7A){//判断是否为帧头BufC=uartRead();//读一个字节switch(BufC)//帧类型判断{case0x72://标识为姿态帧BufC=uartRead();//帧长度,可不用BufC=uartRead();//效验位Angle[0]=ReadW();//X轴角度(横滚)Angle[1]=ReadW();//Y轴角度(俯仰)Angle[2]=ReadW();//Z轴角度(偏航)AngleDeg[0]=Angle[0]/100;AngleDeg[1]=Angle[1]/100;AngleDeg[2]=Angle[2]/100;//+90~—90break;default:break;}}}}MSP430G2553单片机这是一款16位的单片机,超低功耗,超高信价比,带有仿真器,功能比AT89S52还要强大,并且它的开发软件CCS也非常强大。刚接触单片机开发时最大的困惑之一可能就是对单片机中寄存器的理解和配置,而CCS中集成了Grace软件提供了一种全新的图形化的编程方式。可以帮助我们更快的理解寄存器。如下:内部寄存器资源(1)对IO口操作(2)中断时钟等(3)虽然有了Grace这个神器我们不用写代码去配置寄存器了,但是还是要会滴。如上图,它先定义了寄存器SFR_8BIT(P1IN);它的原型是这样子的#defineSFR_8BIT(address)externvolatileunsignedcharaddress然后在宏定义对它进行操作的16进制数,如#defineBIT2(0x0004);//0000000000000100这个的作用使P1IN也就是P1口输入寄存器的第三个IO口置位#defineBIT3(0x0008);//0000000000001000以此类推;当我们要用的时候,就可以这样:P1IN=BIT3;这样就实现了对P1口输入寄存器的操作了,是不是很巧妙很有意思;其它的也一样以此类推;STM32单片机STM32单片机是一款32位的单片机,它的处理速度MSP430G2553单片机更快,容量更大,寄存器更多。因此,使用STM32如果再像MSP430G2553单片机,AT89S52单片机那样直接对寄存器操作的话,会是一个非常大的工作量。因此ST公司专门为STM32单片机写了库,而这个STM32库是架构在寄存器与我们写的代码之间的桥梁,向下处理与寄存器直接相关的配置,向下为用户提供配置寄存器的接口。使用它,我们就可以支配强大的STM32单片机了。STM32模块框图STM32模块框图STM32模块框图(1)系统结构(2)存储器映像(3)时钟树(4)固件库函数说明通过这几个图,再结合它的具体的参考手册就可以读懂STM32库了,理解库之后再根据他给的固件库函数说明,我们就可以轻松的驾驭STM32了。