有人使用STM32H743芯片做应用开发,遇到个比较奇怪的事情。事情是这样的,他使用ST公司的图形化配置工具STM32CubeMx进行基本配置后,如果基于ARM MDK IDE创建工程并组织代码,编译除错后运行一切正常。但如果他基于IAR IDE创建工程并使用相同的用户代码时,发现程序没法正常运行,同时还没有任何报错。颇为奇怪。
经进一步了解。他的代码要实现的一个主要功能就是ADC,并利用通用DMA将ADC结果搬运到内存。现在最明显的问题就是,当把IDE从MDK切换到IAR后,ADC的结果没有被搬运到内存。借助调试可以确认,ADC外设确实启动了、DMA配置也没有问题,那到底怎么回事呢?两个环境下的外设配置及用户应用代码是完全一样的。
借助调试,在调试过程中无意发现了一点点差异。那就是两个IDE分别为存放ADC结果的内存安排的地址不一样。下面两幅截图来自ARM MDK和IAR环境下存放ADC结果的内存地址。
不难看到,在MDK环境下,内存地址安排在0x2400008c开始的地方,而在IAR环境下内存地址被安排在0x20000084开始的地方。难道问题就出在这个地方?
------正是!
我们先查看STMH7参考手册,看看上面2个地址位于哪些内存区。
也就是说,IAR默认将存放ADC结果的内存安排在DTCM区,而MDK将其安排在AXI SRAM区。我们可以查看手册得知,H7系列的通用DMA1或DMA2是没法访问DTCM的。DTCM只能被内核或MDMA访问。
上图中的短横杠表示不可访问。原来是这样,难怪编译过程中没有任何报错提示,只是所选DMA硬件上不支持对DTCM的访问而已。
既然知道了原因,问题就好解决了。我们可以在IAR环境里直接给定存储地址,能让DMA访问到就行。或者在IAR调试环境下修改内存使用的默认地址于AXI SRAM区【参考下面截图示意操作】。
OK,今天的话题就分享到这里。这里多分享一点,愿君少跳一次坑。下次再聊。
关键字:程序 IDE STM32
引用地址:
程序换个IDE就不运行了?
推荐阅读最新更新时间:2024-11-20 08:48
STM32如何产生PWM信号
本文实践用到的芯片为:STM32F103VET6。文中所述内容符合同系列芯片的应用。本文适合初学者阅读。 上面是在STM32引脚PA0上测得的频率为1KHz占空比为25%的PWM信号。下面讲如何实现。 如上图所示,我们使用定时器2通道1产生PWM。 执行思想:1.需要把引脚配置为复用推挽输出;2.需要配置定时器2。 1.配置引脚 我们用库函数实现的话,肯定要涉及到GPIO初始化配置结构体,所以需要定义一个GPIO_InitTypeDef类型的结构体变量,然后把变量成员配置好。 2.配置定时器2 我们用库函数的话,一是要涉及到定时器的基本配置结构体,所以需要定义一个TIM_TimeBaseInitTypeDef类型的结构体变
[单片机]
STM32的USART中RTS、 CTS的作用和意义
写在前面 Ⅰ 我们都知道USART中RX和TX这两个引脚的功能,这两个引脚是USART串行通信最常见和必不可少的两个引脚。但我们在手册中会发现关于USART的其他引脚:USART_CK、USART_RTS、USART_CTS,如下图: 但我们大部分都没怎么使用过USART_RTS和USART_CTS这两个引脚。下面将给大家简单讲述一下关于USART串口拓展的知识。 关于DB9串口接头 Ⅱ 我们都听说过RS232,说232就知道DB9这个串口接头。 DB9个引脚的功能: 1 CD ← Carrier Detect 载波检测 2 RXD ← Receive Data 接收数据 3 TXD → Transmit Data 发送数
[单片机]
英蓓特携手ST推出STM32 Coocox开发工具
Premier Farnell集团子公司英蓓特科技日前宣布与为各个电子应用领域提供服务的全球领先企业意法半导体(纽交所: STMicroelectronics)倾力合作,共同实现了免费开源的CooCox工具链与最新STM32系列微处理器产品之间的完美结合,使开发人员可以借助STM32产品系列中600多个MCU的支持,实现各种性能和功能的提升。 CooCox是一款免费/开源的针对ARM® Cortex®-M的软件开发工具链,包括软件工具、代码组件、硬件设计和面向ARM Cortex微控制器的社区支持。使用CooCox软件工具的开发人员可从支持设备列表中轻松选择目标设备来进行创建与编译,并对STM32微控制器进行编程。
[嵌入式]
STM32中 warning: #61-D: integer operation result is out of range
由于编译器默认signed int即32位有符号整数类型,而1 31实际为0x80000000, 这样就有可能改写了符号位(最高位) 依此类推,(2 30),(3 29)...等都会出现编译警告问题. 解决办法为: ((unsigned int)1 31),((unsigned int)2 30),...
[单片机]
STM32初学笔记4之USART
=========================== 文件分割线 =============================== /** ** 文件名称:BSP_ALIENTEK.H ** 功能描述:ALIENTEK开发板板级支持包声明 ** 硬件平台:STM32F103RBT6 Development Board ** 编译环境:Keil uversion4 IDE ** 版本信息:v0.2 ** 编写作者:唐华明 ** 编写时间:2011.11.26 ** 附加说明:无 ** 修改记录:2011-11-26 将DS0Off() GPIO_SetBits(GPIOD, GPIO_Pin_8)修改为 **
[单片机]
在STM32实现命令行
一、前言 工作中的开发环境都是基于linux命令行交互,作为命令行的重度使用者,玩单片机也要使用命令行工具,百度了一些命令行工具,有几个不错的开源 cmd 交互工具,主要看了 finsh和 nr_micro_shell 两个开源项目。Finsh 功能上限较多,但资源占用比较高,nr 有基本功能,且占用 MCU 资源较少,Github 给出的对比列表如下: Nr 和 Finsh 编译资源对比: 原始工程 添加nr_micro_shell增加量 添加finsh增加量 ROM 63660 +3832 +26908 RAM 4696 +1104 +1304 综合衡量了一下,移植 nr 作为后续项目的一个命令行交互。本篇文章分
[单片机]
PIC单片机循环程序应用实例
在这里介绍一种定时程序,说明循环程序在PIC单片机上的应用。笔者仍以PIC16F84单片机为例建立其定时源程序清单。该定时器源程序只需改变一条指令的常数设置,即可使定时时间从分钟级到38小时的连续变化(4MHz晶振条件)。PIC16F84单片机的硬件电路,请见本报第32期实验编程器101实验板电路。在该实验板电路上,若读者改变晶振的频率(2MHz、1MHz、500kHz)等,很易直观看出定时时间成比例相应地增加,这对了解PIC单片机的性能十分直观有趣。若在该源程序上再多设置一次循环,可使定时时间长达1月以上。 该PIC16F84单片机定时源程序可直接在MPLAB集成开发环境软件下进行汇编,其汇编后生成的HEX文件可在实验编
[单片机]
DSP程序构造的加密体制
目前,DSP以其卓越的性能、独有的特点,已经成为通信、计算机、消费类电子产品等领域的基础器件。同时,随着对知识产权的重视,在利用DSP进行产品设计时,如何保护自己的成果,防止破译者窃取,也成为设计者工作在一个重要方面 。如果产品大批量生产,那么可以利用掩膜技术等工艺将操作程序及数据写入芯片,使它们不能被读出,达到保护的效果。对于还没有形成规模的产品,使用这样的方法就会使成本大大增加。因此,本文提出一种方法,利用3DES、Geffe发生器和MD5等算法,构造一种加密体制,来保护DSP程序。 1 加密原理及硬件结构 1.1 加密原理 该体制的加密原理可分为2个层次。首先是对程序的初始保护,就是把程序写入DSP芯片之前,对源代码进
[应用]