使用Keil uVersion MDK 5自带的CMSIS Driver建立STM32工程
Keil uVersion MDK 5.0 建立STM32工程,不需新建文件夹,拷贝标准函数库等操作。但该工程仅限自己使用。
1. 建立工程目录:
![](http://upload-images.jianshu.io/upload_images/1708416-fbca9cb26bc33965.png?imageMogr2/auto-orient/strip|imageView2/2/w/578/format/webp)
用于存放工程。
2. 新建工程:
![](http://upload-images.jianshu.io/upload_images/1708416-9c5f19fca9dfd731.png?imageMogr2/auto-orient/strip|imageView2/2/w/461/format/webp)
找到刚刚的位置, 给一个项目名字:
![](http://upload-images.jianshu.io/upload_images/1708416-d0d6dc935eccd5cb.png?imageMogr2/auto-orient/strip|imageView2/2/w/683/format/webp)
保存。
选择芯片类型:
![](http://upload-images.jianshu.io/upload_images/1708416-df8140ee8b5d7102.png?imageMogr2/auto-orient/strip|imageView2/2/w/630/format/webp)
没找到,说明你没有安装STM32的芯片包,要去官网下载一下咯。
项目配置:
这里很重要,选择一些必要的内容,否则,工程将出现错误。
必要的主要是以下部分:
![](http://upload-images.jianshu.io/upload_images/1708416-c543b481293f8c97.png?imageMogr2/auto-orient/strip|imageView2/2/w/999/format/webp)
这两项不选,应该不能用。
其他配置:
根据自己的需要进行配置。
假如你选择的有问题,将会有提示:
![](http://upload-images.jianshu.io/upload_images/1708416-9a992014101a38de.png?imageMogr2/auto-orient/strip|imageView2/2/w/999/format/webp)
根据提示,选上就对咯。
我的最基本配置:
![](http://upload-images.jianshu.io/upload_images/1708416-6a1192ec7ca94d70.png?imageMogr2/auto-orient/strip|imageView2/2/w/999/format/webp)
Drivers下面,按需选择咯,但是要注意,需要GPIO、DMA等支持:
![](http://upload-images.jianshu.io/upload_images/1708416-f93c160b2c24f8f2.png?imageMogr2/auto-orient/strip|imageView2/2/w/999/format/webp)
工程成型:
![](http://upload-images.jianshu.io/upload_images/1708416-52385d7732e4438b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1090/format/webp)
Drivers的错误问题解决:
刚刚建立好工程,如果你使用了CMSIS Drivers,如果你恰巧还是比较旧的版本,比如说Keil.STM32F1xx_DFP.1.1.0.pack,你会发现,有部分头文件找不到,尤其是UART_STM32F10x.h,这是keil 5比较坑的地方。
如下是我的经过:
我增加了Driver的相关组件,但是头文件都找不到,出现如下错误:
![](http://upload-images.jianshu.io/upload_images/1708416-99fe2a3ab12a200b.png?imageMogr2/auto-orient/strip|imageView2/2/w/942/format/webp)
'Driver_I2C.h' file not found.
诧异之余,只能找到增加路径了:
![](http://upload-images.jianshu.io/upload_images/1708416-b440fb248bc1ffa5.png?imageMogr2/auto-orient/strip|imageView2/2/w/892/format/webp)
实际这些头文件在这里,所以在target里增加路径:
![](http://upload-images.jianshu.io/upload_images/1708416-cc933aff1ff4957b.png?imageMogr2/auto-orient/strip|imageView2/2/w/492/format/webp)
![](http://upload-images.jianshu.io/upload_images/1708416-e95cf3b6b3bd5bb8.png?imageMogr2/auto-orient/strip|imageView2/2/w/630/format/webp)
![](http://upload-images.jianshu.io/upload_images/1708416-bd14d992c3ea9f8c.png?imageMogr2/auto-orient/strip|imageView2/2/w/470/format/webp)
增加依赖,根据安装目录决定。
这个时候就解决这个问题了。
还有一个很大的坑:
Driver增加的是UART,但实际上,keil已经更改为USART,所以即便是增加了上述的路径,还是错的。
解决办法:
更新pack:
http://www.keil.com/dd2/Pack/#/eula-container
这里找到自己需要的pack,下载更新了。
重建工程,就没有这种问题了,国内很早就发现,但是,很多人是盗版的,根本没机会提交给keil去修改,所以有一段时间这个没法用,现在已经更新好了。
STM32的CMISIS Drivers使用方式
增加了相关驱动之后,你会发现,还是不能用,抛出对应于每个驱动的未定义宏错误:
如I2C: "I2C not configured in RTE_Device.h!"
SPI的:"SPI not configured in RTE_Device.h!"
最坑的USART/UART: "USART not configured in RTE_Device.h!"
![](http://upload-images.jianshu.io/upload_images/1708416-adff800b12bbffed.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
以及诸如此类的错误,这是因为,驱动是给这一系列所开发的,你必须要根据你的芯片,修改RTE_Device.h文件。
我是用的是STM32F103RBT6,我需要按照这个芯片所具有的外部硬件资源,去打开相应的模块定义,就是修改对应宏值为1就可以了。
修改方法是,直接去RTE_Device.h里面修改,把对应模块的值修改为1就可以了。一定不要弄错了,修改的是芯片具有的,或者只修改自己所需要的。
![](http://upload-images.jianshu.io/upload_images/1708416-c3589a8a9e5ba52f.png?imageMogr2/auto-orient/strip|imageView2/2/w/679/format/webp)
Hello STM32完毕
作者:heguorui
链接:https://www.jianshu.com/p/482ff2dedb15
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。