一、SMT32开发方式
1、基于寄存器的方式:和51单片机开发方式一样,是用程序直接配置寄存器,来达到我们想要的功能,这种方式最底层、最直接、效率会更高一些,但是STM32的结构复杂、寄存器太多,所以不推荐基于寄存器的方式
2、基于标准库(库函数的方式):使用ST官网提供的封装好的函数,通过调用这些函数间接地配置寄存器,ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率
3、基于HAL库的方式:可以用图形化界面快速配置STM32,这个比较适合快速上手STM32的情况,但是这种方式隐藏了底层逻辑
二、基于库函数的方式
1、需要准备一个STM32库函数的压缩包
2、新建一个基于标准库的工程
建立一个存放工程的文件夹,把所有32个工程都放在里面
打开keil5软件,选择【project】=>【New uVision Project】
弹出一个keil软件新建工程小助手,帮助我们快速新建工程,暂时不用这个小助手
3、添加工程的必要文件
STM32是内核和内核外围的设备组成,这个内核的寄存器描述和外围设备的描述文件不是在一起的,所以还需要添加一个内核寄存器的描述文件
工程必要文件就复制完成了
4、将复制的必要文件添加到工程里
首先添加一下启动文件,这个启动文件有很多分类,我们只能添加其中一个
选择md后缀是因为我们选择的是STM32F103,中容量产品
5、在工程选项里添加上这个文件夹的头文件路径,不然软件找不到.h文件
6、新建一个main函数
在工程文件夹下,新建一个User文件夹,main函数就放在这个文件夹里
keil里,在Target这里右键,点击添加组
在main.c里,右键插入头文件,选择stm32发0x.h
写一个main函数(main函数是一个int型返回值,void参数的函数)
这个工程目前还没有添加STM32的库函数,所以现在还是一个基于寄存器开发的工程
三、通过配置寄存器完成点灯的操作
1、调节字体大小
选择UTF-8编码格式,防止中文乱码的问题
2、拿出STM32的最小系统板、STLINK和四根母对母的杜邦线
按照插针边上的标识,把3.3V、SWDIO、SWCLK、GND对应连接好,并将STLINK插在电脑上
插上电源后,这个板子上的电源灯应该会常亮,另一个连接在PC13口上的灯默认应该是闪烁状态,这是芯片里的一个测试程序
3、在keil5中,配置调试器
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR=0x00000010;
GPIOC->CRH=0x00300000;
GPIOC->ODR=0x00002000; //全为0时PC13的灯亮起,ODR为2000时PC13灯灭了
while (1)
{
}
}
四、为工程添加库函数
1、打开工程文件夹,新建一个【Library】文件夹,用来存放库函数
2、keil里,在Target这里右键,点击添加组
打开Library,Ctrl+A选择全部文件,选择【Add】
3、添加库函数头文件包含关系的相关文件
4、宏定义
头文件右键,打开文件
滑到文件最下面,看到条件编译语句,如果你定义了USE_STDPERIPH_DRIVER(使用标准外设)这个字符串,下面这个include conf.h语句才有效
在Define栏目粘贴这个字符串,这样才能包含标注外设库,以及头文件路径User和Library路径也都添加上
将Library向上调一下,将不用更改的文件夹放在最上面
五、用库函数实现点灯的操作
不自动提醒的按照以下操作(或者按一下快捷键Ctrl+Alt+空格)
点击函数,右键跳到函数定义
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //GPIOC的外设时钟就配置好了
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
// GPIO_SetBits(GPIOC,GPIO_Pin_13); //将PC13号口置为高电平
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //将PC13号口置为低电平
while (1)
{
}
}
六、总结
1、建立工程文件夹,Keil中新建工程,选择型号
2、工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
这一步是为了添加工程文件准备的,建文件夹是因为文件比较多需要分类管理一下,需要用的文件夹一定要复制到工程文件夹里面来
3、工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
在keil里方便管理文件,因为keil没法直接添加文件夹,所以要重复一下,在keil里建立分组,然后添加文件,这个添加文件是把所有的.h文件和.c文件都添加进来了,因为.h文件是不参与编译的,所以很多工程都不添加.h文件,但是添加.h文件比较方便经常打开看
4、工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
因为Start、Library、User文件夹是自己建立的,keil软件它并不知道,所以要用自己文件夹里面的.h文件,就必须声明一下这个路径
5、工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
使用库函数的条件编译,使用库函数就必须定义这个,另外其他工程在这里还声明了一个STM32F10X_MD的字符串,但是keil5新建工程后自动就声明好了,不需要额外声明了
6、工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
这个就是选择调试器来进行下载的选项了,用STLINK就选择STLINK的那一项即可
工程框架