单片机学习之路 STM32 AT89S51.docx
- 文档编号:9987646
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:15
- 大小:1.02MB
单片机学习之路 STM32 AT89S51.docx
《单片机学习之路 STM32 AT89S51.docx》由会员分享,可在线阅读,更多相关《单片机学习之路 STM32 AT89S51.docx(15页珍藏版)》请在冰豆网上搜索。
单片机学习之路STM32AT89S51
学习总结
在基地学习的这段时间里,通过不断的实践,我对单片机也有也算是入门了。
在我单片机学习的历程,围绕着“单片机+外设硬件+程序”这三个方面来学习。
大一第一个学期我学习C语言的基础知识、AT89S52单片机的IO口的操作、流水灯实验、定时器中断的使用、数码管实验、键盘的原理与制作、对12864液晶的驱动、对直流电机的驱动、对步进电机的驱动;大一第二个学期,我学习了超声波模块的使用,单片机的串口通信,蓝牙模块的与调试使用,陀螺仪的使用与调试,最小51单片机系统板的制作,DXP_AltiumDesignerSummer9软件的使用,AutoCAD的使用,并开始做一些往年控制类的电赛题目,开始接触STM32的库开发和MSP430G2553单片机的学习。
大二第一个学期,进一步学习STM32的库开发和MSP430G2553单片机、开始学习二极管和三极管的原理。
要完成一个功能或一个项目,单片机内部环境配置与外部硬件的对接协调是非常重要的。
AT89S52单片机
以AT89S52单片机为例,通过AT89S52.h头文件使抽象的单片机内部寄存器地址简单化,更易于操作
如:
定义特殊功能寄存器名称地址
这样我们就可以用C语言来调用单片机寄存器来进行环境配置了。
下面我们来看一下51单片机的中断系统,通过对不同的寄存器进行操作,就可以让单片机实现不同的功能,
如下图是51中断系统结构示意图
中断优先级控制寄存器IP
中断允许控制寄存器IE
串行口控制寄存器SCON
定时器/计数器控制寄存器TCON
每一个寄存器都有八位,每一位都有它对应的功能,每一位可以看作一个开关,每
一个用语句EA=1;就相当于闭合上IE寄存器内EA这个位这个开关,也就开启了这一位的功能,将不同的开关组合起来,就可以实现我们想要的功能了
如:
PS=0;//串行口中断为低优先级
PX0=1;//设置外部中断0为高优先级
IT0=1;//外部中断0为边沿触发方式,下降沿有效
ES=1;//允许串行口中断
EX0=1;//允许外部中断0
EA=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~—90
break;
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了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机学习之路 STM32 AT89S51 单片机 学习