首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STM32的不可靠延迟函数

是指在STM32单片机中使用的一种延迟函数,其延迟时间不是精确的,存在一定的误差。这种延迟函数通常是通过循环计数的方式实现的,通过循环执行一定的指令次数来实现延迟。

由于STM32单片机的时钟频率可能会受到外部因素的影响,例如温度变化、电压波动等,导致延迟函数的执行时间不稳定。因此,这种延迟函数在对延迟时间要求较高的应用场景下不适用。

在实际开发中,如果需要精确的延迟时间,可以使用定时器来实现。定时器可以根据系统时钟频率进行精确的计时,并在达到指定时间后触发中断或执行相应的操作。

对于STM32单片机的开发,推荐使用HAL库或者CubeMX工具来进行开发。这些工具提供了丰富的功能库和代码生成工具,可以简化开发流程,提高开发效率。

腾讯云提供了云计算相关的产品和服务,例如云服务器、云数据库、云存储等。这些产品可以帮助开发者快速搭建和部署应用,提供稳定可靠的云计算基础设施。具体的产品介绍和链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

go defer (go延迟函数)

go defer (go延迟函数) Go语言defer算是一个语言新特性,至少对比当今主流编程语言如此。...,这个函数执行会推迟,直到外围函数返回,或者外围函数运行到最后,或者相应goroutine panic 换句话说,每当defer执行时候,它后面的函数值(在go中函数是一个引用类型,是一等公民...这个例子诠释了上面那句话后半段 "但是函数不会被调用"  因为如果defer后面的f.Close()没有延迟执行,那么文件描述符都关闭了,就不会读取到任何内容。...因为正如我们说, defer后面的函数值和参数会被求值但是实际函数调用却要等到最后 这里函数值就是trace()返回匿名函数函数参数当然就是字符串字面值"foo()", 对trace("foo...(如果return会更新返回值变量,则会在更新后才执行defer函数)。

57030
  • Go语言之延迟调用函数defer

    写在前面的话: 在接触defer之后,觉得Go这一特性很好,有点类似于C++析构函数,不过它们却有很大不同。...主要区别点是defer实现在函数里面,作用域也是在函数里面,当函数return语句被调用之后,才会调用到这个defer声明函数。...2.到了Go之后,我发现C++这两种实现方式都不存在了,那怎么办呢?于是defer产生了,这种在普通函数return之后会调用延迟调用函数,该发挥作用了。...2)当一个函数中有多个defer函数时,它们执行顺序是先进后出。 这种处理场景,一般是有几个资源,而这些资源之间是有依赖关系。...不过也有好处,就是一旦希望对函数返回值做一些特殊操作时候,例如希望将返回值占内存很大内容写到文件里或者内存里。

    13020

    (五)STM32基础——基于库函数蜂鸣器

    上节我们介绍了一下如何点亮LED灯,写好了我们第一个代码,接下来,我们就来编写一下蜂鸣器程序,其实蜂鸣器代码与LED灯极其相似,所以如果如果理解了之前代码,蜂鸣器代码也能轻易了解...----         首先,我们要来了解一下三极管知识,因为我们蜂鸣器用到了三极管来控制,起到放大电压作用。         ...所以蜂鸣器在输入为0不响,在输入为1时候才响。 电路下面那个电阻是起到下拉作用,防止浮空状态时产生小电流使得蜂鸣器误响。        ...然后我们要初始化我们LED灯和蜂鸣器,这个地方,我们选择推挽输出,因为这样高低电平都有驱动能力,并且选择下拉输入,因为为了防止蜂鸣器一开始就乱叫不停。接下来我们就来看一下代码吧。...include "delay.h" #include "led.h" #include "beep.h" int main(void) { delay_init(168); // 初始化延时函数

    54920

    STM32IIC库函数使用误区注意

    HAL库里有很多IIC函数,比如 HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData...HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)等 这些函数参数需要使用发送器件地址...具体器件地址需要查询数据手册。很多原理图会标记出器件地址(七位地址),如果不看手册,直接使用此地址进行读写的话往往是不行。...这里地址一般使用是八位地址,IIC器件手册给一般是七位地址比如下两个图A2A1A0如果全都为0,七位地址就是1110000=0x70; 但是根据读写要将此地址左移一位,然后最低位赋值0或者...使用库函数时候要使用这两个地址,不要直接使用0x70这个地址。 以此地址为例可以进行如下读写。

    27820

    stm32hal之串口库函数总结复习

    1、串口使用方法 在hal库中,有三个串口发送函数 a、HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8...HAL_UART_Receive_IT和HAL_UART_Transmit_DMA两个函数,没有超时,说明是非阻塞式发送,基本上不会占用cpu太多资源,而且发送完成有出发中断功能。...2、串口接收也有三个函数 a、HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_...HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) HAL_UART_Receive是阻塞式接受函数...,因此不建议使用,通常在开发过程中,基本上使用HAL_UART_Receive_IT和HAL_UART_Receive_DMA两个函数 目前我使用中断接受数据,dma发送数据,基本没有问题,如果加上定时器来判断空闲

    1.1K10

    条件表达式短路求值与函数延迟求值

    延迟求值是 .NET一个很重要特性,在LISP语言,这个特性是依靠宏来完成,在C,C++,可以通过函数指针来完成,而在.NET,它是靠委托来完成。...fun 是否求值,取决于第一个参数  flag,如果它值为false,那么函数 fun 是永远都不会被求值,所以,这里函数 fun求值被推迟到了方法TestDelayFunton1 内部,而不是在参数计算时候...延迟求值很有用,它可以避免我们无谓计算,比如上面的例子,这样可以节省计算成本,假如 fun求值很耗时的话。...flag,这个功能叫做“短路”判断,“条件短路”功能正好实现了我们延迟求值”功能,因此,我们可以得到如下推论: 任何时候一个函数fun如果需要延迟求值,那么都可以表示成 一个条件表达式: (Test...上面被标记部分2个函数,等价于下面这一个函数,也就是说,TestDelayFunton1 调用变换成了 TestDelayFunton2调用。

    96360

    (四)STM32基础——基于库函数跑马灯

    51单片机也是从点LED灯开始,所以STM32也从点LED灯开始吧,但遗憾是,我这块开发板好像只有两个LED灯,但问题不大,我们就从点亮这两个LED灯开始我们学习。...,指针和枚举相应知识,如果这部分知识不太清楚同学,可以先去学习一下。...第一步定义了一个结构体,定义出来那个结构体名字其实可以任意,但是这应该是有统一约定俗成,我们就按照这个来。         ...后面的代码都是这样,唯一要注意就是,“GPIO_Pin_9 |GPIO_Pin_10;”说明我们同时选择了两个IO口。 接下来,我们来看看主程序。...include "stm32f4xx.h" #include "LED.h" #include "delay.h" int main (void) { delay_init(168); // 初始化延时函数

    32020

    (九)STM32——Systemlnit初始化函数讲解

    首先,我们需要了解一个东西,就是Systemlnit初始化函数会在main函数调用之前被执行,可以简单理解为,Systemlnit初始化函数在启动程序时在main函数之前,如下图所示:...(除此之外,本章还需要之前时钟树基础,不清楚可以去上篇文章看看)         接下来我们就正式开始介绍Systemlnit初始化函数了,先上代码,我们后面来慢慢讲解这个函数: void SystemInit...prescalers and Flash settings ----------------------------------*/ SetSysClock();         SetSysClock()函数是特别重要函数...其次,因为我使用是F407系列开发板,所以就只介绍407系列部分。...总结: Systemlnit初始化函数事情如下所示: 关闭所有的引脚 打开HSE 打开AHB以及HCLK 配置好PLL 选择PLL为系统时钟源 好了,Systemlnit初始化函数就介绍到这,希望能对大家有所帮助

    48220

    如果简化stm32中printf函数使用——首先重定向

    STM32单片机极简方法 使用宏定义 代替复杂重定向printf()函数,实现串口打印。...stm32添加串口调试 https://blog.csdn.net/dream_feng/article/details/83504862按照这个方式,添加成功。...首先在stm32中添加SWO输出功能,在uart.c中添加如下代码,作为printf重定向。...具体怎么实现SWO功能可以参考strongerHuang博客教程,这里不予重复。我在另外文章也提到过了。 第二新建 debug.h,文件名都可以自定义,不局限,然后在c文件添加该头文件。...第三,使用方式更加简洁 _MSG_DBG("i=%u\n", i++); 和printf函数一模一样,只是换了一个名称罢了。这种方法可以省去每添加一个printf都需要这么写,很费时费力。

    1.4K30

    为什么说开发者指标是不可靠

    同样,开发者会更关注简单任务,避免去解决复杂问题; 完成任务数量——这样会导致任务被分割成更小子任务。每一个问题,即使是小问题,都是作为任务提交。...例如,制造部门目标可以是提高成功通过质检杯子百分比,同时保持较低单位成本。销售主管目标可以是增加销量或提高利润率。...现在科学界也有了一些衡量工作产出和质量指标:发表论文数量、被引用次数、研究结果统计学显著性。我们可以说发表 10 篇论文科学家创造价值是发表 5 篇论文科学家两倍吗?...每个开发者工作都是独一无二。即使他们解决了相似的问题,也都是在不同环境中或使用新方法解决。 是否有新研究发现?...你可以考虑使用性能指标(如延迟或 CPU 负载)、可靠性指标(如正常运行时间)和用户行为指标(如转化率或留存率)。 但是,当你想要提高软件开发速度,不应该依赖指标,因为我们没有合适可用指标。

    35610

    go 学习笔记之解读什么是defer延迟函数

    可能是为了简化类似代码逻辑,Go 语言引入了 defer 关键字,创造了"延迟函数"概念....defer 延迟函数定义以及相关示例,相信已经讲清楚什么是 defer 延迟函数了吧?...当周围函数正常执行到到达函数体结尾时,如果发现存在延迟函数自然会逆序执行延迟函数. 当周围函数正常执行遇到return语句准备返回给调用者时,存在延迟函数时也会执行,同样满足善后清理需求....延迟函数应用场景 基本上成双成对操作都可以使用延迟函数,尤其是申请资源前后存在依赖关系时更应该使用 defer 关键字来简化处理逻辑. 下面举两个常见例子来说明延迟函数应用场景....,通过解读官方文档并配套相关代码认识了延迟函数,但是延迟函数中存在一些可能令人比较迷惑地方.

    35020
    领券