STM32F103C8T6工程创建标准库版
一、下载安装包和压缩文件先省略
二、解压后开始
下载完成后,进行解压,解压后目录

标准外设库目录介绍
打开下载的 STM32F4xx 标准固件库,里面的目录如图
Project:此文件夹包含的是官方编写的示例代码,涉及芯片的大部分功能。还包含了模板代码。
Libraries:此文件夹里面有 2个文件夹,包含 CMSIS和固件库,方便用户开发使用。
Utilities:此文件夹包含一些第三方组件和 STM32 配套的开发板文件。
Libraries
CMSIS:微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是Cortex-M 处理器系列的与供应商无关的硬件抽象层。规定了处理器内核与外设的接口,统一了内核访问外设寄存器的方法
POSIX(Portable Operating System Interface of UNIX),可移植操作系统接口,它定义了操作系统应该为应用程序提供的接口
STM32F10x_StdPeriph_Driver: 从名称也可以看出,这个是 STM32F4 系列的标准外设库,存放一些封装了寄存器的库函数,我们后面编程也是依赖于这个库进行开发。
Libraries/CMSIS

内部主要是汇编代码,这个是直接和芯片进行交互的,每种不同的芯片需要配套不同的cmsis接口实现。
Libraries/STM32F10x_StdPeriph_Driver

这个里面都是一些外设库文件,包含 STM32F1 芯片的绝大部分功能,包含 ADC,CAN,SDIO,SPI 等。
这个库是嫁接在cmsis的基础上的,F1系列不同的芯片可用公用这一套实现。
项目模板搭建
前期准备
已经安装好 Keil 软件
已经安装好 STM32F10x 的 Pack 包
已经下载好 STM32F10x 标准固件库
工程文件目录创建
Project:放工程文件,编译文件等。
Firmware:放 ARM 内核文件,标准外设库文件等。
Hardware:放开发板的硬件驱动文件。
User:放 main 函数,stm32f10x_it 文件,systick 文件。
Doc: 放 readme.txt 文件,工程说明文件。
固件库移植
找到我们的固件库的下载目录,将STM32F10x_DSP_StdPeriph_Lib_V1.9.0\Libraries 文件夹下的内容全部拷贝到新建目录的Firmware 下

程序入口移植
找到我们的固件库的下载目录,将STM32F10x_DSP_StdPeriph_Lib_V3.6.0/Project/STM32F10x_StdPeriph_Templates中的如下文件进行拷贝:

将文件拷贝到工程目录的User目录中

Keil工程创建
打开 keil,点击最上面的 Project 选项卡,选择 New uVision Project 选项新建一个工程

选择保存路径为我们刚才创建的文件夹下的 Project,文件名为 STM32Template,然后点击保存

设备选择
点击保存之后,弹出工程配置窗口,选择所需芯片,这里依次选择STMicroelectronics->STM32F1 Series->STM32F103->STM32F103C8,然后点击 ok

确定所需芯片之后,弹出 RTE 的环境配置对话框,选择工程所需的组件,不用配置,点击取消

keil分组创建
我们的工程已经创建完成,但是可以看到工程里面还没有文件,我们可以创建一些分组和添加一些文件。
我们打开管理工程项去创建分组和添加文件

首先我们新建分组:
- User
- CMSIS
- Firmware
- Hardware
- Doc

User分组添加

CMSIS分组添加
添加汇编.s启动文件

来到Firmware\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录下,选择如下:

添加system系统初始化.c文件
Firmware\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c

Firmware分组添加
来到Firmware\STM32F10x_StdPeriph_Driver\src目录下,选择如下:

- stm32f10x_rcc.c
- stm32f10x_gpio.c
- misc.c
添加\libraries\CMSIS\CM3\CoreSupport目录下的com3文件到CMSIS组下面:

工程配置
- Target配置

2.Output配置

3.C/C++配置

- Define配置为:
STM#@F!)X_MD.USE_STDPERIPH_DRIVER - 选择
c99 - Optimization选择
-O0
4.Include配置


增加延时函数
在User中增加systick.h和systick.c
systick.h
#ifndef __BOARD_H__
#define __BOARD_H__
#include "stm32f10x.h"
void board_init(void);
void delay_us(uint32_t us);
void delay_ms(uint32_t ms);
void delay_1us(uint32_t us);
void delay_1ms(uint32_t ms);
#endif
systick.c
#include "systick.h"
static uint32_t systick_us = 0;
//static uint32_t systick_ms = 0;
void board_init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //Ñ¡ÔñÍⲿʱÖÓ
systick_us=SystemCoreClock/8000000; //ΪϵͳʱÖÓµÄ1/8
// systick_ms=(uint32_t)systick_us*1000; //ÿºÁÃëSysTickµÄVAL¼õµÄÊýÄ¿
}
void delay_us(uint32_t us)
{
uint32_t systickCount;
uint32_t count = us * systick_us;
if(us == 1)
{
SysTick->LOAD=count - 8;
}
else
{
SysTick->LOAD=count -10; //ʱ¼ä¼ÓÔØ
}
SysTick->VAL=0x00; //Çå¿Õ¼ÆÊýÆ÷
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿ªÊ¼¼ÆÊý
do
{
systickCount=SysTick->CTRL;
}while((systickCount&0x01)&&!(systickCount&(1<<16))); //µÈ´ýʱ¼äµ½´ï
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //¹Ø±Õ¼ÆÊýÆ÷
SysTick->VAL =0X00; //Çå¿Õ¼ÆÊýÆ÷
}
void delay_ms(uint32_t ms){ delay_us(ms * 1000); }
void delay_1us(uint32_t us){ delay_us(us); }
void delay_1ms(uint32_t ms){ delay_us(ms * 1000); }
更多推荐
所有评论(0)