基于STM32的Free-RT-OS的两种时基的认识以及重写ms,us级延时

FreeRTOS中实现延时1us,1ms 【代码】FreeRTOS中实现延时1us,1ms。 阅读详情

目录

两种时基

定时器重写ms和us级函数

Systick重写us ms级延时函数


两种时基

        在STM32的裸机开发中,没有操作系统这个概念,特别是在用CUBEMX配置生成项目时,默认都是选择了systick做为hal的时基。而当用了FREE RT OS时则强行绑定了systick做为其任务调度的时基。

        在操作系统中,时基被用做计数,systick是1ms一个脉冲,vTaskDelay使若任务挂起等若干内核级的函数用的就是这个。(内核封装了很多层,最终可以找到systick的中断回调就是为OS提供"心跳")

        在HAL库中,用到时基的地方,目前我在开发中还只知道在延时函数HAL_Delay() 有用到HAL库的时基。 HAL库时基的频率默认是1KHZ,1ms产生定时中断计数值加1。

在cubeMX配置TIM6作为HAL库时基时。默认生成的代码是预分频系数为系统时钟频率-1,装载为999,每1us计数值加1,1ms产生一次中断。全局维护一个u32类型的变量 utick。在中断函数中调用

 HAL_IncTick();使得utick自增1。

在以TIM6充当时基时:TIM6的初始化

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
  RCC_ClkInitTypeDef    clkconfig;
  uint32_t              uwTimclock, uwAPB1Prescaler = 0U;

  uint32_t              uwPrescalerValue = 0U;
  uint32_t              pFLatency;
  HAL_StatusTypeDef     status = HAL_OK;

  /* Enable TIM6 clock */
  __HAL_RCC_TIM6_CLK_ENABLE();

  /* Get clock configuration */
  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);

  /* Get APB1 prescaler */
  uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  /* Compute TIM6 clock */
  if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  {
    uwTimclock = HAL_RCC_GetPCLK1Freq();
  }
  else
  {
    uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  }

  /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);

  /* Initialize TIM6 */
  htim6.Instance = TIM6;

  /* Initialize TIMx peripheral as follow:
  + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  + ClockDivision = 0
  + Counter direction = Up
  */
  htim6.Init.Period = (1000000U / 1000U) - 1U;
  htim6.Init.Prescaler = uwPrescalerValue;
  htim6.Init.ClockDivision = 0;
  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

  status = HAL_TIM_Base_Init(&htim6);
  if (status == HAL_OK)
  {
    /* Start the TIM time Base generation in interrupt mode */
    status = HAL_TIM_Base_Start_IT(&htim6);
    if (status == HAL_OK)
    {
    /* Enable the TIM6 global Interrupt */
        HAL_NVIC_EnableIRQ(TIM6_IRQn);
      /* Configure the SysTick IRQ priority */
      if (TickPriority < (1UL << __NVIC_PRIO_BITS))
      {
        /* Configure the TIM IRQ priority */
        HAL_NVIC_SetPriority(TIM6_IRQn, TickPriority, 0U);
        uwTickPrio = TickPriority;
      }
      else
      {
        status = HAL_ERROR;
      }
    }
  }

 /* Return function status */
  return status;
}

HAL_Delay会至少延时1个时钟周期。

                

__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;

  /* Add a freq to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }

  while ((HAL_GetTick() - tickstart) < wait)
  {
  }
}

定时器重写ms和us级函数

delay_ms

void delay_ms(u32 ms){

    __HAL_TIM_ENABLE(&htim6);
  HAL_Delay(ms);
   __HAL_TIM_DISABLE(&htim6);
    
}

delay_us

这里更为直接,CUBEMX配置后,默认就是1MHZ的时钟频率。也就是1us计数值加1。那么可以先将计数值CNT赋值为0等待计数则大功告成。这在日常用IIC,DHT温度传感器以及一些时序中经常使用。

void  delay_us(u32 nus)
{

 
	 
     uint32_t cnt=0;
	__HAL_TIM_ENABLE(&htim6);
    __HAL_TIM_SetCounter(&htim6,0);
	while( cnt < nus){
        
       cnt=__HAL_TIM_GetCounter(&htim6);
       
    }
   
	__HAL_TIM_DISABLE(&htim6);
    
}

Systick重写us ms级延时函数

通过滴答计数值tick结合hal_delay()实现软件延时.精度比不上用上面的定时器.


void delay_ms(uint32_t ms)
{
    
   
        HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
    
        HAL_Delay(ms-1);
 
 
   
          
}

void delay_us(uint32_t us)
{
    
        HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
        HAL_Delay(us-1);
        HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
    
}

FreeRTOS的Systick和HAL时基 防止在高优先级(优先级高于Systick) 中断服务函数中调用HAL_Delay(),导致中断服务忙等待,这样任何优先级低于该中断的中断都得不到服务(低中断不能打断高中断),当然这里包括os的全部调度。 阅读详情

相关推荐

FreeRtos中us级延时如何实现

若系统有额外的硬件定时器(如STM32的TIMx定时器),可配置定时器为us级计数模式,通过定时器中断或轮询定时器计数寄存器实现延时,这种方式不依赖SysTick,可更灵活地实现us级延时,但需注意定时器资源的占用和中断处理。)通常以系统节拍(tick)为单位,最小延时精度受。配置限制,一般难以直接实现微秒(us)级延时。在FreeRTOS中,原生提供的延时函数(如。

qq_40170041的博客 150

FreeRTOS中实现精确的us级延时

在使用通讯协议来驱动外设的时候需要遵循严格的时序逻辑,往往用到微秒(us)级别的延时,在裸机编程中可以使用SysTick定时器、软件堵塞等方法来实现;但是在FreeRTOS中,SysTick定时器则是用来作为FreeRTOS系统时钟的,并且它提供的API仅能实现毫秒级别的延时,所以在网上查找资料总结了几个在FreeRTOS上运行的,可以实现us级别延时的几个方案。SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号15)。滴答中断对操作系统尤其重要。

w237838的博客 1万+

OceanOS-CM0-B10源码深度解析:Cortex-M0嵌入式RTOS内核实战

嵌入式实时操作系统(RTOS)是资源受限微控制器实现多任务协同的核心技术,其本质在于任务调度、中断管理与硬件时序的精确协同。理解RTOS需回归底层原理——从向量表初始化、SysTick滴答机制到任务控制块(TCB)栈帧构造,每一步都直面ARM Cortex-M0架构约束。OceanOS-CM0-B10作为轻量级RTOS典型代表,以仅2176行C代码实现抢占式+时间片混合调度,凸显确定性设计价值:无动态内存分配、纯静态RAM布局、汇编级启动流程,使其成为智能水表、低功耗传感等工业场景的理想选型。本文围绕该开源

weixin_34378767的博客 364

【STM32/FreeRTOS】精准延时的实现

目录 前言 SysTick定时器寄存器 裸机编程下实现 FreeRTOS中实现 前言 在使用通讯协议来驱动外设的时候需要遵循严格的时序逻辑,往往用到微秒(us)级别的延时,在裸机编程中可以使用SysTick定时器来实现;在FreeRTOS中,SysTick定时器则是用来作为FreeRTOS系统时钟的,但也可以用来做延时使用,只是与裸机编程下方式不同。 SysTick定时器寄存器 要使用SysTick定时器,首先要了解一下其相关寄存器。 裸机编程下...

chengzhou 1万+

航空发动机轴承故障诊断

《航空发动机主轴承故障诊断的挑战与HIT数据集研究》 摘要: 航空发动机主轴承作为关键部件,其可靠性直接影响飞行安全。然而,主轴承故障诊断面临信号信噪比低、传输路径复杂、故障类型多样、变工况运行等挑战。哈尔滨工业大学团队开发的HIT数据集为研究提供了真实工况下的实验数据,包含正常、内圈和外圈故障三种状态,具有高仿真度和强挑战性特点。研究表明,传统诊断方法在该数据集上准确率仅71-85%,突显了诊断难度。团队提出的ISONet新方法通过输入空间过参数化技术,将诊断准确率提升至99%以上,为航空发动机轴承故障诊

tyutwuxuan的博客 996

量化回测系统实战指南:从VectorBT到自研框架的深度解析

本文深入解析量化回测系统实战,从VectorBT和Backtesting.py的对比到自研框架miniQuant的设计与优化。探讨如何平衡速度与灵活性,解决实盘适配性问题,并提供性能调优技巧和可视化分析工具,帮助开发者构建高效可靠的量化交易系统。

weixin_28308325的博客 277

嵌入式测试实训平台:开箱即用的QEMU虚拟硬件沙盒

嵌入式测试是软硬协同验证的关键环节,其核心在于真实外设行为建模、RTOS时序一致性与自动化测试闭环。基于QEMU深度定制的虚拟硬件模型,可精准复现GPIO/UART/I2C等外设寄存器级时序与中断响应,结合pytest-embedded构建的结构化测试工作流,实现从代码编写、固件烧录、故障注入到报告生成的一站式实训。该方案显著降低学习门槛,支撑蓝桥杯等赛事真题复现、高校嵌入式教学及企业CI/CD集成,尤其适用于无物理开发板条件下的嵌入式测试入门与能力标准化交付。

weixin_33800463的博客 177

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5556

RTOS选型不再靠感觉:嵌入式内核评估套件的量化实践

在嵌入式开发中,RTOS选型往往依赖工程师的主观经验,导致项目后期隐患频出。实时操作系统的核心价值在于其任务调度能力与中断响应确定性,而任务切换时间、中断延迟、内存碎片率等指标则是衡量内核性能的关键。要科学评估不同RTOS,需要一套可量化、可复现的测试方法。通过高精度周期计数器与压力测试场景,能够准确测量内核在真实负载下的表现,从而为选型提供数据支撑。本文以Kernel RTOS Evaluation Kit为例,阐述如何从指标拆解、测试设计到报告输出,构建完整的RTOS评估体系,帮助嵌入式工程师从“凭感觉

weixin_30267785的博客 392

一文带你看懂SAP-HANA的基本架构与原理

创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥。

丷江南南的博客 5077

直击高频编程考点:字符串知识及经典算法题总结

字符串相关基本练习题总结(最长公共子串、最长回文子串、最长无重复字符子串、最小覆盖子串、字符串相乘、中文数字表达转实际数字格式等)

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

uniapp:实现APP获取陀螺仪数据、加速传感器、线性加速传感器,uniApp实时监听陀螺仪【XYZ】数据及停止监听与资源释放等功能示例源码,根据需求做功能(完美兼容Android安卓、苹果ios)

uniapp陀螺仪,uniapp加速传感器,uniapp线性加速传感器,APP陀螺仪数据,uniapp app 端获取陀螺仪数据示例代码,手机中获取陀螺仪的数据,uniApp实时获取陀螺仪xyz数据,android陀螺仪方向,获得陀螺仪传感器,处理传感器数据,停止监听与资源释放,Android使用陀螺仪,uniapp苹果ios陀螺仪,uni-app设备之(加速计,罗盘,陀螺仪)插件安卓/IOS APP提供了获取陀螺仪数据的能力,手机陀螺仪传感器获得手机自身旋转的角度,陀螺仪获取旋转角度,陀螺仪、加速度传感器

✅ 精选推荐文章 4268

FreeRtos延时函数delay_us()

函数内部tcnt 的值是累加的 ,每运行一次函数,tcnt就会加一次定时器计次个数(told-tnow)这个函数就是记录,运行while内部运行一次所需的时间,然后相加,知道大于等于我们设定的时间。tnow>told 是因为,定时器减到零,又从reload开始减。

m0_54797575的博客 3742

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

a_zxswer的博客 381

bsp_DWT_delay-FreeRTOS下us延时

进行初始化 DWT_Delay_Init(); 可以直接使用 DWT_Delay_us(1000); 需要大量使用ms延时,可自己写一个 DWT_Delay_ms(1); bsp_DWT_delay.c #include "bsp_DWT_delay.h" /** * @brief Initializes DWT_Clock_Cycle_Count for DWT_Delay_us function * @return Error DWT counter * 1: clock c

为梦奔跑的博客 2240

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32在FreeRTOS下的us延时

STM32在FreeRTOS下的us延时

weixin_44098974的博客 4100

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

3、FreeRTOS移植模板优化测试 System作为hal库维护时钟,us延时

我在移植FreeRTOS操作系统的时候,hal库的维护需要一个定时器,如果需要us级的定时器,那么又需要一个定时器,一共就需要三个定时器,这样很浪费单片机的资源,原子哥的方法很实用,一个Systick就解决了!上节,已经移植了成功了一个简单的模板,那么今天来优化一下,那么我们重新移植一下,同样使用原子哥的串口例程。............

Lim的博客 1945

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

FreeRTOS下一种Cortex-M内核中的精确延时方法DWT

FreeRTOS下一种Cortex-M内核中的精确延时方法DWT

ba_wang_mao的专栏 2164

freertos 延时函数_最近学习一下FreeRTOS,时间片

1.硬件环境 Proteus仿真环境,使用PIC单片机仿真运行代码,单片机选用了FreeRTOS源码demo里使用的PIC24FJ128GA010,搭建原理图如下所示:2软件环境 使用MPLAB V5.25编译代码。FreeRTOS版本:FreeRTOS Kernel V10.0.0 。硬件配置使用MCC生成。3.测试不同优先级下的任务调度设置任务1的优先级为3,设置任务2的优先级为2;(注意,优...

weixin_42144366的博客 843

FREERTOS使用Delay函数

FREERTOS使用Delay函数

lsAmorFati的博客 1740

STM32中微秒延时的实现方式

STM32中的微秒延时实现

weixin_45682654的博客 4555

关于STM32F1移植FreeRTOS时的delay.c问题解决

FreeRTOS.h文件在你当前项目的FreeRTOS文件的include文件中用文本格式打开1、Ctrl+F打开搜索“2、将下面的“0”变成“13、保存再重新编译就OK了。

qq_62689333的博客 2538

Freertos下微秒延时函数

使用的是M0内核的芯片,没有DWT,定时器方法也不能使用,无法驱动一些靠硬件协议的传感器。有人使用的是滴答定时器,试验了下可行,故此记录一下。有没有别的方法,求教。

随风飘零翼的博客 2125

【概念&理解】HAL库的滴答定时器HAL_Delay()函数的实现原理

每过1个周期,当前值就会往下减1,减到0时,会触发中断,会到加载值寄存器,把数值读入,从头开始计数。

m0_55251293的博客 2946
上一篇: ESP32使用AT MQTT 固件发布主题信息返回ERROR解决
下一篇: C/C++中#和##的宏以及进行“花里胡哨“的命名及其应用
昊月光华
博客等级 码龄6年 340粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值