方法一:
为了保证在MDK中读取正确的程序运行时间,必须对仿真器的跟踪项进行设置。
以ULink2为例(如果使用的是J-LINK下载器或者ST-link下载器 原理一样,可做类比):
(1)在工程的“ Option for Target ..”目标选项界面中,选择标签“Debug”,进行调试设置界面,选择使用“Cortex-M3-ULIK2”作为仿真器,然后点击右侧的“Settings”按键,进入ULINK设置界面。
(2)点击标签“Trace”进入跟踪设置界面,将“Core Clock:”右侧的编辑区输入你的CPU的频率,例如你的实际CPU运行频率为72MHz,那么你就必须输入72Mhz。
(3)“Core Clock”的值决定MDK以什么频率来计算指令周期,因为“Core Clock”的默认值为10MHz,因此如果不修改这个值的话,MDK计算每条指令的运行时间是按10MHz频率来计算的。只有修改为实际使用的频率值,才能得到正确的指令周期。
(我用的是芯片型号: stm32f100CB 它的系统时钟为24MHZ,所以这里填写24Mhz,大部分的stm32F10x系列都能通过PLL跑到72Mhz,这里可以自行修改)
(4)点击kei 调式功能,可在Keil调试界面的左边栏,看到Proect Workspace下的Internal 看到sec即是时间,执行断点调试,即可计算时间了。
开始 执行写flash 前: 注意时间为Internal ->sec :2.13051933
执行完flash 写命令后,注意时间为Internal ->sec :2.15888279
比较一下前后差值: 即为写flash的时间:0.02836346s= 28.3546ms !!!
方法二:通过示波器查看;(我用JTAG 没有实时跟踪语句执行时间,可以用这种方法)
在测试语句先后加上 置位某一管脚 电平的方法 ,通过设置断点,示波器捕捉 高电平 的持续时间---如下图 代码部分
关键字:STM32 在线调试 程序运行
引用地址:
STM32_在线调试查看硬件程序运行时间的两种方法
推荐阅读最新更新时间:2024-03-16 16:15
stm32 l0相关的eeprom
内部FLASH和EEPROM这种掉电后还能保存内容的内存统称为non-volatile memory(NVM),STM32L053内部有2K的EEPROM. 内部EEPROM的页大小为一个Word为单位,擦除是必须以页为单位,所以库函数里的擦除函数也是每次擦除4个字节: view plaincopy to clipboardprint? /** * @brief Erase a word in data memory. * @param Address: specifies the address to be erased. * @note To correctly run this function,
[单片机]
STM32单片机(12) 红外信号接收解码(外部中断)
本程序主要利用外部中断,实现红外遥控器信号接收解码,并利用串口通信把编码传至计算机显示 注:请用质量好点的遥控器实验,用了劣质遥控器浪费了一天时间,数据位接收总是不完整,后来用宿舍空调遥控器就解码成功了 相关资料 STM32单片机学习(2) 外部中断 http://blog.csdn.net/leytton/article/details/38063335 STM32单片机学习(3) 串口中断通信 http://blog.csdn.net/leytton/article/details/38393553 STM32单片机学习(7) 串口通信printf重定向 http://blog.csdn.net/leytton/ar
[单片机]
STM32 的CAN的关键点
1、关于屏蔽寄存器的初始化的处理 //ext_id CAN_FilterInitStructure.CAN_FilterIdHigh=((ext_id CAN_FilterInitStructure.CAN_FilterIdLow=(U16)(ext_id 3) | CAN_ID_EXT; //设置标识符寄存器低字节 为什么要左移3位,这和扩展格式和寄存器的分配有关, 主要是 以及 参考的是:https://blog.csdn.net/android_lover2014/article/details/64127110 2、关于CAN中断的函数名以及过滤组的使用 参考:https:
[单片机]
STM32之内存分布与总线
1、总线 系统结构 系统包括一个由多个互相连接的32位AHB总线组成的矩阵 8个主总线 – Cortex-M4 with FPU core I-bus, D-bus and S-bus – DMA1 memory bus – DMA2 memory bus – DMA2 peripheral bus – Ethernet DMA bus – USB OTG HS DMA bus123456 7个从总线: – Internal Flash memory ICode bus – Internal Flash memory DCode bus – Main internal SRAM1 (1
[单片机]
STM32通过USB实现Bootloader/IAP功能
前沿: 最近在做STM32的USB Bootlader/IAP功能,也就是通过USB实现固件升级,本文介绍下实现的基本思路,希望对实现IAP的同学一个参考,改方法已经在产品中得到实际应用并验证是比较合理,稳定可靠的。 程序空间划分: 在单片机的程序Flash中分两个区,分别存储Bootloader代码和App代码,Bootloader放到代码起始地址,也就是0x08000000,App放到0x8020000地址,中间预留了很多的地址空间,主要是为了用来存储一些需要掉电保存的数据,比如我在0x0800C000地址就存放了App程序运行后写入该地址的标志数据。 启动流程: 上电后自然是运行Bootloader程序,Bootloader
[单片机]
【STM32】GPIO工作原理(八种工作方式分析,附电路图)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO ) 芯片数据手册(datasheet) STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、
[单片机]
基于STM32、STM8处理器万能试验机的多个功能模块设计
基于STM32、STM8处理器,设计完成了万能试验机的多个功能模块。为了提高小信号的采集精度与速度,用多处理器设计了一种混合式的锁相放大器,并运用数字处理进行进一步处理,具有很高的性价比。在位移信号采集中。运用STM8S实现了低成本的设计。实验表明,本系统在速度与精度上满足万能试验机要求,总体性价比高。 万能材料试验机是一种配备全数字化测量控制系统的试验机,主要用于橡胶、塑料、金属、水泥等材料拉伸剥离等力学性能试验。材料试验机作为一种精密测试仪器,对于材料科学的发展,工业产品和工程结构设计,有效的使用材料,改进工艺,减轻产品重量和缩小体积,提高产品质量和降低成本,以及保证产品安全可靠,提高使用寿命,都具有极其重要的作用。目
[单片机]
STM32定时器的几种用法
一、常用的定时功能 (1)基本、通用、高级定时器都有最基本的定时功能,定时功能用到的函数如下: HAL_ TI M_Base_Init 初始化定时,包括分频、 预装值等。 HAL_TIM_ConfigClockSource 选择定时器的 时钟 源 HAL_TIM_Base_Start_IT 开始定时器 HAL_TIM_PeriodElapsedCallb ac k 超时后的回调函数 (2)Cubemx的配置,不管什么定时器,都是这个配置,注意开启中断,计算好最终的定时器时钟 (3)代码片段 1 void MX_TIM12_Init(void) 2 { 3 TIM_ClockConfigTypeDef sClo
[单片机]