STM32新建工程
-
STM32F10x标准外设库,解压
-
打开Keil5,新建Project
-
添加启动文件
-
将固件库中的压缩包打开:Libraries CMSIS CM3 DeviceSupport ST STM32F10x startup arm 复制所有的文件,然后在建立的工程文件里新建一个Start的文件,将复制的东西粘贴到上面。然后在上面的STM32F10x层面,将.h和.c文件全部粘贴到Start文件里。
-
在Libraries CMSIS CM3 CoreSupport将里面的.c和.h文件也复制到Start文件里,这两个是内核驱动的文件。
-
将上面两步添加的文件,添加路径到keil文件路径里。选择将Start里面的文件中startup_stm32f10x_md.s和.h与.c文件添加到Start文件里,还需要对软件添加头文件,利用魔术棒按键,将头文件添加进去。
-
为工程添加库函数,在创建的文件模版里继续添加一个叫Library的文件,用来存放库函数,在固件库中打开Libraries STM32F10x_StdPeriph_Driver src 复制里面所有的文件,粘贴到创建的Library文件库里,再打开inc文件夹,全选之后复制粘贴到Library文件库内,再在keil文件库内添加文件以及路径。
-
在keil文件targrt里创建Users文件,专门用来存贮主main函数。
-
在固件文件中的Project STM32F10x_StdPeriph_Template 找到it结尾的文件以及conf.h的文件将其粘贴Users里面,并在keil文件里添加文件和路径。
-
在添加的代码中,找到其定义,找到一个语句
#include "stm32f10x.h"
#ifdef USE_STDPERIPH_DRIVER #include "stm32f10x_conf.h" #endif
然后复制这个USE_STDPERIPH_DRIVER,打开魔法棒按钮,在页面进行操作文件之后文件配置就算完了,可以进行点灯操作了,之后对于单片机的学习,也是以对库函数的调用开始展开的。
利用STM32点灯
不同于51单片机直接调配寄存器,stm32具有库函数可以对单片机进行操作,更简洁、明了的进行操作,对单片机进行开发。
首先,先得开启时钟,使对应的外设进行使能之后才能展开应用。由于使用的是某宝上买的STM32F103C8T6,所以片上自带一个led灯,配置在PC13口,就是在C系列的13口上,总体来说是属于C口的,所以我们是用到了单片机的PC系列口。
我们从系统架构中可以看出,GPIOC是属于APB2里面的,所以得先开启APB2的外设时钟:
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
通过查看函数的定义,我们可以看出来需要两个参数(文档里面具有英文解释,所以直接展示结果)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
将GPIOC口使能之后,接下来就得对GPIO口的提出要求了,需要它怎么做,做什么:
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
可以看出,此函数的作用是指定ABC口之后,再定义一个结构体,按照结构体的要求对端口进行设置,所以我们选择,先定义一个结构体。
GPIO_InitTypeDef GPIO_InitStruct;
关于这里的GPIO_InitTypeDef是进行结构体定义名字,相当于一个过程,后面的GPIO_InitStruct才是结构体的名字。
将结构体定义好之后,就得配置它的每个参数,在将代码输入到keil中时,会自动弹出来需要配置的参数,然后就根据需求填写参数就行了。
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
然后将配置好的参数,然后将配置好的参数再声明一下:
GPIO_Init(GPIOC,&GPIO_InitStruct);
这样端口模式配置就好了,再接下来对端口的电位进行配置:
GPIO_SetBits(GPIOC,GPIO_Pin_13);
接下来就可以进行编译、烧录到硬件了。