一、keil识别不了jlink
1、删除Jlink2个配置文件
删除工程所在文件夹的Jlink配置文件,重新打开工程
2、更换jlink版本
(用驱动中的JLinkARM.DLL替换keil5中的JLinkARM.DLL即可)
把C:\Program Files (x86)\SEGGER\JLink_V630d\JLinkARM.DLL文件粘贴到keil5中JLinkARM.DLL位置为:keil_5\ARM\Segger\JLinkARM.DLL、
Jlink官网
3、下载程序注意晶振
可以参考该文章
默认状态:BOOT0经电阻接地,即拉低;BOOT1悬空,即拉高。
恢复过程:把BOOT0拉高,BOOT1拉低,即可识别Jlink。
二、可以识别jlink但无法下载
1、添加flash download算法
魔法棒–debug–settings–Flash Download–Add
注意:若搜不到相应芯片的程序,则在网上下在对应的flash pack,安装即可
2、引脚复用
程序中,烧录程序的引脚被其他程序占用。
3、魔法棒里的Utilities配置不对
三、一些基本操作
1、添加源文件和头文件
2、设置编码格式
点击设置,进入下面界面,选择相应格式即可。
3、keil里直接烧录.hex文件
选中魔法棒,点击Output,输入相应的hex文件名,
其文件路径:工程所在文件夹…\Project\STM32F107_LwIP\MDK-ARM\build
4、使用JLINK的串口打印功能
打开安装Jlink的文件目录SEGGER,在目录中找到J-Link Commander程序。首先在命令窗口中执行si 0。再执行命令vcom enable。最后重新上电J-Link,可以看到J-Link的串口端口如下。
1、将RTT源代码添加到目标工程中。
#Jlink的安装目录,比如安装目录在C:\Program Files (x86)\SEGGER\JLink_V650b,
打开Samples\RTT目录,将SEGGER_RTT_V694b.zip解压,将RTT整个目录复制到目标工程与MDK-ARM同级目录;
#将RTT目录下的两个c文件SEGGER_RTT.c和SEGGER_RTT_printf.c添加到工程中;将RTT目录添加到头文件的包含路径中;
#工程中,要打印输出变量的c文件中,添加头文件:#include “SEGGER_RTT.h”;
在源码中,添加SEGGER_RTT_printf(0, 格式字符串, 变量),参数0,表示终端0;
#打开JLinkRTTViewer,位于安装目录C:\Program Files (x86)\SEGGER\JLink;
配置:选择USB方式,选择或输入所使用的MCU的型号;确认之后,能看到打印输出的cnt变量了;
注意:不支持以%f格式打印输出,
打印枚举变量,要先将其转为字符串,如下
wdt_division_type dividers[] = {
WDT_CLK_DIV_4,
WDT_CLK_DIV_8,
WDT_CLK_DIV_16,
WDT_CLK_DIV_32,
WDT_CLK_DIV_64,
WDT_CLK_DIV_128,
WDT_CLK_DIV_256,
};
const char* divider_str;
wdt_division_type divider = dividers[0];
switch(divider) {
case WDT_CLK_DIV_4:
divider_str = "WDT_CLK_DIV_4";
break;
// other cases
}
SEGGER_RTT_printf(0, "Divider: %s\n", divider_str);
5、keil5里添加芯片的识别包
无法添加,报错:Cannot find PDSC file
注意:识别包均可在对应官网下载。
解决:打开keil所在文件位置,以管理员身份运行所选软件,
然后File→Import→选择识别包的压缩文件或者单个.pack文件
6、keil里字体大小,代码颜色设置
7、调试教程
四、keil环境下JLink添加芯片和JFlash烧录bin文件
1.添加CPU芯片
问题:出现下面弹窗
解决:
① 到雅特力官网下载相应的支持segger(jlink)识别芯片的包,例如AT32的包
② 明白自己IDE中所使用jlink路径。打开右下角显示的jlink图标,如下:
③ 接着运行Segger_AT32MCU_AddOn.exe程序之后,选择安装文件目录为上述目录,安装。
注意:有些低版本的jlink,安装目录如下,选择Devices文件夹
④ 安装完成后,该目录下会出现新的文件,如下图所框。
⑤ 打开工程,在device选择正确的情况下,进入debug设置界面,能正常识别,无需选择具体芯片,它会自动识别选择(jlink版本高的情况下),版本低的话,仍会弹出窗口选择芯片型号,此时选择对应芯片型号即可。
2.JFlash烧录
(1)J-link可以识别芯片但是擦除、下载时出现Verification of RAMCode failed @ address 0x20000000错误
原因和解决:jlink下载速度过快(4MHZ),导致出现上述错误,将Jlink速度降至200KHZ以下即可。
五、编译问题
1、** Error: CreateProcess failed, Command: 'D:\Keil5\ARM\ARMCC\bin\fromelf.exe --bin -o ./
原因:
- 因为 keil版本不同fromelf.exe的位置不一样!
Keil V5之后的版本,fromelf.exe在 C:\Keil_v5\ARM\ARMCC\bin 目录下
Keil V4的版本,fromelf.exe在 C:\Keil\ARM\BIN40\下 - 在工程中配置了绝对路径:
\Keil5\ARM\ARMCC\bin\fromelf.exe --bin -o ./
解决:修改配置,改成fromelf --bin -o “$L@L.bin” “#L”。
fromelf --bin意思是使用fromelf.exe来生成bin文件:
“–bin”: 该选项设置输出bin文件;
"-o"即“–output”: 该选项设置输出文件名和输出文件路径;
L: 指.axf文件的绝对地址;
$ @ # 这些符号都是指截取L中的一部分来使用;
“$L@L.bin”就是指在.axf文件的目录下生成一个与.axf文件名称相同的bin文件;
2、error: At end of source: #67: expected a “}”
3、keil5l里无法进行 go to 的跳转
(1)no browse information available in’工程目录’ check-[target-options][output][browse information] then rebuild the target!
**解决方法:**选中target1,然后点击右键,选择 option for target ‘target1’ ,在弹出的对话框中选择output选项卡,看Browse information 选项有没有勾选,如果没有请勾选,然后把你的工程rebuild 一次。
(2)左下角显示错误 “no browse info for symbol in this context“
解决方法:
① 把工程移到不包含中文的路径下进行编译使用。
② 检查我们工程的配置是否如图所示选择的是version6,尝试更换这个版本重新编译rebuild 。
【Use Micro LIB】记得勾选
4、“startup_stm32f40_41xxx.s” could not be opened/could not load file“***.axf”
原因:MDK查找路径太长
解决:缩短相关文件路径
5、debug模式,有些地方不能打断点
原因:编译优化太高导致
解决:将优化等级改为default即可,这样每一个运行的地方都可以打断点
6、Cannot access target. Shutting down debug session.
解决方法如下:
1、target选项看这个有没有勾上
2、工程所在路径不能含有中文
3、编译优化等级,本想着降低优化等级(把下图找的等级改为O0),调试好打断点,结果直接出现上面弹窗,重新改回下面优化等级即可进入debug调试