如何为BluePill编译StdPeriph库示例?

问题描述

我正在尝试使用GNU arm eabi gcc编译示例:我是从编译器获得的:

#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

然后我在命令行中添加-DSTM32F10X_MD,因为我认为,也许是不正确的,这就是BluePill的意思,然后我得到了:

#error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"

我花了好一会儿才意识到,EVAL意味着ST出售了一个评估板来测试其产品,但是我当然没有,我有一个来自Aliexpress的廉价蓝丸。那么,我现在的选择是什么?如何编译示例?

更新:这是我完整的命令行

arm-none-eabi-gcc -DSTM32F10X_MD main.c -I/home/me/st/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -I/home/me/st/Libraries/CMSIS/CM3/CoreSupport  -I/home/me/st/Utilities/STM32_EVAL -Wfatal-errors

解决方法

首先:请勿使用STDPeriph,已弃用。使用HAL。

第二个:要求您在库本身中定义编译的平台,以便它可以包含正确的依赖项。 (例如内存中的外围位置)

解决方案是读取STM芯片的型号(类似于STM32F103C8T6),然后查看stm32f10x.h文件并选择您的MCU,这可能涉及取消注释define行。如果您不知道有哪些类型的选项,请尝试阅读您拥有的MCU的数据表,因为它指定了有关它的所有内容。

对于EVAL板,您可以选择其中任何一个,因为它们仅别名(定义)简单名称,例如LED1。那样您就无法使用它们。

再次不要使用STDPeriph请使用HAL!只需使用CubeMX为您生成一个带有库的项目。比起一些旧的STDPeriph评估板接头,它可能还更好地支持BluePill。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...