精华内容
下载资源
问答
  • stm32中 delay_ms(4000),延时不准确
    千次阅读
    2021-10-28 17:41:21

    问题:

    用正点原子提供的delay.c文件中的delay_ms来延时4s,delay_ms(4000),发现led灯亮的时间绝对不可能是4秒

    原因在72M条件下,nms<=1864 这个问题,即一次至多延时1.864

    解决办法:

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    更多相关内容
  • u16 fac_us, fac_ms; void delay_init() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8,实际上也.

    参考链接:https://yngzmiao.blog.csdn.net/article/details/79843806 

    #include "stm32f10x.h"
    
    u16 fac_us, fac_ms;
    
    void delay_init()
    {
    	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//选择外部时钟  HCLK/8
    	fac_us=SystemCoreClock/8000000;	      //为系统时钟的1/8,实际上也就是在计算1usSysTick的VAL减的数目
    	fac_ms=(u16)fac_us*1000;		//代表每个ms需要的systick时钟数,即每毫秒SysTick的VAL减的数目   
    }
    
    void delay_ms(u16 nms)
    {	 		  	  
    	u32 temp;		   
    	SysTick->LOAD=(u32)nms*fac_ms;			//时间加载(SysTick->LOAD为24bit)
    	SysTick->VAL =0x00;           //清空计数器
    	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数  
    	do
    	{
    		temp=SysTick->CTRL;
    	}while((temp&0x01)&&!(temp&(1<<16)));	//等待时间到达,看CTRL的第16位(COUNTFLAG)是否为1,看STRL的第0位(ENABLE)是否为1   
    	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
    	SysTick->VAL =0X00;       //清空计数器	  	    
    } 
    
    int i=0;
    
    int main(){
    	
    	while(1){
    		i++;
    		delay_init();
    		delay_ms(1000);
    	}
    }

    在使用delay_ms()或者delay_us()函数之前一定不要忘记先初始化delay_init()。

    展开全文
  • 在LCD_Init()函数执行卡住,仿真调试后找到是卡在了delay_ms()里,开始我还以为是代码有问题,重新添加了例程的代码,无果。后来仔细查看代码才发现,delay_init()函数被我放到了LCD_Init()的后面,而LCD初始化使用...

    STM32学习时间不长,今天LCD屏幕到了,要把之前的程序改到现在的开发板上。在LCD_Init()函数执行卡住,仿真调试后找到是卡在了delay_ms()里,开始我还以为是代码有问题,重新添加了例程的代码,无果。后来仔细查看代码才发现,delay_init()函数被我放到了LCD_Init()的后面,而LCD初始化使用到了延时函数,调整后解决。

    虽然是一个小的问题,自己解决后也会很开心。而且也认识到,对于一个问题只有静下心来好好审视,才可能尽快解决,急于求成往往事倍功半。

    展开全文
  • 初始化完成后,就可以将原来的自动生成的Delay()函数改为移植好的delay_ms()函数:  点击F5运行程序:  其实当我们真正理解了STM32这些库的内在联系之后,每个人都可以成功移植。本文旨在为大家指明...

            中间由于一直在忙一些项目,所以已经有一段时间没有更新博客了。这次接着上次的话题来继续探讨用VS开发STM32的一些问题,上次是基于stm32f1来说明如何建立一个新的32工程,不清楚的可以先看一下这个:

    https://blog.csdn.net/Chen_Shaiyin/article/details/96706433

    本次我建立的是stm32f4工程,因为手里面正好在用F401的板子,所以就直接拿现成的来用了。不管用的是F4还是F1的板子,建立固件库工程都是一样的。

    我在建立完F4的工程时发现了一些问题

    可以看到输出说明asm未定义,我们可以将asm("nop")改为__asm("nop"),需要注意的是这里asm前面有两个下划线。

    一切准备工作没问题后,例程文件如下图所示:

    接下来开始将Delay()函数换成delay_ms()函数。首先随便找到一个MDK5的工程,找到里面的delay文件夹和sys文件夹,将文件夹拷贝到我们的建立的VS工程里。

    delay文件夹里有两个文件,一个源文件和一个头文件,同样sys文件夹内有类似的两个文件。

    拷贝路径可以自己选择,我拷贝到了工程文件夹下的VisualGDB文件夹中

     然后将delay和sys文件夹内的源文件加工程中,并把头文件包含进去。

    可以在解决方案资源管理器中新建一个分组,右键解决方案-》添加-》新建筛选器,这里我们可以仿照MDK5将名字改为SYSTEM

    右键SYSTEM-》添加-》现有项,然后找到自己复制到工程中的delay和sys文件夹,将delay.c和sys.c文件添加进去

     点击“添加”即可,添加完之后就会有delay.c和sys.c如下图所示:

     我们可以看到错误比较多,那是因为没有将头文件的路径包含进去。

    点击菜单栏的项目-》VisualGDB Project Properties,或者是右键解决方案-》VisualGDB Project Properties。

     找到MSBuild settings,在Include directoris中将我们的头文件包含进去

    点击绿色的+号将头文件的路径添加进去。具体怎么找,应该都有过MDK5的经验,在这里就不在这里罗嗦了:

    注意要将sys.h和delay.h都要包含进去。添加完之后一步步点击OK就行啦。

    点击“Apply”,然后点击“OK”

    可以看到,delay.c文件中的报错信息消失

     然后我们打开sys.h头文件,载文件中再包含misc.h,如下图所示:

    打开sys.c文件,可以看到一些汇编指令存在错误,如果现在生成解决方案的画会出现错误信息:

    error :  expected '(' before 'void'

    如下图所示:

    将这些指令进行修改即可,例如:

    __asm void WFI_SET(void)
    {
         WFI;
    }

    改为下面的这种格式:

    void WFI_SET(void)
    {
        __asm volatile("WFI");
    }

    将所有的更改之后如下图所示

    现在可以点击F7,生成解决方案,输出串口提示没有错误。

    到此为止,我们的文件就正式的移植完毕。

    接下来就可以再main函数所在的文件中添加上:

    #include “delay.h”

    并在main函数中进行延时函数初始化:

    delay_init(84); //如果使用的是F1的板子,初始化函数中不需要参数。

    初始化完成后,就可以将原来的自动生成的Delay()函数改为移植好的delay_ms()函数:

     点击F5运行程序:

     其实当我们真正理解了STM32这些库的内在联系之后,每个人都可以成功移植。本文旨在为大家指明一些方向。希望大家在移植时出现问题时要善于独立的解决,以后出现类似的问题才不会束手无策。其实看完这篇文章之后,可以去试着移植一些其他的东西到工程中。

    VS中的printf函数直接移植过来之后并不能直接向串口发送数据,有兴趣的可以写一个自己的printf函数来试试。或者试试不自己写的话能不能解决这个移植问题。当然我是写过自己的printf函数的,也将MDK5中的printf函数进行了成功的移植,以后的博文有空我会再为大家讲解,其实并没有那么难,只是一个串口发送函数而已。

    展开全文
  • 首说明先原子哥的延时函数没有问题。原子哥的延时函数有的是用在STM32F103中的,要看自己的开发板是那个类型。这里给出STM32F103和STM32F030...delay.h" ////////////////////////////////////////////////////...
  • Delay_ms延时函数详解

    万次阅读 多人点赞 2017-11-13 21:24:43
    void Delay_ms(unsigned int time) { unsigned char n; while(time>0) { for(n=0;n;++n) { asm("nop"); } time--; } } 在流程中加入延时函数的原因是:单片机执行命令的速度太快(如果选择1MHz的晶振...
  • 早就知道AVR的编译器有自带的延时子函数(或者说是头文件),但一直没时间一探究竟,...先说winAVR的_Delay.h_肯定是在Include文件夹下了,进去一看果然有,可打开一看,其曰:“This file has been moved to ." 在u
  • delay函数,占用了stm32的时钟ucos需要靠stm32的时钟来调度任务用裸机得delay就剥夺了ucos的时钟,所以死机ucos ii 系统应该使用OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err)函数做延时 转载于:...
  • 程序在LCD初始化过程中卡死,通过硬件调试发现卡在Delay_ms()函数,转到定义发现其为Delay_us的宏定义函数: #define Delay_ms(x) Delay_us(1000*x)//单位ms 即延迟x单位ms,转到Delay_us()函数定义: void ...
  • 首先我们先看以下代码: #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) ..
  • 【stm32】delay详解

    万次阅读 2019-10-17 15:44:52
    因为在 ucos 下 SysTick 不能再被随意更改,如果我们还想利用 SysTick 来做 delay_us 或者delay_ms 的延时,就必须想点办法了,这里我们利用的是 时钟摘取法 。以 delay_us 为例,比如 delay_us(50),在刚进入 ...
  • delay什么意思

    千次阅读 2021-05-20 04:46:17
    编程语言中文网今天精心准备的是《delay什么意思》,下面是详解!功放机上的DELAY是什么意思DELAY 延时的意思。这个是麦克风的混响延时调节,是用来调节话筒声音的间隔时间差,调节越大,间隔声就越长。功放上其他...
  • MSP430使用__delay_cycles实现延时1ms和1us

    千次阅读 2019-07-10 13:27:06
    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的 函数)以提供用户精确延时使用, 该函数原型是: __intrinsic void __delay_...
  • WebRTC音视频同步分析

    2018-10-29 10:32:17
    所以jitterbuffer总的delay时间为:int actual_delay = std::max(current_delay_ms_, min_playout_delay_ms_);jitterbuffer的细节在本文中就不再扩展。 回过头来,有了SetMinimumPlayoutDelay如何控制音画同步呢...
  • delay.h /* --------------------------------------------------------- */ // 文件名称:delay.h // 功能描述: SysTick延时函数头文件 /* --------------------------------------------------------- */ #...
  • 得到当前帧的绝对时间 =>控制current_delay_ms_在(min_playout_delay_ms_,max_playout_delay_ms_)范围内,得到actual_delay //其中min_playout_delay_ms_与音视频同步相关 =>返回当前帧绝对时间+actual_delay,即该...
  • 在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的 函数)以提供用户精确延时使用, 该函数原型是: __intrinsic void __...
  • 【STM32学习】SysTick_Init()和delay_Init()踩坑记录 第一次写博客,记录下STM32学习过程中的踩坑经历。在很多时候自认为的坑、自认为的程序Bug都是由于我自身的粗心大意导致或者对于移植的程序理解不够深刻导致的,...
  • STM32F103滴答计时器之delay函数

    千次阅读 2020-07-26 23:52:41
    void delay_us(u32 nus) { u32 ticks; u32 told,tnow,tcnt=0; u32 reload=SysTick->LOAD; ticks=nus*fac_us; tcnt=0; delay_osschedlock(); told=SysTick->VAL; ...
  • ucos II 任务切换 之 Delay()函数作用

    千次阅读 2019-06-21 15:36:06
    void delay_ms(u16 nms) {   if(OSRunning == TRUE)  {   if(nms>=fac_ms)  {  OSTimeDly(nms/fac_ms);  }  nms%=fac_ms;   }  delay_us((u32)(nms*1000)); } ---------------------  ...
  • C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用...void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592M...
  • MSP430精确延时_delay_cycles

    千次阅读 2013-05-25 21:02:29
    IAR 软件430的编译器里面我们可以利用它内部的延时子程序来实现我们想要的高精度软件延时,方法如下:  (1):将以下这段代码复制到你的.C源文件中。  ...#define delay_us(x) __delay_cy
  • 关于STM32单片机延时微妙(delay_us)函数-HAL库版 叙述 近段时间调试一个STM32带多个DS18B20传感器,发现这个传感器对时序要求特别高,而使用的固件是HAL库版的,里面没有专门微米级别的延时函数,通不过不断尝试,...
  • 原因:该函数没有在.h文件中声明 解决方法:声明即可
  • 第一句跟上面一样,计算完结果为9,然后第二句 delay_ostickspersec为ucosIII时钟节拍,delay_ostickspersec跟了半天发现最后的值是200,说明一秒钟有200个节拍,即一个节拍为1/200s,转化成us再乘以1000000,最后...
  • delay是什么意思(单片机中delay)

    千次阅读 2021-05-20 04:46:19
    DELAY 延时的意思。这个是麦克风的混响延时调节,是用来...一般延时抄1ms的程序是:void Delay(uint x) { uchar i; while(x--) { for(i=120;i>0;i--); } } 那么当袭你在别的函数中用到百Delay(10000);就是度延...
  • 正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS。 下面将delay.c函数移植到rt thread中,使用的bsp是rt thread stm32中的stm32f407-st-discovery开发板 ...
  • 【STM32】SysTick滴答定时器(delay延时函数讲解)

    万次阅读 多人点赞 2018-04-09 13:51:56
    STM32F1xx官方资料: 《Cortex-M3权威指南-中文》-第8章最后一个小节:...delay延时的相关函数在SYSTEM文件夹下的delay子文件夹,在使用delay_ms()或者delay_us()函数之前一定不要忘记先初始化delay_init()。  
  • MSP430杂谈--delay_cycles的精准延时

    千次阅读 2019-03-20 10:48:26
    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, 该函数原型是: _intrinsic void __delay...
  • #include "nrf_delay.h" 二、原函数 /** * @brief Function for delaying execution for a number of microseconds. * * @param us_time Number of microseconds to wait. */ #define nrf_delay_us(us_time) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,710
精华内容 46,284
关键字:

DELAY_MS