在使用IAR时,尤其是从MDK转到IAR编程时,这个Use CMSIS会困扰很多人,当然也包括我,这个要不要勾选,会出现n多的编译错误,下图所示:
这里有一个概念“CMSIS”,这个是ARM公司做的微控制器软件接口标准,
CMSIS:Cortex Microcontroller Software Interface Standard,是Cortex-M处理器系列与供应商无关的硬件抽象层,使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微处理器新开发人员的学习过程。 上面的概念都是废话,简单的概括就是,工程文件里,需要按规矩包含CMSIS,不包含,编译器就会报错,其实一般的工程师用不到。
在Keil中是集成了CMSIS的,在创建项目的时候,还是需要在工程文件中自己添加CMSIS的,所以一般报错的很少。 但是IAR程序中,已经很“贴心”的包含了CMSIS,这个在IAR的安装文件中可以找到,而且创建项目IAR会默认勾选“Use CMSIS”,那么就出现了一个问题,特别容易忽略的问题:
因为从IAR从6.2版本开始,引入了CMSIS 2.x的库,而STM32的固件库3.x版本依然使用CMSIS 1.x。
所以,结论就来了:如果使用固件库里的CMSIS,那么IAR中就不能勾选使用“Use CMSIS”,或者需要将固件库中的CMSIS文件更换成IAR安装目录中的对应CMSIS文件。
当然也可以不要去勾选“Use CMSIS”,而使用固件库自带的低版本的CMSIS文件。