答案:(1)STM32固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。(2)ARM公司和芯片生产商共同提出了一套标准CMSIS标准(CortexMicrocontrollerSoftwareInterfaceStandard),既“ARMCortexTM微控制器软件接口标准”。CMSIS分为核内外设访问层、中间件访问层和外设访问层3个基本功能层。ARM是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI、ST这样的公司,并不是做标准的,只是一个芯片公司,他们是根据ARM公司提供的芯片内核标准设计自己的芯片。任何一个做Cortex-M3芯片,他们的内核结构都是一样的,只是在存储器容量、片上外设、端口数量、串口数量以及其他模块上有所区别,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种Cortex-m3内核芯片的片上外设也会有很大的区别,比如STM32F103RBT和STM32F103ZET在片上外设上就有很大的区别。ST官方库(STM32固件库)就是根据这套CMSIS标准设计的。(3)CMSIS向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有CMSIS标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而CMSIS标准就是要强制规定,芯片生产公司设计的库函数必须按照CMSIS这套规范来设计。(4)CMSIS还对各个外设驱动文件的文件名字规范化、函数的名字规范化等一系列规定。比如,GPIO_ResetBits函数,这个函数名字也是不能随便定义的,是要遵循CMSIS规范的。又如,在我们使用STM32芯片时,首先要进行系统初始化,CMSIS就规定系统初始化函数名必须为SystemInit,所以各个芯片公司写自己的库函数时,就必须用SystemInit对系统进行初始化。