qtcreator + Keil MDK armcc +openocd 编译 调试stm32

qtcreator + Keil MDK armcc +openocd 编译 调试stm32

Keil MDK 的编辑功能太弱了 本人又习惯了qtcreator的小巧和编辑方便是
经过折腾其实可以利用qtcreator结合Keil MDK来编辑 编译 下载 调试 STM32的工程 方法如下

准备的软件:
1.Qtcreator
2. gcc-arm-none-eabi (新版的可能有bug )
3. openocd
4. python-2.7(用于qtceator 的gdb python版本调试器 用新版本 )

安装好上面的软件
配置好openocd python的环境变量(具体百度)

打开qtceator , 菜单->帮助->关于插件 找到Bare Metal 插件 勾先该插件
在这里插入图片描述关闭后 重新启动qtcreator

菜单->工具->选项 找到 设备选项 在Bare Metal页上 add ->OpenOCD 添加一个类型
在这里插入图片描述名字可根据Stm32 cpu类型和下载器名命

Startup mode 选择为 TCP/IP mode
Host 填localhost 端口为3333
Executable file 填安装的openocd程序文件路径

Addition argument 填 -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg
根据下载器及实际的Stm32 芯片填写 这些配置文件是在openocd安装的位置

Init command 填

set remote hardware-breakpoint-limit 6
set remote hardware-watchpoint-limit 4
monitor reset halt
monitor report_flash_progress on
monitor program "%{CurrentRun:Executable:FilePath}" reset
monitor poll on
monitor reset halt
b main

%{CurrentRun:Executable:FilePath}就当前qtcreator的变量 表示要下载的文件路径 在项目/运行/ 中填写的被调试的elf文件
b main 表示在main函数上下一个断点

Reset command 填

monitor reset halt
b main

点击Apply应用设置

然后到 设备页 新建一个 Bare Matel设备 选择刚刚设置好的openocd类型
在这里插入图片描述点击左则的 在这里插入图片描述Kits 进到套件设置

在编译器选项 新建 c 和 c++编译器 选择安装好的arm gcc 和 g++
在这里插入图片描述点击Apply

转到debugger 页 新增一个调试器 选 arm-gdb-py python版本

在这里插入图片描述点Apply

根据上面的设置 在构建套件页 增加一个套件
在这里插入图片描述点Ok
Qtcreator 设置完毕

然后新建一个工程 选Non-Qt Project Plain C Application模版
项目的路径跟Keil工程相同 (.qbs 与.uvprojx相同路径) 不要有空格和中文
Build system选QbsBuild system选Qbs
在这里插入图片描述构建位置填为 .\Qbs
Kits选建好的Stm32构建套件

Main.c文件 main()改成没有参数输入的

双击编辑 *.qbs文件 输入如下代码

import qbs
import qbs.FileInfo
import qbs.Process

Project {
    Product {
        name: project.name
        type: "compileByARMCC"

        Depends { name: "cpp" }     //refer "cpp" Module
// cpp.defines跟Keil的工程设置成一样  
//cpp.includePaths 是为了编辑时不会报错 不要也可以       
cpp.defines:["STM32F40_41xxx","STM32F407xx=1","_RTE_=1","__GCC=1","USE_STDPERIPH_DRIVER"]
        cpp.includePaths:
        [
            "./CMSIS/Include",
            "./CMSIS/Device/ST/STM32F4xx/Include",
            "./fwlib/inc",
            "./include"
        ]

        files: [
            "driver/led.c",
            "driver/stm32f4xx_it.c",
            "driver/system_stm32f4xx.c",
            "fwlib/inc/stm32f4xx_gpio.h",
            "fwlib/inc/stm32f4xx_rcc.h",
            "fwlib/src/stm32f4xx_gpio.c",
            "fwlib/src/stm32f4xx_rcc.c",
            "include/led.h",
            "include/main.h",
            "include/stm32f4xx.h",
            "include/stm32f4xx_conf.h",
            "include/stm32f4xx_it.h",
            "include/system_stm32f4xx.h",
            "main/main.c",
            "startup_stm32f40_41xxx.s",
        ]
        Group {
            files: [
                "Target 1.BAT",
            ]
// Target 1.BAT 这个文档是Keil工程生成的 放在本qbs工程目录下 生成方法见下文
            fileTags: "compileBat"
        }

        Rule{
            inputs: "compileBat"
            Artifact{
                fileTags: "compileByARMCC"
            }

            prepare:{
                var callCmd=new Command("cmd");  //
                var callCmdArgs=["/c",input.filePath];
                callCmd.arguments=callCmdArgs;
                callCmd.workingDirectory=project.sourceDirectory;
                callCmd.description="calling copile bat file..."
                return [callCmd];
            }

        }
    }
}

构建好的qbs工程结构如图
在这里插入图片描述
Qbs工程配置好后 就选 on RemoteOpenOCD的构建目标
在这里插入图片描述
设置Keil MDK的工程选项

打开建立好的Keil MDK stm32工程
菜单->Project->Options for target…

在打开的选项对话框中 选中output页面 勾选下面的选项 以生成编译批处理文件
Create Executable Create Batch File
Debug Information
Create Hex file
Browse Information
在这里插入图片描述点击ok 后 在Keil中重新编译一下工程 就会在工程的根目录下生成一个 Target 1.bat(跟keil的工程名相同) 的批处理文件,这个是用于上面qbs文件的代码中实现编译的

再次切换到qtcreator
右键qbs的工程图标 选择重新构建 如无错误如下所示
在这里插入图片描述然后就点项目
设置运行配置为custom on remoteOpenocd
设置executable 为生成的axf文件
在这里插入图片描述连接好下载器
点击调试运行就会进行下载并运行
中断在main函数入口了
在这里插入图片描述存在的问题:
有时中断会断不下来 可能是gdb-py或者是openocd的bug吧,更换版本可能好点
有时调试会假死 在进程管理器中关掉openocd各gdb-py的假死进程 重连下载器才可以再进行调试
还有就是点连续运行后再按暂停是停不下来的
Restart debuggin 一按就会假死
单步调试较慢 步过一些时间较长的指命会假死 最好用先下好断点-直接运行到断点-删除断点-单步/步过 的方式进行调试

在qtcreator中编辑代码后,必须右键qbs工程图标 选择重新编译 才会生成新的代码对应的axf文件,
而qtcreator左下角的构建按钮不起作用。

如果要在工程中增加一个新的代码文档(c 或 cpp),必须要在Keil中先增加该文档并重新编译以生成新的Target1.bat文件,才可以qtcreator进行编译、调试。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值