關于Cortex內核(以下選摘自百度百科-Cortex:http://baike.baidu.com/view/1745516.htm):
Cortex™-A 系列 - 開放式操作系統的高性能處理器
Cortex™-A 系列廣泛運行于手機,PDA,掌上電腦等需要高頻率時鐘處理的產品
Cortex™-R 系列 - 面向實時應用的卓越性能
Cortex™-M 系列 - 面向具有確定性的微控制器應用的成本敏感型解決方案 [比如山寨手機..]
STM32系列處理器使用ARM Cortex-M3內核.Cortex-M3代表的是ARM9架構
不同型號的STM32處理器引腳數和性能也有所不同,下面是STM32F10x系列:
上圖橫軸代表芯片的引腳類型,縱軸代表芯片的內部代碼FLASH(即ROM)大小
由于每一種的STM32F10x系列處理器都會有不同的附加性質,下面就給出來讓大家了解一下
下面用STM32F107VCT6來和AT89C51-24PU來作一個對比(其實根本是不能相比的,一個是微處理器[72MHZ],一個是單片機[24MHZ],只不過是
為了讓大家更能理解一些實質性的東西)
外觀上的差異是最容易理解的,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的引腳挺麻煩的,不過處理器主頻也彌補函數過多帶來的增多額外時鐘處理的一些缺陷