error code: 526
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会闪烁。
#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中点击“绿色小饼干”按钮,就可以重新配置。
4 参考链接
作者:记录无知岁月