关于STM32的延时问题
最近一直在搞一辆智能小车,用STM32单片机驱动,往上面加了很多外设,外型如下:
今天下午打算在LCD显示一个温度,却发现怎么都显示不了,也找不出原因,还好我们公司的郑工帮我看出了问题,让我顺利改过来成功的显示在LCD上,毕竟比我先进公司的工程师还是要有经验一些。o(︶︿︶)o 唉,就是定时计数器少加了一个0,于是延时慢了10倍,导致温度传感器时序没有配置正确,找了一个下午。就这个问题我做下总结,在STM32中,延时的方法有两种,一种是普通延时法,用循环实现,另外一种就是嘀嗒定时器的实现方法,我们来看下网上一些大神还有野火开发板自带的杰作:
1、轮询的准确延时:
传进去1就表示1us
void Delay_us(__IO u32 nTime) { u16 i = 0 ; while(nTime--){ i = 10 ; while(i--); } }
2、嘀嗒定时器的精准延时法:
#include "bsp_SysTick.h" static __IO u32 TimingDelay; /** * @brief 启动系统滴答定时器 SysTick * @param 无 * @retval 无 */ void SysTick_Init(void) { /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ // if (SysTick_Config(SystemFrequency / 100000)) // ST3.0.0库版本 if (SysTick_Config(SystemCoreClock / 1000000)) // ST3.5.0库版本 { /* Capture error */ while (1); } //NVIC_SetPriority (SysTick_IRQn, 0); // 关闭滴答定时器 SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; } /** * @brief us延时程序,10us为一个单位 * @param * @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us * @retval 无 */ void Delay_10us(__IO u32 nTime) { TimingDelay = nTime; // 使能滴答定时器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; while(TimingDelay != 0); } /** * @brief 获取节拍程序 * @param 无 * @retval 无 * @attention 在 SysTick 中断函数 SysTick_Handler()调用 */ void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } 中断哪里要记得配置:嘀嗒定时器其实就是用了这个中断的服务函数来实现的,每几us或者nms来达到精准的延时 /** * @brief This function handles SysTick Handler. * @param None * @retval None */ void SysTick_Handler(void) { TimingDelay_Decrement(); }
由于温度控制器的时序和红外的时序不同,故我在红外的时序上用了嘀嗒定时器来操作延时计数,在温度控制器上用了普通的延时方法,这样才能让我的小车的LCD上可以显示实时温度,有点小激动,今天晚上特别特别要感谢郑工,是他帮我找出了少写了一个0的bug,万分感谢,今晚学到东西了!
接下来,我将会在小车上添加摄像头,测距模块,循迹模块,RFID模块,重力传感器模块等等,励志把它打造起来,也算是我作为一名合格的工程师的一个业余项目,加油!
关于STM32的延时问题的更多相关文章
- STM32之延时秒,毫秒,微秒
#include "delay.h" #include "stdint.h" #include "stm32f10x.h" ; //us延时 ...
- STM32 库函数 延时函数计算
- STM32学习笔记(五)——通用定时器计数延时
STM32定时器概述 STM32F40x系列总共最多有14个定时器,定时器分为三类:基本定时器.通用定时器和高级定时器.它们的都是通过计数来达到定时的目的,和51的定时器差不多,基本原理都是一样的,就 ...
- 【转】STM32 不占用定时器(包括SysTick)实现精确延时(巧用DWT)
/** ****************************************************************** * file core_delay.c * author ...
- stm32 延时函数 delay_ms 范围
void delay_us(u32 nus) { u32 temp; SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器 ...
- STM32延时函数的四种方法
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. 1.普通延时 这种延时方式应该是 ...
- WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)
一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一) 小理论 WS2812B是一种智能控制LED光源,将控制电路 ...
- STM32时钟系统之利用 systick 定时器来实现准确的延时。
本篇文章带着大家来认识一下 STM32 的时钟系统,以及利用 systick 定时器来实现一个比较准确的延时. 我们首先从时钟说起,时钟在MCU中的作用,就好比于人类的心脏一样不可或缺.STM32 的 ...
- STM32普通定时器实现延时函数
/* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1u ...
随机推荐
- Swift中集合类型indexOf(Element)提示错误的解决办法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 初学Swift,会遇到一些潜在的小问题,比如我们在某个集合对象 ...
- 多线程之Java线程阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ...
- Druid VS Antlr4
DRUID VS ANTLR4 测试方法 环境:x86_64,eclipse kepler,jdk 6 测试对象:antlr v4,druid手写sql parser模块 测试过程:分别采用单线程.多 ...
- Android项目开发填坑记-so文件引发的攻坚战
故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...
- 安卓IPC机制之Binder详解
IPC(Inter-Process Communication,跨进程通信)是指两个进程之间数据交换的过程,因此我们首先必须了解什么是进程,什么是线程. 进程:进程是正在运行的程序的实例,与程序相比, ...
- unix os下du df简单用法
转自:http://dadoneo.iteye.com/blog/984963 du命令参数详解见:http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍 ...
- Oracle采购模块中的多组织访问控制(MOAC)
1. 概述 从Release12开始启用多组织访问控制功能,将允许用户在一个单独的职责中访问一个或者多个经营单位(OU-Operation Units)的数据.这个功能允许用户在一个可共享服务的 ...
- Swift中实现Observable机制
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51917539 ...
- 【Unity Shaders】Transparency —— 使用alpha通道创建透明效果
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- android scrollview嵌套listview计算高度的问题
ScrollView中只能放一个控件,一般都放LinearLayout,orientation属性值为vertical.在LinearLayout中放需要呈现的内容.ListView也在其中,List ...