STM32微处理器简介
外观上的差异是最容易理解的,STM32F107VCT6采用的是LQFP-100Pin 封装,AT89C51采用DIP-40Pin封装(Pin是指引脚数,DIP也就是电子元件
里面的直插元件,贴片元件也有很多种,其中LQFP封装就是一个例子)
LQFP-100Pin,封装引脚图
STM32F107VCT6 实物图片
从代码储存来比较,STM32F107VCT6有512K字节的内部ROM,而AT89C51却只有4K,89C52只有8K,但是可以通过外部PROM/EEPROM来读取
代码,AT89C51可以寻址0x0000-0xFFFF,也就是16K拓展ROM.STM32F107VCT6也可以实现外部拓展代码储存,用NAND FLASH
从随机储存器比较,STM32F107VCT6有64K RAM,AT89C51有512B RAM
从指令集来比较,89Cxx类使用MCU-51指令集,STM32使用ARM指令集,ARM7系列和ARM9系列也各使用不同的指令集
控制STM32的通用IO端口的代码和AT89C51大有不同,对于STM32的各个端口还需要先配置,后使用,AT89C51就只需要一句
sbit CtrlPort=Px^x;或者Px=0x??;[Px^x代表Px端口的第x位IO引脚,0x??代表一个两位的十六进制的数]
就可以使用这个IO引脚,对一个IO引脚输出高电平和输出低电平只需简单的
CtrlPort=1输出高电平 CtrlPort=0输出低电平
STM32对于一个将要输出高电平再低电平的端口需要先对它进行初始化,以STM32的PA3引脚为例
void PA3_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //这个是控制GPIO引脚的结构
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO , ENABLE); //对PA的端口进行AFIO的时钟处理
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //第3个引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //对PA端口的Pin3引脚进行初始化
}
这个就是初始化,后面让IO端口进行高低电平输出
void PA3_Turn_Low(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_3); //设置PA3为低电平
}
void PA3_Turn_Hige(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_3); //设置PA3为高电平
}
用一个STM32的引脚挺麻烦的,不过处理器主频也弥补函数过多带来的增多额外时钟处理的一些缺陷
评论