简介
通过上一篇文章F407+RT-Thread(二)——环境搭建,搭建好了开发环境。
新建RT-Thread项目工程有三种方法:
- 在原有的工程上移植RT-Thread,F407+RT-Thread(一)——快速入门就是这样的。
- 使用RT-Thread Studio新建项目工程,因为studio用起来没有那么美好,所以不考虑。
- 使用ENV新建项目工程,这个是本文即将做得事情。
使用ENV新建项目工程
在新建项目工程前,先要配置ENV一下。
进入ENV文件夹,双击env.exe文件,在界面的标题栏右键—settings—左侧栏的Integration—右边上部的“Register”—“Save settings”。这样做了之后,在任何文件夹点击右键后都会出现选项“ConEmu Here”。
使用env生成工程
- 打开下载的RT-Thread 完整版 4.0.2,进入源码的bsp文件夹,选择正点原子的F407探索者对应的文件夹,即**rt-thread-v4.0.2\bsp\stm32\stm32f407-atk-explorer**。
- 在文件夹右键—ConEmu Here打开env,输入scons --dist。这个命令是用来搭建项目框架的。
- 进入dist文件夹,将整个stm32f407-atk-explorer文件夹复制到你需要的文件路径去,比如本人喜欢的D:\myprj\prj_stm32\。
- 在D:\myprj\prj_stm32\stm32f407-atk-explorer\文件夹右键—ConEmu Here打开env,输入menuconfig,进行相关配置。本文的设置是:
Hardware Drivers Config --> On-chip Peripheral Drivers --> Enable GPIO和Enable UART --> Enable UART3。 - 按esc退出,选择Yes进行保存设置。
在env命令行输入 scons -target=mdk5,生成新的项目工程。
使用STM32CubeMX配置底层驱动
- 打开文件夹 D:\myprj\prj_stm32\stm32f407-atk-explorer\board\CubeMX_Config,双击打开文件CubeMX_Config.ioc,可以根据个人需要配置MCU的所有参数,本文不做任何变动。直接点击Project Manger点击GENERATE CODE,生成了新的工程。
生成新的工程之后会出现提示框,选择Close就行了。 - 在进入文件夹D:\myprj\prj_stm32\stm32f407-atk-explorer,双击project.uvprojx,打开新建的工程项目。
- 在main.c中输入代码。
main.c
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-11-06 SummerGift first version
* 2018-11-19 flybreak add stm32f407-atk-explorer bsp
*/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
/* defined the LED0 pin: PF9 */
#define LED0_PIN GET_PIN(F, 9)
/* defined the LED1 pin: PF10 */
#define LED1_PIN GET_PIN(F, 10)
static struct rt_thread led0_thread; //线程控制块
static struct rt_thread led1_thread;// //线程控制块
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t rt_led0_thread_stack[1024];// //线程栈
static rt_uint8_t rt_led1_thread_stack[1024];//线程栈
//线程LED0
static void led0_thread_entry(void* parameter)
{
while(1)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
//线程LED1
static void led1_thread_entry(void* parameter)
{
while(1)
{
rt_pin_write(LED1_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED1_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
int main(void)
{
// LED_Init();
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
rt_thread_init(&led0_thread,
"led0",
led0_thread_entry,
RT_NULL,
&rt_led0_thread_stack[0],
sizeof(rt_led0_thread_stack),
3,
20);
rt_thread_startup(&led0_thread);
rt_thread_init(&led1_thread,
"led1",
led1_thread_entry,
RT_NULL,
&rt_led1_thread_stack[0],
sizeof(rt_led1_thread_stack),
3,
20);
rt_thread_startup(&led1_thread);
}
运行
运行后可以看到两个灯在闪烁,通过串口调试助手可以看到开发板的串口1打印了RT-Thread的login信息:
\ | /
-RT- Thread Operating System
/ | \ 4.0.2 build May 17 2020
2006 - 2019 Copyright by rt-thread team
msh >