首页
学习
活动
专区
工具
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的函数)。

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

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

    67720

    Go语言之延迟调用函数defer

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

    13420

    STM32的IIC库函数使用误区注意

    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这个地址。 以此地址为例可以进行如下读写。

    29720

    stm32的hal之串口库函数总结复习

    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的调用。

    96760

    (四)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); // 初始化延时函数

    32920

    如果简化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

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

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

    56820

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

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

    35120

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

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

    36110

    Mybatis的延迟加载

    一、什么叫延迟加载、立即加载 1.什么是延迟加载 在真正需要使用数据时才发起查询,不用的时候不进行查询。按需加载(懒加载) 2. 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。...二、Mybatis中的延迟加载 需求: 在一对多中,当我们有一个用户,它有10个角色。 在查询用户时,用户下的角色信息应该是,什么时候使用,什么时候查询的。...在查询角色时,账户的所属用户信息应该是随着账户查询时一起查询出来。 在对应的四种表关系中: 一对多,多对一,一对一,多对多 一 对多,多对多:通常情况下我们都是采用延迟加载。...一对一延迟加载: 例:以用户和账户关系为例,查询一个账户时显示当前账户的所属用户 查询方法 1.dao层接口 public interface IAccountDao { /**...-- 一对一的关系映射:配置封装user的内容 select属性制定的内容:查询用户的唯一标识 column属性指定的内容:用户根据id时,所需要的参数值的值-->

    75610
    领券