0 前言
最近因为任务需要,再次开始研究STM32,打算过一遍之前记录的笔记,在创建工程模板时,突然发现一个之前被自己忽略的东西,那就是创建项目时会弹出的Run-Time Environment
,抱着好奇的心态去找了一些资料,结果发现这貌似也不简单。
1 概述
在新版Keil(UV5)中,新建一个project,选定芯片型号之后,就会自动弹出这个窗口:
大多数教程在这里就直接跳过了,但是通过查找资料,我发现这个Run-Time Environment,缩写RTE,实际上是Keil官方针对新版Keil出的一个快速配置项目工程的一个运行时环境。其包含了常用外设的驱动(UART、I2C、SPI、USB等),还有常用的实时操作系统(RTX、FreeRTOS、RTT等),常用的一些库和协议栈(FatFs、Jansson、MQTT、mbed TLS等),可以基本满足产品开发的需求。 在我看来,实际上就是除ST官方给出的标准库和HAL库之外的一种开发框架,也可以叫做是库。
很明显,它最大的好处在于不用添加杂七杂八的库文件,直接在Keil中就能创建工程,十分快捷,易用。
3 GPIO示例
接下来,将以最简单的外设------GPIO为例,来展示这个RTE框架的使用方法。
-
首先新建项目文件,然后选择一个芯片型号,比如STM32F103C8T6,然后进入到RTE配置页面。必须选择的内容:
CMSIS/CORE
Device/Startup
-
外设选择,在
Device/StdPeriph Drivers
中选择。比如要选择GPIO,那么就找到GPIO,然后勾选。但是这个时候下面output可能会出现警告:
这是因为GPIO对其他外设,如RCC等有依赖关系。可以点击左下角的Resolve按钮解决依赖。
然后再点击OK,工程就创建完毕。展开创建的工程可以发现,其实这种方式也是将一些库文件添加到文件夹下,并解决了依赖关系。新建一个main文件,加上一个main函数,编译测试一下,没有意外的话应该是
"0 Error(s), 2 Warning(s).
,这两个警告是代码上的一些小问题,不影响。 -
GPIO实践。将以下代码复制到main.c文件,然后编译下载,正常PA4引脚下对应的LED会闪烁。
c#include "stm32f10x_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO void Delay_us(uint32_t xus); void Delay_ms(uint32_t xms); int main() { RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); while(1) { GPIO_ResetBits(GPIOA, GPIO_Pin_4); Delay_ms(500); GPIO_SetBits(GPIOA, GPIO_Pin_4); Delay_ms(500); } } void Delay_us(uint32_t xus) { SysTick->LOAD = 72 * xus; //设置定时器重装值 SysTick->VAL = 0x00; //清空当前计数值 SysTick->CTRL = 0x00000005; //设置时钟源为HCLK,启动定时器 while(!(SysTick->CTRL & 0x00010000)); //等待计数到0 SysTick->CTRL = 0x00000004; //关闭定时器 } void Delay_ms(uint32_t xms) { while(xms--) { Delay_us(1000); } }
-
更改配置。类似于HAL库,RTE框架生成的项目可以重新配置。在Keil中点击"绿色小饼干"按钮,就可以重新配置。