一. SWD方法调试
SWD方法需要:1. SWD接口 2.ST-LINK V2连接器
-
首先将STLINK驱动装好
-
按照如下方式连接STLINK
![](https://img.haomeiwen.com/i16670204/593ec132c0643d66.png)
- 打开keil5
![](https://img.haomeiwen.com/i16670204/369ddf2318f3cd63.png)
![](https://img.haomeiwen.com/i16670204/0827653b4251f52a.png)
- 然后进入settings
![](https://img.haomeiwen.com/i16670204/21601404513e299b.png)
![](https://img.haomeiwen.com/i16670204/1324948e66c3b05f.png)
当我们调试程序时:
![](https://img.haomeiwen.com/i16670204/984fb77d2e63193c.png)
就可以下载程序啦!
二. 新建工程(寄存器版)
![](https://img.haomeiwen.com/i16670204/84cc6aa85f69acd4.png)
![](https://img.haomeiwen.com/i16670204/92630dadd64f1a86.png)
![](https://img.haomeiwen.com/i16670204/4cc069a89d743542.png)
然后,我们打开工程目录,新建下图中的最后三个文件.
第一个是一个启动文件,到处都能找到
第二个第三个暂时是空文件
![](https://img.haomeiwen.com/i16670204/20bcf1d45f0a85cc.png)
然后添加这些文件到工程中
![](https://img.haomeiwen.com/i16670204/4c62834cf9e4b4a1.png)
如何选择启动文件, 我们可以根据下面的原则
![]()
在main文件中,我们写一个main函数 这里注意,我们要先写一个空的SystemInit函数来骗过编译器不报错
![](https://img.haomeiwen.com/i16670204/28faa1d0be98be04.png)
int main (void )
{
}
void SystemInit(void)
{
//写这个函数是为了让程序启动时不报错,因为启动文件中会调用这个函数
}
注意 这里有个逼死强迫症的编译器检索规则: 最后要留一个回车行
![](https://img.haomeiwen.com/i16670204/0d94cda6db0474fc.png)
![](https://img.haomeiwen.com/i16670204/62f0377180c27bcb.png)
HEX文件会生成在:
![](https://img.haomeiwen.com/i16670204/f4a0bf95df6d5531.png)
同时我们注意到还有 axf 文件, 这是调试器用的执行文件
![](https://img.haomeiwen.com/i16670204/7caa09908d479f29.png)
当编译完成, 我们点下这个按钮时,
![](https://img.haomeiwen.com/i16670204/f81b6885dbe900ba.png)
会出现:
![](https://img.haomeiwen.com/i16670204/023b6526ee568ca2.png)
三. 寄存器版点亮一个LED灯
这里我们要注意几点:
- 我们的头文件是暂时用一个空文件代替的, 要把它替换成标准的头文件"stm32f10x.h"
- 在STM32中的外设很多,为了降低功耗,每个外设都应对应一个时钟。芯片上电时,都是关闭的。它们都在RCC外设中统一管理。应该在对应寄存器中开启。
先看需要用到的寄存器:
- 开启GPIOB的时钟
![](https://img.haomeiwen.com/i16670204/d08a891301d30f8a.png)
- 将GPIO设为推挽10M输出
![](https://img.haomeiwen.com/i16670204/f14c75d62276aec2.png)
- 控制引脚电平
![](https://img.haomeiwen.com/i16670204/56e84f5c27f188ff.png)
程序:
![](https://img.haomeiwen.com/i16670204/a2d82f3fbd034610.png)
网友评论