[其他ST产品] STM32keil设置中的宏定义

[复制链接]
2652|14
 楼主| 有何不可0365 发表于 2023-9-20 11:07 | 显示全部楼层 |阅读模式
STM32keil设置中的宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER作用以及用VS Code编写stm32代码配置问题
STM32 keil设置中的宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER作用以及用VS Code编写stm32代码配置问题

在创建STM32标准库工程模板时,要在keil的C/C++设置中添加下面的宏定义,注意中间是英文逗号隔开

97222650a61d13b8f8.png

宏定义STM32F10X_MD的作用:

在stm32f10x.h文件中有这样预处理代码

  1. #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
  2. #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
  3. #endif



 楼主| 有何不可0365 发表于 2023-9-20 11:07 | 显示全部楼层
意思是说如果有定义STM32F10X_LD、STM32F10X_LD_VL、STM32F10X_MD……其中的一种,defined就是1,!defined就是0,#if判断就为假,就不会执行下面的 #error 语句,如果全部都没定义,那#if判断就为真,执行#error语句

#error命令是C/C++语言的预处理命令之一,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。

其中这些宏定义也是要根据芯片的容量来选择定义的,STM32F10X_LD为小容量、STM32F10X_MD为中容量、STM32F10X_HD为大容量
 楼主| 有何不可0365 发表于 2023-9-20 11:12 | 显示全部楼层
这里的容量是指FLASH的大小,判断方法如下:

16KB≤FLASH≤32KB 选择:STM32F10X_LD

64KB≤FLASH≤128KB 选择:STM32F10X_MD

256KB≤FLASH≤512KB 选择:STM32F10X_HD

常用的STM32C8T6是64K,为中容量,STM32F103ZET6为512K,为大容量

所以要定义这个STM32F10X_MD这个宏,才能正常编译,并且stm32f10x.h头文件中有许多与这个宏定义相关的配置,所以这宏定义相当重要
 楼主| 有何不可0365 发表于 2023-9-20 11:13 | 显示全部楼层
宏定义USE_STDPERIPH_DRIVER的作用:
在stm32f10x.h头文件中有以下语句
  1. :[/code[code]][code]#ifdef USE_STDPERIPH_DRIVER
  2.   #include "stm32f10x_conf.h"
  3. #endif
[/code]
 楼主| 有何不可0365 发表于 2023-9-20 11:14 | 显示全部楼层
这段代码的意思是,只有定义了USE_STDPERIPH_DRIVER,才包含stm32f10x_conf.h,从而被main.c用到。

打开stm32f10x_conf.h文件可看到下面代码
  1. /* Includes ------------------------------------------------------------------*/
  2. /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
  3. #include "stm32f10x_adc.h"
  4. #include "stm32f10x_bkp.h"
  5. #include "stm32f10x_can.h"
  6. #include "stm32f10x_cec.h"
  7. #include "stm32f10x_crc.h"
  8. #include "stm32f10x_dac.h"
  9. #include "stm32f10x_dbgmcu.h"
  10. #include "stm32f10x_dma.h"
  11. #include "stm32f10x_exti.h"
  12. #include "stm32f10x_flash.h"
  13. #include "stm32f10x_fsmc.h"
  14. #include "stm32f10x_gpio.h"
  15. #include "stm32f10x_i2c.h"
  16. #include "stm32f10x_iwdg.h"
  17. #include "stm32f10x_pwr.h"
  18. #include "stm32f10x_rcc.h"
  19. #include "stm32f10x_rtc.h"
  20. #include "stm32f10x_sdio.h"
  21. #include "stm32f10x_spi.h"
  22. #include "stm32f10x_tim.h"
  23. #include "stm32f10x_usart.h"
  24. #include "stm32f10x_wwdg.h"
  25. #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
 楼主| 有何不可0365 发表于 2023-9-20 11:14 | 显示全部楼层
这表示stm32f10x_conf.h将所有的外设头文件都包含进来了,如果要用到STM32固件库驱动标准外设,则外设驱动头文件是必不可少的,如stm32f10x_gpio.h等。而这些文件的添加都是在stm32f10x_conf.h中进行。

所以宏定义了USE_STDPERIPH_DRIVER后,就会包含stm32f10x_conf.h头文件,而stm32f10x_conf.h头文件里又包含了固件库的外设头文件;在编写代码时,只需要引入stm32f10x.h头文件就行了
 楼主| 有何不可0365 发表于 2023-9-20 11:15 | 显示全部楼层
VS Code配置问题
因为keil编写代码不方便,有时候代码提示又没出现,所以就用VS Code来编写代码,然后用keil来编译

使用VS Code打开stm32工程,在使用到标准外设库文件的函数时,如GPIO_SetBits();写了之后发现跳转不过去,按住Ctrl+左键没反应,或者有些函数没出代码提示

这是因为没有在开头引入要调用函数的对应头文件,如stm32f10x_gpio.h
 楼主| 有何不可0365 发表于 2023-9-20 11:15 | 显示全部楼层
 楼主| 有何不可0365 发表于 2023-9-20 11:16 | 显示全部楼层
但在keil中又没有在开头引入这些头文件,为什么也可以跳转呢?

这就是上面提到的宏定义USE_STDPERIPH_DRIVER的问题了,因为在keil中设置了宏定义,所以没有手动引入头文件也能跳转

那在VS Code中怎么添加这个预处理宏定义呢?
 楼主| 有何不可0365 发表于 2023-9-20 11:16 | 显示全部楼层
打开左边文件栏里的c_cpp_properties.json文件
90923650a640921e08.png
 楼主| 有何不可0365 发表于 2023-9-20 11:16 | 显示全部楼层
把在keil中定义的两个宏定义复制到defines内容中,添加在下面图中的地方,按照格式改到没报错
21631650a641d5b048.png
 楼主| 有何不可0365 发表于 2023-9-20 11:16 | 显示全部楼层
然后保存,重启一下VS Code,再开始编写代码,就发现函数可以跳转到对应的函数实现了
AloneKaven 发表于 2023-9-20 22:03 | 显示全部楼层
这个是用了keil的插件吗?
帛灿灿 发表于 2024-9-11 07:20 | 显示全部楼层

得到不同测试条件下的输出电流和电压值,分析数据并进行比较
Bblythe 发表于 2024-9-11 08:23 | 显示全部楼层

这样可以获得更光滑的表面。
周半梅 发表于 2024-9-11 10:19 | 显示全部楼层

是因为它作用是起到抑制,多应用于开关电源电路中
Pulitzer 发表于 2024-9-11 11:22 | 显示全部楼层

对于标准PCB设计,c形孔的最小直径为0.5mm,
童雨竹 发表于 2024-9-11 13:18 | 显示全部楼层

它是由两个尺寸相同、匝数相同的线圈对称地绕制在同一个铁氧体环形磁芯
Wordsworth 发表于 2024-9-11 14:21 | 显示全部楼层

镀半孔或c形孔是在板的边缘上镀半个半孔的一半。
Clyde011 发表于 2024-9-11 15:24 | 显示全部楼层

驱动脉冲变压器原边时,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

781

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部