0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于IAR IDE创建工程程序不能运行怎么解决

麦辣鸡腿堡 来源:茶话MCU 作者:Miler 2023-07-22 17:27 次阅读

有人使用STM32H743芯片做应用开发,遇到个比较奇怪的事情。事情是这样的,他使用ST公司的图形化配置工具STM32CubeMx进行基本配置后,如果基于ARMMDK IDE创建工程并组织代码,编译除错后运行一切正常。但如果他基于IARIDE创建工程并使用相同的用户代码时,发现程序没法正常运行,同时还没有任何报错。颇为奇怪。

经进一步了解。他的代码要实现的一个主要功能就是ADC,并利用通用DMAADC结果搬运到内存。现在最明显的问题就是,当把IDE从MDK切换到IAR后,ADC的结果没有被搬运到内存。借助调试可以确认,ADC外设确实启动了、DMA配置也没有问题,那到底怎么回事呢?两个环境下的外设配置及用户应用代码是完全一样的。

借助调试,在调试过程中无意发现了一点点差异。那就是两个IDE分别为存放ADC结果的内存安排的地址不一样。下面两幅截图来自ARMMDK和IAR环境下存放ADC结果的内存地址。

图片

图片

不难看到,在MDK环境下,内存地址安排在0x2400008c开始的地方,而在IAR环境下内存地址被安排在0x20000084开始的地方。难道问题就出在这个地方?

------正是!

我们先查看STMH7参考手册,看看上面2个地址位于哪些内存区。

图片

也就是说,IAR默认将存放ADC结果的内存安排在DTCM区,而MDK将其安排在AXISRAM区。我们可以查看手册得知,H7系列的通用DMA1或DMA2是没法访问DTCM的。DTCM只能被内核或MDMA访问。

图片

图片

上图中的短横杠表示不可访问。原来是这样,难怪编译过程中没有任何报错提示,只是所选DMA硬件上不支持对DTCM的访问而已。

既然知道了原因,问题就好解决了。我们可以在IAR环境里直接给定存储地址,能让DMA访问到就行。或者在IAR调试环境下修改内存使用的默认地址于AXISRAM区.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    458

    文章

    51419

    浏览量

    428716
  • adc
    adc
    +关注

    关注

    99

    文章

    6546

    浏览量

    546209
  • STM32
    +关注

    关注

    2275

    文章

    10932

    浏览量

    358280
收藏 人收藏

    相关推荐

    警告 工程无法创建 不能编译

    ` 出现这种警告,不能创建工程这是另一个程序,同样的警告。但就可以创建工程--------------------------------------懵逼了这是啥情况????怎么解决.
    发表于 07-21 17:26

    如何去解决STM32CubeMx生成KEIL或IAR工程出现的问题

    和project_location后,点击GNERATE CODE,有时候会弹出这样的窗口:过一会儿又会提示创建工程有问题:而且我在使用CubeMx有时候可以成功地建工程,有时候又不能。通过多次不同地...
    发表于 08-24 07:31

    如何利用STM32实现跑马灯程序创建工程

    如何利用STM32实现跑马灯程序创建工程
    发表于 11-04 06:41

    IAR建工程的方法

    目录一. 固件库下载二. IAR建工程三. 工程配置一. 固件库下载下载地址:STM32固件库下载进入官网下载根据你stm32芯片对应的型号选择此处我选择的是STM32F1x系列,进入之后下载下载
    发表于 01-27 08:21

    创建STM32CUBE_IDE_工程的方法

    STM32CUBE_IDE_创建工程1、个人理解是stm32_cube_ide是集成了stm32_cube_mx和keil的功能2、简化来讲就是具有图形化配置和代码编辑器的功能3、下面开始正题,首先
    发表于 01-27 06:29

    Kinetis实战开发--用IAR创建工程

    IAR 开发环境中可以使用两种方法新建工程。一是 开发环境中可以使用两种方法新建工程。一是 新建 创建法, 新建 创建法是在空 白
    发表于 09-25 14:52 31次下载

    用于创建新固件应用程序的软件工具Keil IDE

    用于创建新固件应用程序的软件工具Keil IDE
    发表于 06-06 08:09 4次下载
    用于<b class='flag-5'>创建</b>新固件应用<b class='flag-5'>程序</b>的软件工具Keil <b class='flag-5'>IDE</b>

    keil创建工程及单片机程序执行流程

    一、单片机程序执行流程:1、startup_stm32f10x_md.s启动系统2、system_stm32f10x.c进行系统初始化3、最后通过引导程序程序引导至主函数开始执行二、keil
    发表于 11-11 10:51 3次下载
    keil<b class='flag-5'>创建工程</b>及单片机<b class='flag-5'>程序</b>执行流程

    PIC16F877A 创建工程 (MPLAB X IDE @XC8)

    个软件都默认安装; 在MPLAB X IDE 中添加XC8编译器(如果已经存在,则不用修改);3.创建工程注:时钟源根据 自己的开发板选择(芯片内部没有时钟源,外部一定要有时钟电路,不然调试会出现错误!!!)(错误提示:目标器件.
    发表于 11-16 17:51 9次下载
    PIC16F877A <b class='flag-5'>创建工程</b> (MPLAB X <b class='flag-5'>IDE</b> @XC8)

    华大HC32-(01)-创建工程模板

    华大HC32-(01)-创建工程模板
    发表于 11-24 12:51 2次下载
    华大HC32-(01)-<b class='flag-5'>创建工程</b>模板

    STM32CUBE_IDE_创建工程

    STM32CUBE_IDE_创建工程1、个人理解是stm32_cube_ide是集成了stm32_cube_mx和keil的功能2、简化来讲就是具有图形化配置和代码编辑器的功能3、下面开始正题,首先
    发表于 12-03 15:21 9次下载
    STM32CUBE_<b class='flag-5'>IDE</b>_<b class='flag-5'>创建工程</b>

    STM32CubeMX 创建工程模板

    STM32CubeMX 创建工程模板
    发表于 12-08 20:06 20次下载
    STM32CubeMX <b class='flag-5'>创建工程</b>模板

    初识CCS,创建工程、选择芯片、简单调试及烧录

    本篇文章,主要面向初次接触CCS的朋友,你可以学到:如何创建工程及选择芯片如何烧录程序如何调试程序如何创建工程及选择芯片点击File->New->CCS Project
    发表于 12-16 16:56 24次下载
    初识CCS,<b class='flag-5'>创建工程</b>、选择芯片、简单调试及烧录

    程序换个IDE就不运行了?

    ,编译除错后运行一切正常。但如果他基于IAR IDE创建工程并使用相同的用户代码时,发现程序没法正常运行
    的头像 发表于 07-24 15:30 752次阅读
    <b class='flag-5'>程序</b>换个<b class='flag-5'>IDE</b>就不<b class='flag-5'>运行</b>了?

    【从0开始创建AWTK应用程序创建应用程序并在模拟器运行

    AWTK是基于C语言开发的跨平台GUI框架。本系列文章介绍如何从0开始创建AWTK应用程序,包括搭建开发调试环境、使用AWTK创建Hello工程并在模拟器上
    的头像 发表于 12-01 08:24 596次阅读
    【从0开始<b class='flag-5'>创建</b>AWTK应用<b class='flag-5'>程序</b>】<b class='flag-5'>创建</b>应用<b class='flag-5'>程序</b>并在模拟器<b class='flag-5'>运行</b>