stm32单片机教程怎样查看一格程序执行时间

STM32中的tic与toc,用SysTick统计代码段执行时间
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
STM32中的tic与toc,用SysTick统计代码段执行时间
STM32中的systick,一共有4个寄存器,名称和地址分别是:
SysTick_CTRL,&&&&&&&&0xE000E010&&--&&控制寄存器
SysTICK_LOAD,&&&&&0xE000E014&&--&&重载寄存器
SysTick_VAL,&&&&&&&&0xE000E018&&--&&当前值寄存器
SysTick_CALRB,&&&0xE000E01C&&--&&&校准值寄存器
首先看SysTick-&CTRL控制寄存器:寄存器内有4个位具有意义
第0位:ENABLE,Systick&使能位&&(0:关闭Systick功能;1:开启Systick功能)
第1位:TICKINT,Systick&中断使能位&&&&(0:关闭Systick中断;1:开启Systick中断)
第2位:CLKSOURCE,Systick时钟源选择&&(0:使用HCLK/8&作为Systick时钟;1:使用HCLK作为Systick时钟)
第16位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick&已经数到了0,则该位为1。如果读取该位,该位将自动清零
SysTick_LOAD&&重载寄存器:&
SysTick_VAL当前值寄存器:&
也是个24位的寄存器,读取时返回当前倒计数的值;写它则使之清零,同时还会清除在SysTick&控制及状态寄存器中的COUNTFLAG&标志。
SysTick_CALRB&&校准值寄存器:&
这个寄存器好像目前的水平我还用不到,大体意思明白点,把英文说明放这吧:
位31&NOREF&:1=没有外部参考时钟(STCLK&不可用)0=外部参考时钟可用
位30&SKEW:1=校准值不是准确的1ms&0=校准值是准确的1ms
位[23:0]&:Calibration&value
Indicates&the&calibration&value&when&the&SysTick&counter&runs&on&HCLK&max/8&as&external&clock.&The&value&is&product&dependent,&please&refer&to&the&Product&Reference&Manual,&SysTick&Calibration&Value&section.&When&HCLK&is&programmed&at&the&maximum&frequency,&the&SysTick&period&is&1ms.&If&calibration&information&is&not&known,&calculate&the&calibration&value&required&from&the&frequency&of&the&processor&clock&or&external&clock.
类似matlab里的tic与toc函数,用来统计程序代码执行需要的时间:
uint16_t OverFlowTimes=0;
void tic(void)&&&&&&&&&&&&&&&&&&&&&&&&& & //程序开始计时
SysTick-&CTRL |= (1&&2); & //时钟选择,HCLK
SysTick-&CTRL |= (1&&1); & //中断使能
SysTick-&VAL=0X00; &&&&&&&&&&&//当前数值寄存器清零,并清除溢出标志位
SysTick-&LOAD=0XFFFFFF; &&&&//计数器赋初值
SysTick-&CTRL |= (1&&0); &&&&//开启计数器
void toc(void)&&&&&&&&&&&&&&&&&&&&&&&&& & //结束计时
float ElaspT
uint32_t ClkN
SysTick-&CTRL &= ~(1&&0); //关闭计数器
ClkNum=SysTick-&VAL; //读取计数器的值
ElaspTime=(OverFlowTimes*((float)0xffffff/SystemCoreClock)+(float)(0xffffff-ClkNum)/SystemCoreClock); //计算时间
OverFlowTimes=0;
printf(&\r\nEscaple time is %f\r\n&,ElaspTime);
/*溢出的次数*/
void SysTick_Handler(void)
OverFlowTimes++;
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved查看: 2085|回复: 0
学习笔记-STM32F10xx 时钟系统及代码分析
19集 &&& STM32 时钟&蓝色方框为时钟源:HSI RC、HSE OSC、PLL、LSE OSC、LSI RC梯形紫色为选择器:就像一个切换开关。可以从两步分析该时钟图:1、从SYSCLK开始看,由谁可以提供时钟给SYSCLK,逐一分析。2、从RTCCLK、IWDGCLK开始分析,由谁可以提供时钟给RTCCLK\IWDGCLK。&一、时钟源:内部时钟的精度都比较差(《STM32中文参考手册 V10》 ---- 57页)HSI RC: 高速内部时钟(约8M),当被用作PLL时钟的输入时,系统时钟能得到的最大频率为64MHzHSE OSC: 高速外部时钟,一般采用晶振(可选4~16M,一般选8M)PLL: 锁相环(2~16倍),用于倍频时钟,可选来源 HSI 二分频、HSE、HSE二分频。PLL的设置必须在其激活前完成,一旦PLL被激活,这些参数都无法被改动,如果发现PLL的&&& 设置无效,就可能在设置时PLL已经完成激活,如果需要使用USB接口,PLL必须被设置为输&&& 出48MHz或者72MHz时钟,用于提供48MHz的USBCLK时钟。LSE OSC: 低速外部时钟,一般采用晶振(32.768KHz)用于提供RTC时钟LSI RC: 低速内部时钟(约40KHz),用于提供独立看门口作为时钟源&二、SYSCLK:(最重要的时钟)从上图中可以看到,SYSCLK为最重要的时钟,几乎大部分的外设时钟都是从SYSCLK得到时钟信号。所以可以从SYSCLK开始分析。SYSCLK可以选择从HSI RC、PLL、HSE OSC取其中一个时钟信号,而PLL则可以从HSI RC的二分频、HSE OSC、HSE OSC 二分频取得时钟信号。系统复位后,HSI为默认的系统时钟来源。在做时钟源切换时,目标时钟源稳定就绪后才会发生切换。1、CSS 时钟安全系统:(当系统运行速度莫名其妙的下降、或者USB不工作,可以留意这里)因STM32内部时钟是利用电容产生的时钟,并不是太稳定,所以一般项目中都会采用外部晶振通过HSE OSC提供稳定的时钟给系统,当外部晶振出现问题即HSE失效时,CSS就会自动将时钟源切换至HSI RC。CSS可以通过软件被激活,一旦其被激活,CSS将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到Cortex-M3的NMI中断。一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。如果HSE振荡器被直接或间接地作为系统时钟,时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟是用做系统时钟的PLL的输入时钟,PLL也将关闭。(问题来了,那么USBCLK是不是也就失效了吧?)2、每个时钟都可以独立开启或关闭,这样可以关闭不需要的时钟从而降低功耗。从下图可以看出,每次需要使用某个外设时都要开启相应的外设时钟。(参考STM32中文参考手册 V10 56页)&三、RTCCLK(RTC时钟)RTCCLK可以选择从HSE OSC的128分频、LSE OSC、LSI RC中取时钟信号。这里没有CSS,那如果采用HSE的时钟信号而其又失效,岂不是RTC也就失效了?&四、IWDGCLK(看门狗时钟)看门口时钟只能从 LSI RC中取得时钟源。&五、MCO 输出(PA8引脚)STM32还可以对外输出时钟,时钟源可以从SYSCLK、HSI、HSE、PLLCLK的二分频取得信号。&六、重要的时钟SYSCLK系统时钟AHB总线时钟(高速)APB1总线时钟(低速):速度最高36MHz 连接低速外设APB2总线时钟(高速):速度最高72MHz 连接高速外设PLL时钟:用于倍频&七、寄存器相关(具体参阅 《STM32中文参考手册 V10》 60~75页)&typedef struct{& __IO uint32_t CR;&&& &&& &&& // HSI、HSE、CSS、PLL等的使能和就绪标志位& __IO&uint32_t CFGR;&&& &&& // PLL等的时钟源选择、分频系数设定& __IO&uint32_t CIR;&&& &&& &&& // 清除、使能时钟就绪中断& __IO&uint32_t APB2RSTR;&&& // APB2线上所有外设复位寄存器& __IO&uint32_t APB1RSTR;&&& // APB1线上所有外设复位寄存器& __IO&uint32_t AHBENR;&&& &&& // DMA、SDIO等时钟使能& __IO&uint32_t APB2ENR;&&& &&& // APB2线上所有外设时钟使能& __IO&uint32_t APB1ENR;&&& &&& // APB1线上所有外设时钟使能& __IO&uint32_t BDCR;&&& &&& // 备份域控制寄存器& __IO&uint32_t CSR;&&& &&& &&& // 控制状态寄存器} RCC_TypeD&0x - 0x4002 13FF 复位和时钟控制(RCC)#define PERIPH_BASE&&&&&&&&&& ((uint32_t)0x) #define AHBPERIPH_BASE&&&&&& (PERIPH_BASE + 0x20000)#define RCC_BASE&&&&&&&&&&&&& (AHBPERIPH_BASE + 0x1000)#define RCC&&&&&&&&&&&&&&&& &&& & ((RCC_TypeDef *) RCC_BASE)&八、库函数类型(system_stm32f10x.c -- SystemInit() 函数中通过直接配置寄存器配置,并未采用库函数)1、时钟使能配置:&&&&& RCC_LSEConfig()&、RCC_HSEConfig()、&&&&& RCC_HSICmd()&、 RCC_LSICmd() 、 RCC_PLLCmd() …2、时钟源相关配置:&&&&& RCC_PLLConfig&()、 RCC_SYSCLKConfig() 、&&&& RCC_RTCCLKConfig()&…3、分频系数选择配置:&&&&& RCC_HCLKConfig()&、 RCC_PCLK1Config() 、 RCC_PCLK2Config()…4、外设时钟使能:&&&&& RCC_APB1PeriphClockCmd():& //APB1线上外设时钟使能&&&& RCC_APB2PeriphClockCmd();& //APB2线上外设时钟使能&&&& RCC_AHBPeriphClockCmd();&& //AHB线上外设时钟使能5.& 其他外设时钟配置:&&&& RCC_ADCCLKConfig&();& RCC_RTCCLKConfig();6、状态参数获取参数:&&&& RCC_GetClocksFreq();&&&& RCC_GetSYSCLKSource();&&&& RCC_GetFlagStatus()7、RCC中断相关函数 :&&&& RCC_ITConfig()&、 RCC_GetITStatus() 、 RCC_ClearITPendingBit()…&20集 &&& SystemInit()&SystemInit()函数在 startup_stm32f10x_hd.s 文件里面先于main函数调用。也就是说我们在写mian函数时,不必去调用SystemInit()函数。&一、代码分析 (需要参考 《STM32中文参考手册 V10.pdf》、《STM32F10xxx闪存编程参考手册.pdf》)void SystemInit (void){& //&开启HSI内部8MHz高速时钟 1& RCC-&CR&|= (uint32_t)0x;&&& &&& && //&设置HSI做为系统时钟 1:0& //&SYSCLK不分频 7:4& //&APB1\APB2 不分频 13:8& //&ADC预分频 PCLK2 2分频后作为ADC时钟 15:14& //&MCO引脚不输出时钟 26:24& RCC-&CFGR&&= (uint32_t)0xF8FF0000;&&& && //&HSE振荡器关闭 16& //&CSS时钟监视关闭 19& //&PLL关闭 24& RCC-&CR&&= (uint32_t)0xFEF6FFFF;&& //&设置外部4-16MHz振荡器没有旁路 18& RCC-&CR&&= (uint32_t)0xFFFBFFFF;&& //&设置HSI振荡器时钟经2分频后作为PLL输入时钟 16& //&设置HSE不分频 17& //&设置PLL 2倍频输出 21:18& //&设置USB预分频 PLL时钟1.5倍分频作为USB时钟 22& RCC-&CFGR&&= (uint32_t)0xFF80FFFF;&& //&设置LSI、LSE、HSI、HSE、PLL就绪中断关闭 12:8& //&清除LSI、LSE、HSI、HSE、PLL就绪中断标志位 20:16& //&清楚CSSF时钟安全系统中断标志位 23& RCC-&CIR&= 0x009F0000;&& /*&Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */& /*&Configure the Flash Latency cycles and enable prefetch buffer */& SetSysClock();&#ifdef VECT_TAB_SRAM& SCB-&VTOR&= SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */#else& SCB-&VTOR&= FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH.*/#endif }&#define SYSCLK_FREQ_72MHz& static void SetSysClock(void){#ifdef SYSCLK_FREQ_HSE& SetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHz& SetSysClockTo24();#elif defined SYSCLK_FREQ_36MHz& SetSysClockTo36();#elif defined SYSCLK_FREQ_48MHz& SetSysClockTo48();#elif defined SYSCLK_FREQ_56MHz& SetSysClockTo56();& #elif defined SYSCLK_FREQ_72MHz&&& &&& // &--- 该宏被定义& SetSysClockTo72();&&& &&& &&& &&& // &--- 该函数被调用#endif}&#define& RCC_CR_HSEON&&&&&&&& ((uint32_t)0x)#define& RCC_CR_HSERDY&&&&&&& ((uint32_t)0x) #define HSE_STARTUP_TIMEOUT&& ((uint16_t)0x0500)&#define& FLASH_ACR_PRFTBE&&&& &&& &&& &&& &&&
((uint8_t)0x10)#define& FLASH_ACR_LATENCY&&&&&&&&&&&&&&&&&& ((uint8_t)0x03)#define& FLASH_ACR_LATENCY_2&&&&&&&&&&&&&&&& ((uint8_t)0x02)#define& RCC_CFGR_HPRE_DIV1&&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_PPRE2_DIV1&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_PPRE1_DIV2&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_PLLSRC&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_PLLXTPRE&&&&&&&&&&&&&&&&&& ((uint32_t)0x)& #define& RCC_CFGR_PLLMULL&&&&&&&&&&&&&&&&&&& ((uint32_t)0x003C0000)#define& RCC_CFGR_PLLSRC_HSE&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_PLLMULL9&&&&&&&&&&&&&&&&&& ((uint32_t)0x001C0000)#define& RCC_CR_PLLON&&&&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CR_PLLRDY&&&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_SW&&&&&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x) #define& RCC_CFGR_SW_PLL&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x)#define& RCC_CFGR_SWS&&&&&&&&&&&&&&&&&&&&&&& ((uint32_t)0x0000000C)&typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITS&/* 要设置 72MHz 需要使用HSE外部时钟 */static void SetSysClockTo72(void){& __IO&uint32_t StartUpCounter = 0, HSEStatus = 0;& //&开启HSE时钟 16& RCC-&CR&|= ((uint32_t)RCC_CR_HSEON);& //&在一定的时间内等待 HSE 时钟稳定& do& {&&& HSEStatus&= RCC-&CR & RCC_CR_HSERDY;&&& StartUpCounter++;& & }&while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));& if&((RCC-&CR & RCC_CR_HSERDY) != RESET)& {&&& HSEStatus&= (uint32_t)0x01;&&& &&& // HSE时钟就绪& }& else& {&&& HSEStatus&= (uint32_t)0x00;&&& &&& // HSE时钟未就绪& }&& //&如果HSE时钟就绪& if&(HSEStatus == (uint32_t)0x01)& {&&& //&启用预取缓冲区 4&&& FLASH-&ACR&|= FLASH_ACR_PRFTBE;&&&& //&48MHz & SYSCLK &= 72MHz 设置两个等待周期 2:0&&& FLASH-&ACR&&= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);&&& FLASH-&ACR&|= (uint32_t)FLASH_ACR_LATENCY_2;& && & /*** SYSCLK -& HCLK -& PLCK1\PCLK2 */&&& /*&HCLK = SYSCLK */&&& // 设置AHB分频系数为 1 即不分频,等于SYSCLK的频率 即72MHz&&& RCC-&CFGR&|= (uint32_t)RCC_CFGR_HPRE_DIV1;& &&&&& /*&PCLK2 = HCLK */&&& // 设置APB2分频系数为 1 即不分频,等于HCLK的频率 即72MHz&&& RCC-&CFGR&|= (uint32_t)RCC_CFGR_PPRE2_DIV1;& &&&& /*&PCLK1 = HCLK/2 */&&& // 设置APB1分频系数为 2 即二分频,等于HCLK/2的频率 即36MHz&&& RCC-&CFGR&|= (uint32_t)RCC_CFGR_PPRE1_DIV2;&&& /*& PLL&configuration: PLLCLK = HSE * 9 = 72 MHz */&&& // 这里主要是清零操作 21:16&&& RCC-&CFGR&&= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |&RCC_CFGR_PLLMULL));&&& // 设置HSE作为PLL输入时钟 16&&& // 设置PLL 9 倍频输出 (HSE为8M晶振输入:SYSCLK = 8MHz * 9 = 72MHz)&&& RCC-&CFGR&|= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);&&& /*&Enable PLL */&&& // 开启PLL&&& RCC-&CR&|= RCC_CR_PLLON;&&& /*&Wait till PLL is ready */&&& // 等待PLL就绪标志位就绪 25&&& while((RCC-&CR&& RCC_CR_PLLRDY) == 0)&&& {&&& }& &&&& /*&Select PLL as system clock source */&&& // 清零操作&&& RCC-&CFGR&&= (uint32_t)((uint32_t)~(RCC_CFGR_SW));&&& // 设置PLL为SYSCLK时钟源&&& RCC-&CFGR&|= (uint32_t)RCC_CFGR_SW_PLL;& &&&& /*&Wait till PLL is used as system clock source */&&& while&((RCC-&CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)&&& {&&& }& }& else&&& // HSE未就绪 & {&/* If HSE fails to start-up, the application will have wrong clock &&&&&&&& configuration.&User can add here some code to deal with this error */& }}&二、总结&&& SystemInit():&&& &&& 设置SYSCLK、APB1、APB2不分频,MCO不输出时钟&&& &&& SYSCLK由PLL提供时钟、PLL则由HSI经2分频后提供时钟&&& &&& 设置USB时钟为PLL输出时钟的1.5倍&&& &&& 关闭所有时钟源的中断、清除所有时钟源的中断标志位&&& SetSysClockTo72():&&& &&& 该函数首先是开启HSE时钟,然后在一定的时间等待其稳定。&&& &&& 稳定之后,设置FLASH开启预取缓冲区、设置两个等待周期。&&& &&& 接着设置AHB、APB2、APB1分配系数来配置HCLK、PCLK2、PCLK1的时钟频率。&&& &&& 再设置HSE作为PLL时钟源,并设置PLL为9倍频,再开启PLL,等待PLL就绪。&三、注意SystemCoreClock 在实际写代码中可以通过这个变量来获得当前所设置的系统时钟频率值system_stm32f10x.h:extern uint32_t SystemCoreCsystem_stm32f10x.c:#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* #define SYSCLK_FREQ_HSE&&& HSE_VALUE */&#define SYSCLK_FREQ_24MHz& #else/* #define SYSCLK_FREQ_HSE&&& HSE_VALUE *//* #define SYSCLK_FREQ_24MHz&
*/ /* #define SYSCLK_FREQ_36MHz&
*//* #define SYSCLK_FREQ_48MHz&
*//* #define SYSCLK_FREQ_56MHz&
*/#define SYSCLK_FREQ_72MHz& #endif&#ifdef SYSCLK_FREQ_HSE& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_HSE;&& #elif defined SYSCLK_FREQ_24MHz& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_24MHz; #elif defined SYSCLK_FREQ_36MHz& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_36MHz; #elif defined SYSCLK_FREQ_48MHz& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_48MHz; #elif defined SYSCLK_FREQ_56MHz& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_56MHz; #elif defined SYSCLK_FREQ_72MHz& uint32_t&SystemCoreClock&&&&&&&& = SYSCLK_FREQ_72MHz; #else /*!& HSI Selected as System Clock source */& uint32_t&SystemCoreClock&&&&&&&& = HSI_VALUE;&&&&&&& #endif&&& &
Powered by后使用快捷导航没有帐号?
请完成以下验证码
查看: 1242|回复: 16
单片机在用调试器debug的时候,在不打断点的状态下的运行速度是否和实际速度一样?
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
stm8用stlink调试的时候,发现即便不打断点的时候,运行速度和实际上电运行的速度不一样,调试的时候在有的地方慢很多,是错觉?
&&&&&&&&&&
在线时间260 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 492, 距离下一级还需 8 积分
一粒金砂(高级), 积分 492, 距离下一级还需 8 积分
全速运行应该就差不多了
在线时间1667 小时
芯币3170枚
E金币604枚
TA的帖子TA的资源
应该不会的,我之前调试都很好,如果你觉得仿真不好,就用printf,可以实时观察你要的
在线时间1368 小时
威望5915分
芯币3401枚
E金币102枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
是这样的,调试的时候,有可能你第一条语句执行完,等一会儿才执行第二条语句(我说的是单步调试哦)。有时候虽然你在执行函数实现的那条语句,但是实际是跳进函数里面执行了,所以感觉有点慢吧。
比如delay60ms后打断点,发现不止延时了60ms……但是有的部分速度又很正常,比如定时器测频的时候&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
是这样的,调试的时候,有可能你第一条语句执行完,等一会儿才执行第二条语句(我说的是单步调试哦)。有时 ...
比如delay60ms后打断点,发现不止延时了60ms……但是有的部分速度又很正常,比如定时器测频的时候
这个不一定很准的,因为这种延时本来就不是很准确,我想你应该明白。其次还有语句执行的时间呢。等等之类的吧,想必都会有一定的影响吧。&
在线时间1368 小时
威望5915分
芯币3401枚
E金币102枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
比如delay60ms后打断点,发现不止延时了60ms……但是有的部分速度又很正常,比如定时器测频的时候
这个不一定很准的,因为这种延时本来就不是很准确,我想你应该明白。其次还有语句执行的时间呢。等等之类的吧,想必都会有一定的影响吧。
感觉定时器倒是准能正常测频,延时简直差几十倍……delay60ms在debug的时候要几分钟……&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
这个不一定很准的,因为这种延时本来就不是很准确,我想你应该明白。其次还有语句执行的时间呢。等等之类 ...
感觉定时器倒是准能正常测频,延时简直差几十倍……delay60ms在debug的时候要几分钟……
没有吧,哪有这么长时间啊。我还没遇到过,你的stm8我没用过。。。。。&
在线时间1368 小时
威望5915分
芯币3401枚
E金币102枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
感觉定时器倒是准能正常测频,延时简直差几十倍……delay60ms在debug的时候要几分钟……
没有吧,哪有这么长时间啊。我还没遇到过,你的stm8我没用过。。。。。
俺也刚用stm8,发现很奇怪……&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
没有吧,哪有这么长时间啊。我还没遇到过,你的stm8我没用过。。。。。
俺也刚用stm8,发现很奇怪……
你用iar还是stvd?这个是不是有像keil一样的,可以看那个sec的。如下的图片,你看看这是keil当中的,我的没有你说的几分钟的。所以我好想也没怎么关注过,这个时间,总之我的是挺短的时间在debug的时候就执行完了。&
在线时间1368 小时
威望5915分
芯币3401枚
E金币102枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
俺也刚用stm8,发现很奇怪……
你用iar还是stvd?这个是不是有像keil一样的,可以看那个sec的。如下的图片,你看看这是keil当中的,我的没有你说的几分钟的。所以我好想也没怎么关注过,这个时间,总之我的是挺短的时间在debug的时候就执行完了。从第一句,到第二句,您关注下这个时间的变化。
111.png (15.86 KB, 下载次数: 0)
09:53 上传
这个sec不像是真实的(一直在变),像是模拟运行过程中的(执行一下停止一下)时间&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
你用iar还是stvd?这个是不是有像keil一样的,可以看那个sec的。如下的图片,你看看这是keil当中的,我的 ...
这个sec不像是真实的(一直在变),像是模拟运行过程中的(执行一下停止一下)时间
其实我没关注过这个时间,只是我知道每执行一句,它就在变。我更加关注debug的watch窗口等等的。O(∩_∩)O哈哈~&
在线时间1368 小时
威望5915分
芯币3401枚
E金币102枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
五彩晶圆(中级), 积分 5915, 距离下一级还需 85 积分
这个sec不像是真实的(一直在变),像是模拟运行过程中的(执行一下停止一下)时间
其实我没关注过这个时间,只是我知道每执行一句,它就在变。我更加关注debug的watch窗口等等的。O(∩_∩)O哈哈~
delay等的急人本来,stm8的printf也是龟速&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
其实我没关注过这个时间,只是我知道每执行一句,它就在变。我更加关注debug的watch窗口等等的。O(∩_∩) ...
delay等的急人本来,stm8的printf也是龟速
在线时间1428 小时
威望6328分
芯币21697枚
E金币300枚
TA的帖子TA的资源
从来不用什么printf。。
仿真时进入断点有个时间差
龟速printf,内部是咋弄得我不清楚,慢倒是真正的感受,换成串口明显飞快&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
从来不用什么printf。。
仿真时进入断点有个时间差
龟速printf,内部是咋弄得我不清楚,慢倒是真正的感受,换成串口明显飞快
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 16, 距离下一级还需 184 积分
一粒金砂(中级), 积分 16, 距离下一级还需 184 积分
检查一下你延时程序里的变量的数值和你定义的数据类型是否匹配。延时程序出错,大多是这种原因。
实际上电运行的延时正常,调试的时候延时不正常……数据类型没注意,8位的延时几十个单位而已&
在线时间827 小时
E金币167枚
TA的帖子TA的资源
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
一粒金砂(高级), 积分 487, 距离下一级还需 13 积分
检查一下你延时程序里的变量的数值和你定义的数据类型是否匹配。延时程序出错,大多是这种原因。
实际上电运行的延时正常,调试的时候延时不正常……数据类型没注意,8位的延时几十个单位而已
论坛测评队员
EEWORLD 官方微信
Powered by

我要回帖

更多关于 stm32单片机项目大全 的文章

 

随机推荐