赞
踩
目录
① keil5,自行下载安装;
② 库函数包,这里我上传了一个F1xx的库函数包,可以在建立工程模板的时候用到;1,STM32F1xx固件库.rar - 蓝奏云
③ STM32F103C8T6最小系统班,淘宝十几块;
④ ST-Link V2下载器,一般都会和MCU绑定着卖;
⑥ 杜邦线若干,一般买上面的东西会送几根够用;
① 先建立一个文件夹,这里我命名为LED_3,在LED_3文件夹下建立如下图所示文件夹:
② 从下载的库函数包中将文件复制到相对的文件夹下:
Lib_CMSIS 文件夹下包含下列文件:该文件下放置的是一些核心程序和启动程序。
文件路径分别为:
路径:
1. 1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
2.1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
3.1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
Lib_MyDriver文件夹下包含下列文件:该文件夹下放置的是一些自定义的外设文件,包含两个文件夹,一个放置.c后缀的文件,用于初始化一些功能/函数/引脚;一个放置.h后缀的文件,用作头文件申明一些功能/函数/引脚。这里事先放置了两个延时文件,这是系统内部的,放在这里后面方便修改和使用,直接调用即可。
如果找不到的话就直接下载从这里获取后放入:
my_inc文件夹下放置.h后缀文件,my_src文件夹下放置.c后缀文件。然后我们再建立一个led.c空文件和led.h空文件放置在对应的文件夹,这两个文件就是我们在程序中视为操作的外设了。
Lib_PeriphDriver文件夹下包含下列文件:该文件夹下放置的是一些系统内部的文件,如定时器等等,我们从库函数包中直接复制对应的文件夹过来即可。
路径:1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver
User文件夹包含下列文件:其中main.c文件就是我们的主程序文件。
路径: 1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
到这里,一个初始的工程模板就建立完成了,在很多情况下,工程模板是通用的,只略微修改即可开始另一个项目。
打开keil5软件,点击Project选项卡,点击new μVision Project..,新建一个工程;
会弹出的对话框,在刚才建立的工程模板的User文件夹下建立一个命名为LED的工程文件;
会弹出一个芯片选型,我们点击+扩展选项,找到STM32F103C8,点击OK-OK;
在打开的窗口界面中,左边,右键点击Target,选择Manage Project Item...;在弹出的对画框中做如图所示修改:实际上就是将刚刚我们复制到对应文件夹的文件,将其中的.c后缀的头文件重新添加一次,这里要注意的是在Lib_CMSIS组添加文件时,在对话框中要选择所有文件类型,不然是无法看到.s后缀文件的。
此时窗口右边就可以看到新建工程的文件列表了:
接下来我们点击魔法棒,对keil做最后的配置,主要是涉及到一些编译的头文件路径和生成HEX文件的问题。
在output选项卡下勾选 create HEX_File ,这个就是编译后生成的文件,可以下载到驱动板上加载。
接着在C/C++选项卡下进行如下设置,点击箭头处可弹出对话框,将对应文件路径添加进去即可:最小系统板,可使用 STM32F10X_MD,USE_STDPERIPH_DRIVER
到这里,keil5软件的基本配置就完成了,接下来可以开始编写程序了。
led.c文件中的程序如下图所示:
主程序:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
-
- //主函数
- int main (void)
- {
- delay_init(); //初始化延时函数
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级
- LED_Init(); //LED初始化
- while(1) //主循环函数
- {
- LED = 1; //LED灯亮
- delay_ms(500); //延时保持500毫秒
- LED = 0; //LED灯灭
- delay_ms(500); //延时保持500毫秒
- }
- }
led.c:
- #include "led.h" //引入头文件
-
- void LED_Init(void) //初始化LED引脚
- {
- GPIO_InitTypeDef GPIO_InitStructure; //初始化结构体
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能时钟,必须要先使能IO的时钟
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //初始化第13引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
- GPIO_Init(GPIOC,&GPIO_InitStructure);
- GPIO_SetBits(GPIOC,GPIO_Pin_13); //初始化引脚为高电平输出,相当于LED = 1;
- }
led.h:
- #ifndef _LED_H_
- #define _LED_H_
- #include "sys.h"
- #define LED PCout(13) //定义输出引脚为13
-
-
- void LED_Init(void); //初始化LED引脚
- #endif
然后我们就可以点击工具栏上的编译按钮了,看程序是否有报错!
出现下面的结果,就表明你的程序在逻辑上是没有错误的,后面就需要下载到开发板上实际观察结果了。
这里提示几点:①主程序中原本的文件是可以删除的;②刚开始写代码,多多少少会出现一些错误,比如大小写区分,或者标点符号缺失或者多写等等,编译后根据下方编译输出窗口查看报错的条目,双击条目一般都会跳转到你的代码错误地方,如果实在找不到可以将报错信息复制后上百度查找;③如果多看几个案例,你会发现对于有些地方的代码是通用的,比如.c文件中的初始化引脚函数,基本上都是这个结构,归根结底实际上就是对各个引脚的操作。
!!!但嵌入式有太多太多要学的了,这点点简直一根毛毛都算不上。对于一些理论上的东西这里没办法讲解,我的理解也有限,这里上传一个开发手册文档,里面有LED灯点亮的具体描述,可以自行下载查看。如果对其他经典案例有需求,我后续再上传相关的文件,实际上这些文件网络上已经有很多了。
STM32不完全手册_库函数版本_V3.2.pdf - 蓝奏云
这里我采用的是ST-Link v2 下载器,将MCU和下载器根据引脚对应连接起来即可,这里注意的是我们使用的是ST-Link 下载器的下面一排引脚,除了5v供电不接,分别对应接上3.3v、GND、SWDIO、SWCLK四根引脚,与MCU上的对应引脚接上即可,如下图所示:
线接好后,我们将下载器连接上PC,查看设备管理器中的通用串行总线设备中是否有ST-Link驱动出现,如果没有的话,需要下载一个STM32 ST-Link的驱动PC和Keil才会识别的到下载器。这里附一个ST-Link 驱动的下载官网,去里面下载一个最新的驱动即可,可能会要求注册,但很简单,填写一个邮箱,在邮箱里面验证一下,弹出来的网站加载完成后会自动弹出下载框;下载完成后,解压缩,在里面找到对应x86或x64的.exe文件,安装即可,安装全过程默认下一步。STSW-LINK009 - 为Windows 7、Windows 8、Windows 10签署的ST-LINK、ST-LINK/V2、ST-LINK/V2-1 USB驱动 - 意法半导体STMicroelectronics
驱动安装完成后,此时我们在PC的设备管理器中已经可以发现ST-Link的驱动了,接着,我们打开keil5,找到刚才建立的工程,点击魔术棒,在DeBug选项卡中做如下图所示操作:
设置好后,我们点击确定回到主窗口,点击窗口工具栏的下载(烧录)按钮,即可开始烧录程序。当出现verify OK后,标明程序烧录成功。
效果如下图所示(由于不能动态展示,这里只显示了蓝灯亮起):红色灯为MCU的通电灯,只通电正常就会点亮,而我们操作的引脚是PC13 ,控制的是蓝灯,所以蓝灯会闪烁,延时后熄灭,再延时后亮起,反复执行,如果想延时效果明显一些,可以在将主文件的中的delay_ms(500)数值调大一些,比如1000,就会很明显,但是若想要更精准的延时效果和更长的延时就需要用到到定时器中断了,比如通用定时器TIM3。所以从这个小项目也可以往外扩展成流水灯,按键控制等等,因为都只是对引脚的高低电平的简单操作,如控制流水灯实际上就是控制多个led灯不同时间点亮而已。
可能前面建立工程模板和写程序等不会有什么问题,但是后面的驱动部分以及程序烧录部分出问题的几率很大,涉及到很多因素,包括软件版本,WINDOWS系统限制,硬件等等,对应的问题报错在百度上方案很多,但不一定起作用,所以如果报错了,尽可能多尝试一下吧!祝各位顺利!
另,本文纯属初学者刚接触时撰写的,其中存在的错误望各位大佬指出,有不妥之处还望海涵!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。