完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近有项目想要到STM32,很亲切,下面我把今天搭建keil-MDK开发环境的过程以及遇到的问题和解决方案分享出来,希望对大家有帮助。
软件环境:keil4 硬件平台:STM32F103C8 STM32标准库版本:STM32F10x_StdPeriph_Lib_V3.5.0 步骤如下: 1、将标准库里面的CMSIS和STM32F10x_StdPeriph_Driver两个文件夹拷贝到工程目录下。 2、打开keil4,创建新工程 ①点击项目菜单下的第一个选择型,创建新工程,弹出对话框,将工程命名为键,即如下图,点击保存。 ②接着弹出如下对话框,选择STM32F103C8。 ③点击OK,紧接着出现如下提示: 。④选择“是”于是将产生组织一个名为“startup_stm32f10x_md.s”的文件,并被在源组1以下。到此一个创建完成。 3、将标准文件导入工程中。 ①点击如下图的按钮 ②屏幕弹出如下,最下面为工程目标,中间工程的各个组,右边则为改组的文件,首先创建各组,然后各组中添加文件。 添加完后如下,点击OK后工程就可以了会CMSIS和STM32F10x_StPeriph_Driver多出目标。 4、编辑 ①点击编译,会出现很多的错误提示: 重建目标“目标1” 正在组装 startup_stm32f10x_md.s... 正在 编译 core_cm3.c... 正在 编译 system_stm32f10x.c... CMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h(96): 错误: #35: #error 指令: "请选择首先是您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译 misc.c... STM32F10x_StdPeriph_Driversrcmisc.c(24): 错误:#5:无法打开源输入文件“misc.h” : 没有 编译 stm32f10x_adc.c 的文件或目录... STM32F10x_StdPeriph_Driversrcstm32f10x_adc.c(23): 错误:#5:无法打开源输入文件“stm32f10x_adc.h”:没有 编译的文件或目录。 .. STM32F10x_StdPeriph_Driversrcstm32f10x_bkp.c(23): error: #5: cannot open source input file "stm32f10x_bkp.h": No such file or directory compiles stm32f10x_can.c... STM32F10x_bkp.c (23): error: #5: cannot open source input file "stm32f10x_bkp.h"错误:#5:无法打开源输入文件“stm32f10x_can.h”:没有这样的文件或目录 编译stm32f10x_cec.c... STM32F10x_StdPeriph_Driversrcstm32f10x_cec.c(23):错误:#5:无法打开源输入文件“ stm32f10x_cec.h“:没有这样的文件或目录 编译stm32f10x_crc.c ... STM32F10x_StdPeriph_Driver的 src stm32f10x_crc.c(23):错误:#5:不能打开源输入文件‘stm32f10x_crc.h’:没有这样的文件或目录 编译stm32f10x_dac.c... STM32F10x_StdPeriph_Driversrcstm32f10x_dac.c(23):错误:#5:无法打开源输入文件“stm32f10x_dac.h”:没有这样的文件或目录 编译stm32f10x_dbgmcu.c... STM32F10x_dac.c.stm32F10x_dac.c_stm32f10x_dac_stm32f10x_dac_stm32f10x_dac_stm32f10x_dac_dac.h错误:#5:无法打开源输入文件“stm32f10x_dbgmcu.h”:没有这样的文件或目录 编译stm32f10x_dma.c... STM32F10x_StdPeriph_Driversrcstm32f10x_dma.c(23):错误:#5:无法打开源输入文件stm32f10x_dma.h“:没有这样的文件或目录 编译stm32f10x_exti.c ... STM32F10x_StdPeriph_Driver的 src stm32f10x_exti.c(23):错误:#5:不能打开源输入文件‘stm32f10x_exti.h’:没有这样的文件或目录 编译stm32f10x_flash.c... STM32F10x_StdPeriph_Driversrcstm32f10x_flash.c(23):错误:#5:无法打开源输入文件“stm32f10x_flash.h”:没有这样的文件或目录 编译stm32f10x_fsmc.c... STM32F10x_fsmc.c ... STM32F10x_flash_sc32f10x_stm2f10x_stm32f10x_stdm2f10x_stm32f10x_flash_32f10x_flash3_stdPeriph_stm32f10x_flash_stdPeriph_stm32f10x_flash_stm32f10x_flash_stm32f10x_flash.h错误:#5:无法打开源输入文件“stm32f10x_fsmc.h”:没有这样的文件或目录 编译stm32f10x_gpio.c... STM32F10x_StdPeriph_Driversrcstm32f10x_gpio.c(23):错误:#5:无法打开源输入文件“ stm32f10x_gpio.h“:没有这样的文件或目录 编译stm32f10x_i2c.c ... STM32F10x_StdPeriph_Driver的 src stm32f10x_i2c.c(23):错误:#5:不能打开源输入文件‘stm32f10x_i2c.h’:没有这样的文件或目录 编译stm32f10x_iwdg.c... STM32F10x_StdPeriph_Driver的 src stm32f10x_iwdg.c(23):错误:#5:不能打开源输入文件“stm32f10x_iwdg.h”:没有这样的文件或目录 编译stm32f10x_pwr.c ... STM32F10x_StdPeriph_Driver的 src stm32f10x_pwr.c(23):错误:#5:无法打开源输入文件“stm32f10x_pwr.h”:没有这样的文件或目录 编译stm32f10x_rcc.c... STM32F10x_StdPeriph_Driversrcstm32f10x_rcc.c(23):错误:#5:无法打开源输入文件“ stm32f10x_rcc.h“:没有这样的文件或目录 编译stm32f10x_rtc.c ... STM32F10x_StdPeriph_Driver的 src stm32f10x_rtc.c(23):错误:#5:不能打开源输入文件‘stm32f10x_rtc.h’:没有这样的文件或目录 编译stm32f10x_sdio.c... STM32F10x_StdPeriph_Driversrcstm32f10x_sdio.c(23):错误:#5:无法打开源输入文件“stm32f10x_sdio.h”:没有这样的文件或目录 编译stm32f10x_spi.c... STM32F10x_Drive3r3rfsrc()错误:#5:无法打开源输入文件“stm32f10x_spi.h”:没有这样的文件或目录 编译stm32f10x_tim.c... STM32F10x_StdPeriph_Driversrcstm32f10x_tim.c(23):错误:#5:无法打开源输入文件“ stm32f10x_tim.h": No such file or directory compiles stm32f10x_usart.c... STM32F10x_StdPeriph_Driversrcstm32f10x_usart.c(23): error: #5: cannot open source input file "stm32f10x_usart.c" compiling such file stm32f10x_wwdg.c... STM32F10x_StdPeriph_Driversrcstm32f10x_wwdg.c(23): error: #5: cannot open source input file "stm32f10x_wwdg.h": No such file or directory Target not created 分析:上面这些错误提示是因为找不到头文件,因此必须告诉编译器这些头文件在哪按照如下图的①②③④步操作就可以把增量文件的路径添加进来。 ②再次点击编译,会出现如下错误: 重建目标的目标1' 组装startup_stm32f10x_md.s。 .. 正在 编译 core_cm3.c... 正在 编译 system_stm32f10x.c... CMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请先选择目标 STM32F10x 设备在您的应用程序中使用(在 stm32f10x.h 文件中)”正在 编译 misc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_adc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_bkp.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_can.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_cec.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_crc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_dac.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_dbgmcu.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_dma.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_exti.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_flash.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_fsmc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_gpio.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_i2c.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_iwdg.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_pwr.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_rcc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_rtc.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_sdio.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_spi.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)" 正在 编译 stm32f10x_tim.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "请先选择使用的目标 STM32F10x 设备在您的应用程序中(在 stm32f10x.h 文件中)” 编译 stm32f10x_usart.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x.h 文件中)” 编译stm32f10x_wwdg.c... C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error 指令:“请首先选择您的应用程序中使用的目标 STM32F10x 设备(在 stm32f10x 中) .h 文件)” 目标未创建 解决错误的方法就是重新进入这个页面中,并在如下定义添加STM32F10X_MD。 ③再次点击编译,出现如下错误提示,也就是提示所有的库 Rebuild target ' Target1 ' assemble startup_stm32f1x_md.s compiling core_cm3.c... compiling system_stm32f10x.c... compiling misc.c... STM32F10x_StdPeriph_Driversrcmisc.c(99):警告:#223-D:函数“assert_param”隐式声明 STM32F10x_StdPeriph_Driversrcmisc.c(117):警告:#223-D:函数“assert_param”隐式声明 STM32F10 srcmisc.c(159):警告:#223-D:函数“assert_param”隐式声明 STM32F10x_StdPeriph_Driversrcmisc.c(178):警告:#223-D:函数“assert_param”隐式声明 ...... 链接.. 。 key.axf:错误:L6218E:未定义符号assert_param(从misc.o简称)。 key.axf:错误:L6218E:未定义符号 main(从 rtentry2.o 引用)。 Target not created 事实上,assert_param函数在文件“stm32f10x_conf.h”中,是一个宏定义,用于对函数的输入参数进行检查。 在stm32f10x.h文件中搜索stm32f10x_conf.h,果然找到了预编译代码,就是说如果定义了USE_STDPERIPH_DRIVER宏,那么stm32f10x_conf.h就包含该文件,否则不包含该文件,所以要包含该文件,就必须定义USE_STDPERIPH_DRIVER宏。那么怎么定义? 有两种方法定义USE_STDPERIPH_DRIVER宏: 第一种方法标准宏定义:直接 在stm32f10x.h文件的名称位置定义USE_STDPERIPH_DRIVER。呢?因为stm32f10x.h文件就是只读属性,所以首先要把该文件修改文可读可写属性,然后通过编辑器打开,在文件头部添加代码的#define USE_STDPERIPH_DRIVER这样就算是定义了USE_STDPERIPH_DRIVER宏。 第二种方法就是偷懒的方法: 如下图所示,在下图的定义栏中添加USE_STDPERIPH_DRIVER,注意:STM32F10X_MD与USE_STDPERIPH_DRIVER之间是逗号隔开。 ④再点击编译,依然提示如下错误: 重建目标的目标1' 组装startup_stm32f10x_md.s ... 编译core_cm3.c。 .. 编译 system_stm32f10x.c ... CMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h(8297): error: #5: cannot open source input file "stm32f10x_conf.h": No such file or directory compiling misc.c... C:Keil ARMIncSTSTM32F10xstm32f10x.h(8297): error: #5: cannot open source input file "stm32f10x_conf.h": No such file or directory compileting stm32f10x_adc.c... ... C:KeilARM IncSTSTM32F10xstm32f10x.h(8297): error: #5: cannot open source input file "stm32f10x_conf.h": No such file or directory Target not created 从提示中可以创建,目录中根本就没有stm32f10x_conf.h这个文件,把这个文件添加进去。 ⑤最后编译,是不是完美通过呢很抱歉,依然出现如下提示:? 是不是快崩溃了,不过没关系,这个问题才是最后的一个问题,错误提示工程中确实存在了主要的函数,那我们创建一个文件,然后创建一个主要的函数了 。c的文件,并在这个文件中定义了一个名为main()的函数,然后把这个文件添加到用户这个组中,即如下: 再次点击,OK,通过! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1159 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1189 浏览 1 评论
607 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
454 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1107 浏览 2 评论
1655浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
319浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
319浏览 3评论
313浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
287浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-28 23:19 , Processed in 0.970665 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191