本人学习stm32有一段时间了,由于以前没有接触过,单是建立工程就花费了我很长时间,下面是我建立工程的一般步骤,也是参考了前人的经验,写下来希望对后面学习的人有所帮助。
<1>lib<2>cmsis<3>startup<4>user.
其中lib里面是src(源文件.c)和inc文件(头文件.h)这里面都是stm32所提供的外设的源文件以及头文件,还有其他的。
cmsis里面是底层文件,微控制器软件借口标准。后面你慢慢会知道的,我也不太懂的。
startup是启动文件,后缀名为.s根据不同容量的芯片区分:startup_stm32f10x_ld.s/startup_stm32f10x_md.s/startup_stm32f10x_hd.s 分别适用于小容量/中容量/大容量的STM32芯片,具体判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH 在启动代码中
user里面是用户文件,这里我放入的是main.c和stm32f10x_it.cmain函数是自己写的,当用到中断是写入对应的中断。
好了,相应的文件介绍完了以后,我们可以开始建立工程了。就像C语言输出的第一条语句"Hello World"一样,我们建立工程用来点亮LED。具体步骤如下:
先在桌面上新建文件夹命名为“led”然后再“led”文件夹下新建3个文件分别命名为:obj,list,project再把我们刚才介绍的那4个文件夹放入“led”文件夹里,现在“led”下面有7个文件夹:lib,cmsis,startup,user,obj,list,project。
打开Keil(安装以后介绍),选择 Project --> New u-Vision Project 选择保存位置在“led”下的“project”里面,文件名命名为led。然后选择CPU型号,根据自己的开发板选择,我的是stm32f103vet6,选择以后确定后出现对话框,选择否,因为我们要自己加入那些东西。
选型号:
因为自己建立加入启动文件所以选“否”
按如下设置:加文件点“虚方框”,删除点“メ”记住这些都在你建立的led里的相对应文件里面。
因为我的是stm32f103vet6是大容量(512k),所以选择 hd.s (h是高密度)
双击main.c函数在里面加入以下程序代码:(一定要认真,小数点也不许错呀!)
//GPIO操作,完成简单的IO操作,用按键控制LED闪烁
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
//LED初始化
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
//延迟函数
void Delay(vu32 uCount)
{
for(;uCount!=0;uCount--);
}
//时钟函数
void RCC_Configuration(void)
{
SystemInit();
}
//主函数
intmain(void)
{
RCC_Configuration();
LED_Init();
while(1)
{
GPIO_SetBits(GPIOD,GPIO_Pin_5);
Delay(0x8ffff);
GPIO_ResetBits(GPIOD,GPIO_Pin_5);
Delay(0x8ffff);
}
}
加入以后点击工具栏里的“魔法棒”设置如下;
这里设置比较重要,
在Define里输入:USE_STDPERIPH_DRIVER,STM32F10X_HD
后面的STM32F10X_HD是我的对应的
在Include Paths 找到相应的所有的头文件:..cmsis和 ..startup和..user和..inc
配置Debug如下图
编译运行后没有错误,直接连接开发板,点击Flash-->Download完成。