声明:文章中出现的资料多数出自江科大视频中,本文是我学习stm32的随手笔记
一、工程创建
相比较于51,在学习stm32的时候,我发现新建工程时会比较繁琐,需要在新建工程中添加启动文件和头文件,那么接下来就是我创建第一个工程的步骤。
1、新建工程
在新建文件夹中,新建一个工程,需要注意的是,文件夹名字容易修改,但是工程名字修改具有一定难度,这里我和教程视频命名方式一样,取作project
选择芯片型号,我的芯片型号是STM32F103C8T6,在目录下找到对应型号
选择STM32F103C8,双击之后会弹出创建工程助手,可以先不管,叉掉
这样子一个初始工程就建立完成,但是还不能跑代码,需要导入启动文件和头文件。
2、导入启动文件及头文件
在文件夹中新建一个Start文件,将准备好的启动文件添加
core_cm3.c是内核的寄存器配置文件
stm32f10x.h作用相当与REGX52.h,是声明寄存器以及相对应地址
system_stm32f10x.h是时钟配置文件
同时需要添加后缀名md.s的启动文件
按着ctrl,将需要add的文件点上,可以一次性添加多个文件,之后可以看到工程里已经添加完成
接着就可以在User文件夹中添加main函数
二、库函数导入
在工程目录里新建一个Library文件夹,然后将固件库-->Libraries-->STM32F10x_StdPeriph_Driver-->inc 和固件库-->Libraries-->STM32F10x_StdPeriph_Driver-->src里全部内容复制到Library中,然后通过add file to group添加到工程中
再打开固件库-->Project-->STM32F10x_StdPeriph_Template
找到如上图所示文件,后缀名conf是配置库函数头文件的包含关系,同时还包含参数检测函数的定义,后缀名为it(interrupt)是用来存放中断函数的,将三个文件复制到工程的User中,回到keil软件,在User中添加进来
然后需要进行一次宏定义,打开stm32f10.h文件,找到这个条件编译
这个语句的意思是如果要include有效,需要先定义USE_STDPERIPH_DRIVER(标准外设驱动),所以我们将“USE_STDPERIPH_DRIVER”进行复制,然后打开工程选项,将复制的字符串粘贴,同时导入Start,Library和User文件(下图还少了Start出现报错后才发现)
然后进行编译,第一次编译会比较慢
三、改错
1、
我第一次编译时出现报错
我查了一下资料,是因为我Start导入了多余的启动文件,把多余的启动文件去掉就不会出现报错了
2、
编译后下载出现了提示“No ULINK2”
是因为调试器没有修改,打开工具选项,选择Debug
选择STLink,同时点击setting-->Download,把Reset and Run勾上
四、代码测试
先将芯片和stlink进行连接
资料来源江科大
然后通过给高低电平控制灯闪烁
#include "stm32f10x.h"
int main(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
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);//置高电平
//GPIO_ResetBits(GPIOC,GPIO_Pin_13);//置低电平
while(1){
}
}