1.Segger Embedded Studio 简介
Segger Embedded Stadio 是segger公司新开发的嵌入式编译器环境(IDE),可以用于管理,构建,测试和部署嵌入式应用程序,Nordic 的SDK往后的只更新项目工程到SES开发环境,Keil和IAR不再支持。
主要特征:
1.适用于嵌入式C/C ++编程的专业IDE解决方案
2.跨平台:可在Windows,macOS和Linux上运行
3.包含Clang/LLVM和GCC C/C++编译器
4.高度优化的运行时库,可实现最佳性能和最小代码量
5.具有无缝J-Link集成的功能丰富的调试器
6.强大的项目管理器和源代码编辑器
7.基于软件包的项目生成器,适用于所有常见的微控制器
8.多线程构建可最大程度地减少构建时间
9.免费用于任何非商业用途,例如教育和评估目的,没有任何限制
2.开发环境
- STM32CUBEMX
- Embedded Studio(V5.40)
- STM32H743IITX小系统开发板
3.开始(以及会出现的问题)
1.使用STM32CubeMX配置一个点灯小Demo工程,我的开发板上配置的是PB1。
2.按照下图所示配置生成Keil工程
3.打开Segger Embedded Studio 按照下图所示导入刚才生成的Keil工程
4.选择使用外部编译链(下方选择KEIL的编译器位置)
5.编写一个简单的LED闪烁程序
/* USER CODE BEGIN 0 */
uint8_t count_num = 0;
/* USER CODE END 0 */
/**
1. @brief The application entry point.
2. @retval int
*/
int main(void)
{
/* Enable I-Cache---------------------------------------------------------*/
SCB_EnableICache();
/* Enable D-Cache---------------------------------------------------------*/
SCB_EnableDCache();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(100);
count_num++;
if(count_num == 5)
{
count_num = 0;
}
}
}
6.点击DEBUG中的GO即可打开调试
在这里我们发现虽然我们的LED工程已经跑起来了,LED灯已经开始闪烁了。但是当我们查看右上角的变量窗体里面提示(Restricted memory range)意味着我们并没有追踪到这一个变量,在调试中是不可以接受的。那么我们应该怎么去解决这个问题呢,下面将继续介绍。
4.解决办法
经过我的高强度的网上冲浪,我在Segger官方的文档里找到了这个答案!其实导入到上面一步并没有完全完成所有的工作,我们还需要导入设备的内存映射,Flash配置等文件。(官方文档的连接会附在文后,有兴趣的兄弟可以自己阅读一下)。下面我将简单的演示一下如何完成全部工作。
1.在下图所示的位置下载相关芯片的支持包。
2.按照下图所示的位置,打开支持包的路径建立相关的芯片支持文件夹
3.建立芯片支持文件夹
将以下特定于设备的文件从包文件夹复制到一个新文件夹中。
启动代码 /Source/_Startup.s.
矢量表 /Source/_Vectors.s.
链接器脚本 /Scripts/_Flash.icf.
内存映射 /XML/<设备名称>_MemoryMap.xml。
寄存器文件 /XML/<设备名称>_Registers.xml。
均在文件内,仔细寻找便是
5.完成对相关内容的设置
打开项目设置切换至Comon设置
在 Code -> Linker -> Linker Script File 中添加 .icf 文件.
在 Code -> Linker -> Memory Map File 中添加 the *_MemoryMap-.xml 文件.
在 Debug -> Debugger -> Register Definition File 中添加 *_Registers.xml 文件.
重新构建后开启仿真
可以看见右上角的变量已经可以成功显示了,实验完成!!!