【STM32】从新建一个工程开始:STM32 新建工程的详细步骤

STM32 开发通常使用 Keil MDKSTM32CubeMXIAR 等工具来创建和管理工程。此处是 使用 Keil MDK5 + STM32CubeMX 创建 STM32 工程的详细步骤。

新建的标准库工程文件已上传至资源中,下载后即可直接使用。

标准库新建 STM32 工程的基本目录结构:STD_STM32F103RC_Demo

1. 新建 STM32 工程的基本目录结构

在 STM32 工程中,通常会有以下几个文件夹:
工程构架
新建工程

外设库(FWLib):存放 STM32 官方提供的驱动库,例如 HAL 库或标准外设库(StdPeriph Lib
用户文件(USER):存放用户编写的代码,如 main.c
工程文件(MDK-ARM):存放 Keil 相关的 *.uvprojx 工程文件
核心文件(COER):CMSIS 核心支持库
编译中间文件(OBJ):存放编译过程中生成的 .o 文件
系统文件(SYSTEM):存放 STM32 系统初始化相关的 system_stm32f10x.c

2. 使用 STM32CubeMX 生成工程

⭐ 2.1 安装必要的软件
Keil MDK-ARM(用于编写和编译代码)
STM32CubeMX(用于生成初始化代码)
ST-Link 驱动 和 FlyMcu(用于调试和烧录)

⭐ 2.2 创建 STM32CubeMX 工程

  1. 打开 STM32CubeMX,点击 “New Project
  2. 选择目标 STM32 芯片(例如 STM32F103C8T6)
  3. 配置文件:时钟(RCC)、串口(USART)、GPIO、定时器(TIM)等外设
  4. 选择代码生成方式
    • 库类型:HAL 库(推荐)或 LL 库
    • IDE 选择:Keil MDK-ARM
  5. 点击“Generate Code” 生成工程
    流程一
    流程二
    流程三
标准库移植 STM32F10x_StdPeriph_Lib_V3.5.0:

标准库目录:
在这里插入图片描述
移植第一 步在 COER 文件夹下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
文件夹下的文件:

在这里插入图片描述
文件夹:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
添加文件:startup_stm32f10x_hd.s   和    startup_stm32f10x_md.s

在这里插入图片描述
移植第二步在 USER 文件夹下:
进入标准库的文件夹中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

在这里插入图片描述
在标准库的文件夹中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

在这里插入图片描述

移植第三步在 FWLib 文件夹下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver
将 文件夹 inc 和 src 复制到工程目录的 FWLib 下

在这里插入图片描述
第四步 在 Keil uVision5 中新建的工程目录中,将标准库的 .c.h 文件分别加入在工程中:
在这里插入图片描述
在这里插入图片描述

以上。便添加完成了标准库中的所有 .c 文件,之后点击魔法棒,开始添加 .h 文件。

第一步:改为V5版本:
在这里插入图片描述
第二步:进入C/C++目录下新增目录:

\COER
\FWLib\inc
\USER

在这里插入图片描述
在这里插入图片描述
然后在 Define 中添加宏:

STM32F10X_HD,USE_STDPERIPH_DRIVER

点击 OK 结束。以上,便完成了标准库的前置配置。接下来我们测试一下代码是否能够调试与运行↓:

在这里插入图片描述
配置一下,将生成文件的目录放在OBJ文件夹下:
在这里插入图片描述

LED 亮灭:写一段点亮 LED 灯的代码:

main.c 中编写代码:

int	 main(void)
{
		
	GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_Init(GPIOC, &GPIO_InitStruct);
	GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET);

}
编译工程
  • 点击“Build”按钮(F7)编译代码
  • 若无报错,生成 *.hex 文件

然后点击编译:此时会将代码生成至OBJ文件夹下:
打开 FlyMcu.exe
在这里插入图片描述
在这里插入图片描述
这里按一下开发板上的复位键(记得此时开发板的按钮开关模式为 ISR)

开发板的 ISR(Interrupt Service Routine)和 RUN(运行模式)

ISR(中断服务程序) 是 当外部或内部事件发生时,CPU 自动执行的特定函数,用于响应和处理中断事件。
📌 1.1 ISR 主要用于:
	外部中断(按键、传感器触发)
	定时器中断(周期性任务、PWM 计时)
	串行通信中断(USART、I2C、SPI 数据接收)
	DMA 传输完成中断
	异常处理(如硬件故障)
	
✅ 1.2 ISR 的运行流程
	1.中断发生(如 GPIO 触发、定时器超时)。
	2.CPU 停止当前任务,保存上下文(寄存器、堆栈)。
	3.跳转到 ISR 处理程序,执行中断任务。
	4.ISR 结束,恢复原任务,继续运行。

在嵌入式系统中,RUN 模式指的是 MCU 正常运行的状态。
📌 MCU 可能有多种运行模式,如:
	RUN 模式(正常运行)
	SLEEP 模式(低功耗模式,CPU 暂停但外设运行)
	STOP 模式(更低功耗,RAM 保持但 CPU 停止)
	STANDBY 模式(最低功耗,RAM 断电)

流程四
以上。代码便烧录成功了。然后将按钮切换至 RUN 运行模式,
请添加图片描述
测试成功。以上,是标准库新建工程的流程。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

<think>好的,我现在需要帮助用户了解如何在STM32中使用FreeRTOS创建任务的流程图和示例图示。首先,我得回忆一下FreeRTOS任务创建的基本步骤,然后将其转化为流程图的各个步骤。 首先,STM32开发通常使用CubeMX进行初始化配置,所以第一步应该是使用CubeMX配置FreeRTOS。用户可能需要启用FreeRTOS,设置任务参数,比如堆栈大小、优先级等。这部分应该是流程图的第一步。 接下来,生成代码。CubeMX生成代码后,用户需要在IDE中打开工程,找到自动生成的任务函数。例如,在main.c中,可能有默认的任务创建代码,比如StartDefaultTask。这一步可能需要用户查看生成的文件,比如osThreadId的定义。 然后,用户需要定义自己的任务函数。任务函数通常是一个无限循环,里面包含任务的具体操作,比如控制继电器或者读取传感器数据。这里需要确保任务函数的结构正确,使用vTaskDelay之类的函数进行延时,避免占用过多CPU资源。 之后是创建任务,使用xTaskCreate或者xTaskCreateStatic函数。需要确认参数是否正确,包括任务函数指针、任务名、堆栈大小、优先级、任务句柄等。这部分在流程图中应该是一个判断步骤,检查返回值是否成功。 任务启动后,FreeRTOS调度器会自动管理任务执行。用户需要启动调度器,通常是在main函数中调用osKernelStart()。流程图到这里应该进入运行状态,表示任务已经在执行了。 接下来,用户可能需要考虑任务间的通信或同步机制,比如信号量、队列、事件标志等。这部分可以作为扩展步骤出现在流程图中,但根据用户的问题,可能不是重点,不过可以提到,例如引用中的OS_FLAG或OS_MBOX的例子。 关于流程图示例图示,用户可能需要一个简化的图示,比如开始->配置FreeRTOS->生成代码->定义任务函数->创建任务->启动调度器->任务运行。每个步骤用箭头连接,并标注关键点,比如CubeMX配置、xTaskCreate调用等。 用户提到的startup_xxxx.s文件可能在引用[2]中提到,但用户的问题是关于任务创建,所以可能不需要深入启动文件,但需要确认生成的工程结构是否正确,比如启动文件的位置是否影响任务创建,不过通常CubeMX会自动处理这些。 需要确保回答中提到关键函数和配置步骤,并建议用户参考FreeRTOS的例程,如引用[1]中的例程。可能还需要提醒用户注意堆栈溢出、优先级设置等问题,但用户主要询问的是流程图,所以可能简要提及。 最后,生成相关问题,比如任务优先级的设置、任务通信方法、堆栈大小调整等,帮助用户进一步学习。</think>### STM32中FreeRTOS创建任务的流程图及示例 在STM32中使用FreeRTOS创建任务的核心流程如下: 1. **初始化硬件与FreeRTOS配置** 通过STM32CubeMX启用FreeRTOS并配置任务参数(如堆栈大小、优先级),生成初始化代码。 2. **定义任务函数** 编写任务的具体逻辑,通常为无限循环结构。示例: ```c void MyTask(void *argument) { while(1) { // 任务操作(如控制继电器) vTaskDelay(100); // 延时100个tick } } ``` 3. **创建任务** 在`main`函数中调用`xTaskCreate`,示例: ```c xTaskCreate(MyTask, "Task1", 128, NULL, 2, NULL); ``` 4. **启动调度器** 调用`osKernelStart()`启动任务调度。 #### 流程图示例 ```plaintext 开始 │ ├─ 使用STM32CubeMX配置FreeRTOS │ ├─ 启用FreeRTOS │ └─ 设置任务参数(堆栈、优先级) │ ├─ 生成代码并打开工程 │ └─ 定位自动生成的任务模板(如main.c) │ ├─ 定义任务函数 │ └─ 实现任务逻辑(如继电器控制) │ ├─ 调用xTaskCreate创建任务 │ └─ 检查返回值确认创建成功 │ ├─ 启动调度器(osKernelStart) │ └─ 任务进入就绪队列并执行 ``` ### 注意事项 - **堆栈分配**:需根据任务复杂度调整堆栈大小,避免溢出[^1]。 - **优先级设置**:高优先级任务会抢占低优先级任务,需合理规划。 - **任务通信**:若需同步任务(如温度达标后触发操作),可使用信号量或消息队列。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫的小茶馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值