为何在新建STM工程中全局声明两个宏

本文介绍在uVision中创建STM32工程时如何正确配置标准外设驱动,包括必要的宏定义设置及常见编译错误解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在uVision中新建STM32工程后,需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中,此时需要在工程设置->C/C++选项卡下的Define文本框中键入这两个全局宏定义。

STM32F40_41xxx,USE_STDPERIPH_DRIVER

  USE_STDPERIPH_DRIVER

  这个说明你在使用标准外设驱动,有自己的外设配置文件,即stm32f10x_conf.h,详细可查看stm32f4xx.h中12026-12017行。关于stm32f4xx_conf.h

  文件中的内容,是有选择的#inlude "stm32f4xx_conf.h",这样只编译需要的外设文件,减少hex文件的体积。如果没有使用这个宏,或没有stm32f10x_conf.h文件,那么编译时会有一大堆莫名奇妙地错误,这是因为MDK中也自带了stm32f40x_xxxx.h文件,使得编译器使用MDK中.h文件,而.c文件和.h文件版本是不匹配的。

  注意,如果是库文件的错误,那一定是你工程配置有问题。

Use Standard Peripheral Driver
  在Keil MDK环境中使用STM32固件库建立工程时,可能会遇到编译不通过的问题。出现如下警告或错误提示:
warning:#223-D:function"assert_param"declaredimplicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  这时候我们需要在设置面板的“TargetOptions”中“C/C++”选项卡添加STM32F40_41xxx,USE_STDPERIPH_DRIVER。这样才能使编顺利通过。

  知其然了,我们还得知其所以然。下面就一一道来。我们知道,程序的执行是从main.c文件开始的,其中必须包含有头文件stm32f4xx.h。打开stm32f4xx.h,查找USE_STDPERIPH_DRIVER,在第12026-12017行找到

#ifdef USE_STDPERIPH_DRIVER
#include "stm32f4xx_conf.h"

 

转载于:https://www.cnblogs.com/huang-y-x/p/11307428.html

### STM32F103标准库与FreeRTOS集成指南 #### 准备工作 为了成功创建基于STM32F103的标准库和FreeRTOS的新工程项目,需要完成一系列准备工作。确保已经获取并安装了必要的工具链和支持包,包括但不限于: - 安装最新版本的Keil MDK或其他兼容IDE - 下载并解压STM32F103系列微控制器的标准外设驱动库[^1] - 获取最新的FreeRTOS源代码,并将其放置于指定目录中 #### 文件结构搭建 按照推荐的做法,在项目根目录下建立如下层次化的文件夹架构来组织各类资源文件: ```plaintext Project/ ├── FreeRTOS/ # 存放FreeRTOS核心组件及相关配置项 │ ├── inc # 头文件路径 │ ├── src # C实现文件位置 │ └── port # 针对特定硬件平台定制的部分 └── UserApplication # 用户应用逻辑所在区域 ``` 此布局有助于保持项目的清晰度以及便于后续维护。 #### 关键步骤说明 ##### 导入FreeRTOS至现有工程模板 将预先准备好的FreeRTOS源码按上述提到的方式分类存放到对应的子目录里;随后利用IDE内置功能或者手动编辑项目属性设置,使编译器能够识别这些新增加的内容作为整体构建的一部分。 ##### 初始化FreeRTOS环境变量定义 在`main.c`或者其他全局可见的地方加入定义语句以激活多线程调度机制的支持: ```c #define configUSE_PREEMPTION 1 /* 使用抢占式调度 */ #define INCLUDE_vTaskDelay 1 /* 启用延时函数接口 */ // 更多功能选项可根据实际需求调整... #include "FreeRTOS.h" #include "task.h" int main(void){ // ...初始化其他部分... vTaskStartScheduler(); // 开启实时操作系统服务 while(1){} // 此处不会执行到 } ``` 通过这种方式可以有效启动FreeRTOS内核运行周期管理流程。 ##### 实现基本的任务控制操作 对于静态方法而言,可以通过调用API来进行任务实例化及销毁处理。下面给出一段简单的例子展示如何声明两个不同优先级级别的后台作业单元[^2]: ```c static StackType_t xStack[configMINIMAL_STACK_SIZE * 2]; static StaticTask_t xTasks[2]; void prvSetupHardware(void); void TaskFunctionA(void* pvParameters); void TaskFunctionB(void* pvParameters); prvSetupHardware(); /* 创建固定分配内存空间的任务对象 */ xTaskCreateStatic( TaskFunctionA, "Task A", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1UL, &xStack[0], &xTasks[0]); xTaskCreateStatic( TaskFunctionB, "Task B", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2UL, &xStack[configMINIMAL_STACK_SIZE], &xTasks[1]); ``` 以上片段展示了怎样借助预分配的数据区段快速建立起一对相互独立的工作流实体。 #### 测试验证阶段 最后一步是要仔细测试整个系统的稳定性和功能性表现。这可能涉及到编写额外的小型应用程序用于检验各个特性是否正常运作,比如LED闪烁模式或是串口通信回显实验等简单直观的功能演示程序[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值