stm32
文章平均质量分 84
致守
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32G030F6P6 HSE时钟不能使用无源晶振,只能使用有源晶振!
STM32G030F6P6 LSE是可以使用有源。转载 2025-07-21 17:00:43 · 287 阅读 · 0 评论 -
KEIL debug无法进入main函数 或 debug卡死的原因总结
工程上,突然发现debug进不了main函数,debug直接进入SystemInit函数,单步发现循环走汇编指令(如图一),开始时推测是中断引起的,把关联的中断处理屏蔽后,发现还是有问题,费了九牛二虎之力才将问题解决,通过调查,发现能引起此问题的原因不少,简单总结如下,希望大家遇到此类问题能快速解决。在Debug页面,点击“Settings”按钮,打开"Contex-M Target Driver Setup"窗口页面,如下图所示的选项要勾选。这里,我遇到的就是因为没有对printf做重定向导致的。转载 2025-07-21 06:11:46 · 2063 阅读 · 0 评论 -
STM32 ICP、ISP、IAP、Bootloader、SWD、JTAG究竟是什么?它们之间有什么关系?
从代码写入单片机的方式上去区分主要分为3种:ICP、ISP、IAP一、ICP(In Circuit Programing):在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);ICP 主要通过CPU的DAP(Debug Access Port) 烧录代码,下面以ARM Cortex-M3/M4 为例,展示Debug Int转载 2025-02-24 16:35:00 · 1450 阅读 · 0 评论 -
STM32F407串口IAP远程升级程序
在产品研发阶段,可以采用ICP烧录程序,能通过仿真器进行调试快速找出bug,但是需要相关硬件电路,如图1所示。在产品研发完成后,由于JTAG相关的电路会占用单板上的体积,所以一般会把这部分电路给删去,删去之后就无法使用仿真器进行程序更新和调试。图1 JTAG电路烧录的程序存放在Flash中,STM32程序启动或复位时,起始地址是0x08000000,然后按既定顺序依次运行程序,如图2所示。转载 2025-02-24 16:33:57 · 887 阅读 · 0 评论 -
STC单片机 IAP(EEPROM)的使用
**************************** 擦除一扇区 ****************************//**************************** 读一字节 ****************************//**************************** 写一字节 ****************************/在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP命令才会生效。转载 2025-02-23 21:27:33 · 677 阅读 · 0 评论 -
单片机三种烧录方式ICP、IAP和ISP详解
1、ICP使用SWD接口进行烧录程序。常用的烧录工具为J-Link、ST-Link、Nu-Link。与之配套的烧录软件为J-Flash、NuMicro_ICP_Programming_Tool、st-link utility。2、ISP是使用引导程序通过USB/UART等接口进行烧录的,首先就是需要有BoodLoad程序。最常见的烧录方式就是学习8051单片机时使用的STC-ISP烧录工具了。3、IAP就是通过软件实现在线电擦除和编程的方法,没有使用任何工具。转载 2025-02-22 17:30:40 · 618 阅读 · 0 评论 -
APROM、LDROM的区别!(flash)
CORTEX-M架构中没有EEPROM,若增加EEPROM需要额外的成本,EEPROM重要性不够(且可以将FLASH中的几页做为EEPROM来使用)。新唐M0的单片机有两个FLASH,一个是LDROM,另一个就是APROM与Data Flash(别看有两个其实也只是一个,只是新唐的程序员将其分成了两个而以)。(1)这样BOOTLOADER程序与APPLICATION程序互不相关不会有影响,便于开发人员(若不独自开辟一个LDROM,你调试就必须擦出BOOTLOADER,等等).(4)RAM:数据空间。转载 2025-02-22 17:19:14 · 281 阅读 · 0 评论 -
keil生成带有时间戳的hex文件(20201210)
里面放置一个bat文件名,文件名随意,我们待会儿编写这个文件,图中示例为。是keil内变量,代表的是当前target,在本例子中为targe名。文件不会覆盖,如果你编译次数过多,文件数目会越来越多,请及时清理。为当前目录,当前目录为.uvprojx工程文件的目录,即在。为keil内变量,代表的是当前target,在本例子中为。(如果Run #1被占用,可以使用Run #2)为keil内变量,代表的是当前工程名,本例子中为。代表输入的第一个参数,在此例子中是。创建前运行选项(2个)创建后运行选项(2个)转载 2024-05-24 17:58:52 · 666 阅读 · 0 评论 -
I2C电平转换电路_双向电平转换电路工作原理
这个需要特别注意,因为一旦没注意选用了,可能就是有的板子功能OK,有的板子NG。,即SDA2/SCL2为低电平0V时,因为MOS管体二极管的存在,体二极管导通,MOS管的S极被拉低,Vgs接近3.3V,MOS管导通,进一步导致左边和右边电平一样,为0V。,即SDA1/SCL1为高电平3.3V,MOS管的Vgs=0,不导通,右边因为上拉电阻的存在,SDA2/SCL2电平保持为5V。,即SDA1/SCL1为低电平0V,Vgs=3.3V,MOS管导通,右边电压就跟左边电平一样了,SDA2/SCL2为低电平0V。转载 2024-05-06 23:42:04 · 1836 阅读 · 0 评论 -
I2C走线技巧、及上拉电阻、电源电压、总线电容三者间的函数关系
Rpmax是负载电容的函数,总线电容越大,即负载越大,Rpmax越低。但在一些特定的情况下,比如折叠、滑盖机型中,I2C的两根信号线需要通过转轴或滑轨处的FPC,此时由于信号路径比较长,距离天线比较近,而且Open drain的输出级对地阻抗大,对干扰比较敏感,因此比较容易受到RF信号源的干扰。否则,上拉电阻上会有耗电。2,总线电容是线路连接和管脚的总电容,规定总线输入电流的最大值是10uA,同时规定了上升时间tr的最大值,由于高电平要求0.2VDD的噪声容限,这个输入电流限制了Rp 的最大值。转载 2024-05-06 18:19:33 · 5230 阅读 · 0 评论 -
Linux echo命令与示例
echo命令是Linux中最基本和最常用的命令之一。传递参数给echo将打印到标准输出。echo通常在shell脚本中用于打印消息或输出其他命令的结果。echo是一个内置shell命令。echo的行为与其他流行的shell一样,如Zsh和Ksh。但它们的行为与shell之间略有不同。还有一个独立的程序,但通常,shell内置版本将优先。我们将介绍Bash内置版本的echo。这是echo命令的语法。使用-n选项时,将禁止尾随换行符。如果指定-e\\打印反斜杠字符。\a警报BEL。\b打印退格字符。\c。转载 2024-04-29 15:19:19 · 979 阅读 · 0 评论 -
STM32 CAN通信 滤波器配置总结
define CAN2_INIT_COMPLETE 0x20 //CAN2初始化完成标志 //#define CAN_BUS_ERROR 0x40 //CAN总线错误标志 #define CAN2_RESET_COMPLETE 0x10 //CAN2控制器复位完成标志。此时CAN_FxR0和CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。转载 2024-04-25 20:12:57 · 4312 阅读 · 0 评论 -
[CAN] CAN BUS的错误检测和错误状态管理
控制器局域网络(Controller Area Network, CAN)是当今汽车和工业自动化系统的重要标准。可靠性是CAN总线协议的核心优势之一,这使其成为安全关键应用的理想选择。CAN总线错误的发生可能有多种原因,比如电缆故障、噪声、不匹配的终端电阻、CAN节点故障等。识别、分类和解决此类CAN错误是确保整个CAN系统持久性能的关键。错误处理可以识别和拒绝错误的信息,使发送者能够重新传输信息。此外,该过程有助于识别和断开持续传输错误信息的CAN节点。CAN 总线的错误管理主要需要从三个方便进行分析。转载 2024-04-18 15:21:12 · 2536 阅读 · 0 评论 -
STM32平台下官方DMP库6.12超详细移植教程
我们总结一下在库文件中都做了那些修改:把#include "stm32f4xx.h"修改为 #include "stm32f10x.h"1删除 #include "main.h" 和 #include "board-st_discovery.h" 头文件声明1修改 #include "uart.h" 为自己写的 #include "USART1.h"1修改 #include "i2c.h" 为 自己写的I2C头文件 #include "SI2C1.h"1。转载 2024-04-17 19:06:04 · 1602 阅读 · 0 评论 -
STM32那点事(1)_STM32F40_41xx启动文件详解
_heap_base在SPACE之前,因为堆空间是向上增长的,__heap_base指向为堆的地址,__heap_limit为堆的结束地址。首先声明Reset_Handler, SystemInit和__main函数,SystemInit为外部C语言编写文件主要是对时钟初始化,__main为main函数入口,可以被该汇编文件进行调用。如果定义,将会跳转到__initial_sp,使用上述代码中默认堆栈大小初始化,如果没有定义将会使用__use_two_region_memory,用户自定义。转载 2024-02-04 14:43:45 · 1112 阅读 · 0 评论 -
STM32F103-CAN过滤模式配置及simulink自动代码生成与测试
最近换了工作,电脑也换了,STM32的自动代码生成工具在官网已经下不到了,估计也是做的太差了,也不想干了~~花了一些时间把环境配置好了,目前用的是Matlab2020b,stm32cube版本5.6.0,stm32target版本5.6.0(这个是最新的了,再没有更新了)断更很多天了,感觉很颓废。进入正题,本文记录stm32CAN过滤模式的四种配置及simulink代码生成与测试。之前的文章中只用了32位列表模式(不清楚的可以看),下面分别介绍其他三种模式。转载 2024-01-06 11:28:30 · 1032 阅读 · 0 评论 -
mdk arm debug配置
如果你的PC主机cpu工作频率是5GHz,而目标设备的cpu频率是48MHz,那就按照48MHz模拟运行;如果目标设备的cpu频率是10GHz,则只能按照5GHz模拟运行。Initialization File:指定可以包含Debug Commands,Debug Functions,、调试器配置设置和设备初始化命令的文件。右侧settings:配置目标驱动程序选项,例如跟踪选项。DLL:软件仿真和硬件仿真都需要使用动态库,动态库文件保存在keil安装目录的ARM/BIN下面。转载 2024-01-06 11:26:51 · 499 阅读 · 0 评论 -
CAN总线学习笔记 | CAN基础知识介绍
CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。转载 2023-12-02 16:25:23 · 2891 阅读 · 0 评论 -
CAN总线要点总结(CAN2.0A/B)
工作也有几年了,在项目中也接触过几次CAN总线,但总是止步于会用即可,对于很多细节上的东西有时还是稀里糊涂的状态,这几天正好有点时间,因此整理了这篇文章来对自己的CAN总线知识体系查漏补缺。推荐内容。转载 2023-11-29 16:56:02 · 2857 阅读 · 0 评论 -
CAN总线中节点仲裁失败后会怎样?
CAN总线高负载率发送测试时,如果出现大量错误报文、被测设备报文周期出现异常、甚至总线锁死等,有很大可能是CAN网络上的仲裁发生了异常。随着工业技术不断发展,CAN总线已广泛应用于,车辆、航空、医疗等高安全要求领域。高频发送CAN报文也成为安全测试的必要组成部分。在信号正常的网络上高负载率发送测试时,总线上偶然会出现许多意想不到的问题,例如出现大量错误报文、被测设备报文周期出现异常、甚至总线锁死等。这个时候我们则需要考虑一下CAN网络上的仲裁是否发生了异常。首先我们来了解一下CAN总线仲裁机制。转载 2023-11-13 18:35:56 · 936 阅读 · 0 评论 -
STM32之CAN---发送管理分析
STM32共有三个CAN发送邮箱,在检测到总线空闲时交发送,但需要注意的是,有可能会发送失败,有可能因为仲裁失败从而导致失败,也有可能是其它错误,原则上bxCAN将自动重发,但bxCAN也可以配置不自动重发。与接收FIFO的邮箱类似,发送邮箱也是由四个寄存器组成:发送邮箱标识符寄存器(CAN_TIxR x=0..2),发送邮箱长度和时间戳寄存器(CAN_TDTxR x=0..2),发送邮箱低字节数据寄存器(CAN_TDLxR x=0..2),发送邮箱高字节寄存器(CAN_TDHxR x=0..2)。转载 2023-11-13 17:59:45 · 4875 阅读 · 0 评论 -
CAN总线技术 | CAN脱颖而出的“秘密”
基于以上的优势,CAN总线被广泛应用于工业自动化,机器人通讯,新能源汽车等领域。我从事了7年工业自动化,3年工业AGV的研发,都能看到CAN总线的身影。如果想在这些领域从事研发的工作,必须掌握CAN总线的物理层与数据链路层的知识。此外,广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下。比如,为什么要学习物理层?转载 2023-11-13 17:57:59 · 201 阅读 · 0 评论 -
CAN总线如何保证优先级低的数据有机会发送出去?
这段时间因为项目需要接触了CAN通讯相关的知识点,和朋友讨论过程中对方问到怎么判断ID的优先级,印象中CAN通讯是有个通讯优先级仲裁机制的,但是一时间答不上来,查阅网友相关文章做了个总结,欢迎支持不对的地方。。。进入内容前须知:低电平(0)为显性电平,高电平(1)为。转载 2023-11-13 16:54:56 · 1084 阅读 · 0 评论 -
干货分享丨浅谈CAN总线的仲裁机制
系统中多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的优先算法仲裁哪个应获得对总线的使用权。只有获得了总线控制权的设备,才能开始传送数据。转载 2023-11-13 16:50:59 · 1597 阅读 · 0 评论 -
CAN-bus应用笔记:节点篇
在使用浪涌抑制器的场合,比如在图4的节点1和节点2之间增加SP00S12信号浪涌抑制器,其直流等效电阻为9.5Ω,可以将其等效为总线的有效电阻,当节点1收到的电压过低时可通过减小总线有效电阻,提高节点1处的终端电阻来弥补浪涌抑制器带来的损耗。CAN接口负载即为CANH、CANL之间的有效电阻值大小,该电阻会影响发送节点输出的差分电压的幅值,组网后网络中各个节点的负载电阻RL接近,如图1我们测试了CTM1051M小体积CAN隔离模块在不同负载下的输出差分电压幅值。图2 不同供电电压下的差分电压。转载 2023-11-13 16:47:29 · 528 阅读 · 0 评论 -
22条高手总结的CAN总线入门知识!(必看)
正常情况下,逻辑高电平为1,逻辑低电平为0,但是CAN总线却是逻辑高电平为0,称为显性,逻辑低电平为1,称为隐性。如果多个节点同时访问总线,CAN使用非破坏式、逐位仲裁的方式决定哪个节点使用总线:各发送节点从仲裁域(标识符和RTR域)的第1位开始进行仲裁,连续输出显性电平(0)最多的节点可以继续发送。标识符数值为0的CAN报文,具有最高优先级,因为它输出的显性电平最多。发送节点的报文帧中,ACK两位是隐性位,当接收器正确地接收到有效的报文,接收器会在应答位期间向发送节点发送一个显性位,表示应答。转载 2023-11-13 16:44:18 · 5489 阅读 · 0 评论 -
can总线的负载率为什么要控制在30%以内?
可以类比景区的负载率,每个景区都有一个负荷上限,比如说10000人,如果此时景区内只有1000人,那么这时的景区负载率是10%。景区负载率是一个在空间上定义的概念,它说明了在空间上资源的被使用情况,而总线负载率则不然,其是在时间上定义的一个概念,说明了在时间上资源被使用的情况。也不同,0x000优先级最高,0x7ff优先级最低,所以如果需要在高优先级下测试,就用0x000报文模拟负载,如果需要在低优先级下测试,就用ox7ff报文模拟负载,这样就可以模拟高负载高优先级、高负载低优先级、低负载高优先级、转载 2023-11-13 16:42:29 · 2457 阅读 · 0 评论 -
菲亚特利用时间分析软件Symtavision使CAN总线负载率达到70%
CAN总线负载率只是一个宏观的参数,已经不能充分的评估总线的有效性和可扩展性。造成这样的原因是一方面以前电子系统都比较简单和总线报文数量少,单纯的限制总线负载率就可以满足报文响应时间的要求,但当参与CAN总线通信的ECU数量或总线报文数量增多了以后,就不能保证较低的总线负载率满足报文响应时间的要求。随着汽车电子系统中ECU数量的增加,需要通过CAN总线通信的数据量也急剧增加,根据以往的工程经验,总线负载率超过30%就会造成报文延时的概率增大,不同的总线负载率引起报文延时的概率有多大,能够造成的延时是多少,转载 2023-11-13 16:39:07 · 278 阅读 · 0 评论 -
C/C++语言的内存四区(栈区,堆区,全局区,代码区)(附图详解)
栈区是从高地址位向低地址位增长的,是一块连续的内存区域,最大容量是由系统预先定义好的,申请的栈空间超过这个界限时会提示溢出,用户能从栈中获取的空间较小。BSS段的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据段的后面。数据段:数据段也属于静态内存分配。该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。text段和data段在编译时已经分配了空间,而BSS段并不占用可执行文件的大小,它是由链接器来获取内存的。转载 2023-08-09 15:34:18 · 5158 阅读 · 0 评论 -
DSP与STM32的对比浅见(一)
但回头一想,我用STM32也做的是工业品,什么强电干扰、高温场合也一样用得好好的,甚至有个家伙做国产变频器也敢用STM32来折腾,DSP也不是有什么非用不可的理由。2、芯片主频,28335是150MHZ,STM32F1是72MHZ,STM32F407是168MHZ,STM32F429是180MHZ,STM32F767是216MHZ,STM32H743是400MHZ,同等价位下DSP的主频完全没有优势。再后来,有个朋友搞DSP和FPGA的,说浮点运算STM32还差得远,要做电机控制还是DSP好。转载 2023-08-09 15:30:19 · 4509 阅读 · 3 评论 -
【嵌入式】利用arm-DSP库进行FFT计算,获得信号的频谱、幅值及相位(下)
首先获得50Hz的下标,即50/分辨率。可以看到,在分辨率50Hz的情况下,0代表的是直流分量,1为50Hz分量,2为100Hz分量,4为200Hz分量。1.float32_t data2handle[SAMPLE_N * 2],这个用来装处理后的采样数据,所谓处理就是之气那说的虚部填上0,所以对于SAMPLE_N 采样点,这个数组的长度为SAMPLE_N *2;计算谐波,先产生数组,再马上进行两行FFT计算,然后将FFTOutput打印出来,为了美观我是煞费苦心,当然后来发现也不是很美观。转载 2023-08-09 15:25:23 · 3263 阅读 · 0 评论 -
使用STM32F4浮点运算(FPU)功能开启+使用DSP库
由图知,要先判断__CC_ARM 是否定义 ,再判断__TARGET_FPU_VFP是否定义,最后判断__FPU_PRESENT是否已经配置为1,前面3个条件都为真的情况下,才配置__FPU_USED=1;这个是下面具体dsp函数的汇编或由之编译的库,下面的具体功能函数是c编写的,如果直接这样使员工的话,会导致效率变低,所以使用对应的汇编函数实现,可以不关注这个lib文件,如果想了解具体的功能函数,可以参照下面说明,查看具体的.C文件查找对应的函数。转载 2023-08-09 15:23:36 · 5469 阅读 · 0 评论 -
STM32的Flash地址是0x08000000,从0x00000000不可以?
ARM芯片的地址重映射 映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。如下图,CPU读取0x00000000地址上存储单元的过程ARM芯片中有些物理存储单元的地址可以根据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了(重映射就是重新分配这种一一对应的关系)如下图。转载 2023-08-08 13:43:54 · 1974 阅读 · 0 评论 -
关于STM32中Bank、Sector、Page的理解
其实对于bank、sector和page的了解,我觉得需要知道针对我们所使用的MCU,最小写入粒度和最小擦除粒度是什么,具体大小是多少就行了。本文通过对比F1、F4、L4系列的手册数据,浅谈对Bank、Sector、Page相关概念的理解。它把存储器分成了2份,所以有页擦除、bank擦除和整体擦除三种擦除方式。它具有64K的闪存大小,属于中容量产品。转载 2023-08-01 17:26:53 · 1708 阅读 · 0 评论 -
IOT-OS之RT-Thread(十一)--- FAL分区管理与easyflash变量管理
在menuconfig FAL配置项中我们使用了SFUD并且将设备名修改为了W25Q128,保存配置后在rtconfig.h中定义宏FAL_USING_NOR_FLASH_DEV_NAME的值为"W25Q128",在fal_flash_sfud_port.c文件中是通过条件宏定义的,也即优先使用外界定义的FAL_USING_NOR_FLASH_DEV_NAME,这里我们不需要修改。时谈到,elmfat文件系统只能挂载到块设备上,FAL管理的分区只是一段连续的flash存储空间,并不是一个块设备。转载 2023-08-01 14:26:53 · 1483 阅读 · 1 评论 -
stm32 FATFS文件系统如何减少Flash和RAM占用,FATFS移除中文文件名,FATFS移除动态内存
故可以将 fattester.c/h,malloc.c/h,usmart.c/h,usmart_config.c/h,usmart_str.c/h,lcd.c/h 完全移除。使用 f_mount 挂载磁盘,使用 f_open、f_read、f_write、f_opendir、f_readdir、f_closedir、f_size、f_mkdir、f_unlink、f_rename、f_mkfs、f_getlabel、f_setlabel 等函数对磁盘进行操作。W25qxx的块略大,为 4KB。转载 2023-08-01 10:28:07 · 1586 阅读 · 0 评论 -
在没有MMU功能的单片机上实现动态应用程序加载
4)最新研究发现,像keil和iar这些编译器编译出来都会生成一个.o和.axf,其实这个文件就是.elf格式的,通过观察发现,这个.axf文件是最终文件,已经被链接过,的地址,那我们需要怎么办呢,其实可以通过运行时去动态注册的方法实现,不过这里可能用到汇编指令来得到pc所指向的函数的值,这个方法有一个缺点,所有的函数。2)在编译器方面实现,在生成的加载文件中,为每一个地址添加一个重定向,在加载应用的使用去更改这一个重定向的地址,其实uclinx貌似就是这么实现的。我们需要调用的函数的信息。转载 2023-08-01 10:17:52 · 658 阅读 · 0 评论 -
让STM32F运行dll
加载到内存运行也不是最优解(同样会变慢,只是比外存快一些,不过,你要是舍得花银子的话,当我没说)。原因是ARM架构本身可以同时处理指令和数据,都加载到内存或外存时,只能分两步来处理,这必然要比在指令在Flash中,数据在RAM中要慢。大体意思就是,初始化应用程序的运行环境,我这里简单加载了FatFS,SD卡,然后从SD卡中读入程序文件,最后跳转到App去运行。原理:在STM32F429中运行类似uboot的程序,找到SD卡中的elf文件,利用elf的特性,加载程序到外存,跳转到外存中运行。转载 2023-07-26 16:45:10 · 742 阅读 · 0 评论 -
从MDK分散加载文件学习STM32启动流程
因此,内核离开复位状态后,读取内部FLASH的0x08000000地址空间存储的内容,赋值给栈指针MSP,作为栈顶地址,再读取内部FLASH的0x08000004地址空间存储的内容,赋值给程序指针PC,作为将要执行的第一条指令所在的地址。向量表中的数值是 32 位的地址,而不是跳转指令。如果我们在使用某个外设的时候,开启了某个中断,但是又忘记编写配套的中断服务程序或者函数名写错,那当中断来临的时,程序就会跳转到启动文件预先写好的空的中断服务程序中,并且在这个空函数中无线循环,即程序就死在这里。转载 2023-07-26 16:42:55 · 2245 阅读 · 0 评论 -
STM32的代码,跑在RAM里快?还是跑在Flash里快?
由此看出哪种方式比较快。2)就以上两种具体的代码情况来说,我觉得无优化时,如果在Flash里执行:(1)(2)的取指(读flash)->译码->执行 (读flash);另外,STR9与STM32的总线架构是一样的,这里有一个在STR9上实现的FFT函数的实测数据,可以进一步说明在Flash中运行代码可以比在RAM中快!/***********循环体内代码为N个以下的block*************//***********循环体内代码为N个以下的block*************/转载 2023-07-26 16:41:42 · 1645 阅读 · 0 评论
分享