STM32精确延迟1us和1ms的函数

发布者:Huayu8888最新更新时间:2017-11-12 来源: eefocus关键字:STM32  精确延迟 手机看文章 扫描二维码
随时随地手机看文章

延迟1us:

     1 /*****************************************************
     2 * 函 数 名         : delay_us 
     3 * 函数功能          : 延时函数,延时us 
     4 * 输    入         : i 
     5 * 输    出         : 无 
     6 *******************************************************************************/ 
     7 void delay_us(u32 i) 
     8 { 
     9     u32 temp;  
    10     SysTick-LOAD=9*i;         /设置重装数值, 72MHZ时
    11     SysTick-CTRL=0X01;         /使能,减到零是无动作,采用外部时钟源
    12     SysTick-VAL=0;                /清零计数器
    13     do
    14     {   
    15         temp=SysTick-CTRL;           /读取当前倒计数值
    16     } 
    17     while((temp0x01)(!(temp(116))));     /等待时间到达
    18     SysTick-CTRL=0;    /关闭计数器
    19     SysTick-VAL=0;        /清空计数器
    20 }

    延迟1ms:

     1 /*****************************************************
     2 * 函 数 名           : delay_ms 
     3 * 函数功能           : 延时函数,延时ms 
     4 * 输    入          : i 
     5 * 输    出          : 无 
     6 ******************************************************/ 
     7 void delay_ms(u32 i) 
     8 { 
     9     u32 temp;
    10     SysTick-LOAD=9000*i;      /设置重装数值, 72MHZ时
    11     SysTick-CTRL=0X01;        /使能,减到零是无动作,采用外部时钟源
    12     SysTick-VAL=0;            /清零计数器
    13     do
    14     {
    15         temp=SysTick-CTRL;       /读取当前倒计数值
    16     }
    17     while((temp0x01)(!(temp(116))));    /等待时间到达
    18     SysTick-CTRL=0;    /关闭计数器
    19     SysTick-VAL=0;        /清空计数器
    20 }

    注意:以上两函数中间的参数u32 i不能超过1800,举例,想定时一分钟,可以通过for循环让delay_ms(1000)走60次,而不能使用delay_ms(60000),不然程序就出错了。

关键字:STM32  精确延迟 引用地址:STM32精确延迟1us和1ms的函数

上一篇:STM32入门之LED控制
下一篇:初涉STM32之浅谈时钟使能问题

推荐阅读最新更新时间:2024-03-16 15:44

工程师笔记|带有空片检测功能的STM32需注意的GPIO设计
引言 从STM32F0部分型号开始,比如STM32F04x和STM32F09x,STM32越来越多的型号具有了空片检测(Empty Check)功能。以前,STM32的启动由BOOT0和BOOT1来决定,在引入了空片检测功能之后,则在BOOT0=0的情况下,还需要分两种情况: 一是内部已经存在代码,则从用户存储区启动; 二是如果是空片,则从系统存储区启动,执行内部Bootloader。 它带来什么好处呢?客户如果是空片上板,无需对BOOT0引脚进行跳线,就可以直接使用内部Bootloader进行串口或其他通讯口进行代码烧录了,可以说非常地方便。但是,这同时为GPIO的设计带来一个非常大的风险,在电路设计时需要引起注意,做好
[单片机]
STM32的ADC输入通道配置
STM32中最多有3个ADC模块,每个模块对应的通道不完全重叠。   下图是STM32F103CDE数据手册中的总框图的左下角,图中可以看出有8个外部ADC管脚分别接到了3个ADC模块,有8个外部ADC管脚只分别接到了2个ADC模块,还有5个外部ADC管脚只接到了ADC3模块,这样总共是21个通道。      下表是这些ADC管脚与每个ADC模块的对应关系,表中可以看出ADC1还有2个内部通道,分别接到内部的温度传感器和内部的参照电压:   
[模拟电子]
<font color='red'>STM32</font>的ADC输入通道配置
STM32的USRT通讯实现
1.实现平台 两块STM开发板,杜邦线; 初始化板子上的串口; 为串口开启中断; 根据需要制定两个板子的通讯协议。 2.实现过程 2.1协议制定 在工程实践的过程中,常常需要两个板子进行通讯来实现功能。现在常常使用的通讯方法常常是CAN通信,TTL通讯,RS485通讯,RS232通讯,I2C,I2S,SPI等。UART也是一种常用的通讯方式,这种通讯方式为全双工。 制定协议时应注意以下几点: 起始符,结束符和校验位 在为制定通讯协议的时候,首先应该确定发送数据的起始符,结束符和校验位;在设置起始符,结束符的时候应该避免和发送的内容发生冲突。结束符最好可以设置多位,一般可以设置两个位作为结束符;校验位需要在结束符之前;起
[单片机]
STM32 CAN 过滤器分析小结
最近看了下STM32 CAN 通讯 其中标示符过滤器设置大有讲究。特别是你要使用ST库函数时,当过滤器工作在屏蔽模式下,并且你把屏蔽位设了1也就是标示符对应位必须全部匹配才能通过,这是由其要小心。 举个例子吧,过滤器长度为32位,模式为屏蔽模式,假如我要发送的标示符为0x1314;那过滤器设置如下 一、过滤器完全无效 接收到的标示符全部通过 0x1314 二进制码: 0000 0000 0000 0000 0001 0011 0001 0100 CAN_Filter xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx CAN_FilterMask 0000 0000 0000 0
[单片机]
STM32 模拟I2C 程序
STM32的硬件I2C不太好用,N多人深受其困扰,本人也不例外.所以干脆一不做二不休,用模拟的I2C算了,虽然速度不及硬件I2C,在一般的应用中还是不错的.帖上代码和协议分析图,造福广大受STM32的I2C困扰的朋友,哈哈!为了跟硬件I2C有所区别,本人把模拟的I2C名字写成TWI. H文件内容如下: #i nclude stm32f10x.h #ifndef _TWI_H_ #define _TWI_H_ //条件编译 1:使用软件模拟I2C #define TWI_ENABLE 1 #define TWI_SCL_0 GPIOB- BRR=GPIO_Pin_8 #define TWI_SCL_1 GPIOB- BSRR=GPI
[单片机]
STM32 AD7792驱动调试总结
调了好久,终于通了。。为什么用了一周时间这么久?主要原因是我不知道隔离模块有问题,导致一直是盲目的改代码,今天没办法,直接把隔离模块短路,一下子就读出了ID号。 7792挂在SPI2上,PB12,PB13,PB14,PB15,可我用SPI调的时候一直读出来是0XFF,以为是SPI2有问题,于是我直接抛弃SPI,用时序直接读。很好用!!! 下面是我的代码: #define SCLOCK1 GPIO_SetBits(GPIOB,GPIO_Pin_13); #define SCLOCK0 GPIO_ResetBits(GPIOB,GPIO_Pin_13); #define CS1 GPIO_SetBits(GPIOB,G
[单片机]
STM32 与 ST-Link V2仿真器 接线与烧录
TM32下载器 ST-Link V2仿真器 STM8编程器 自动升级 3.3V 5V可用 驱动下载地址:https://pan.baidu.com/s/1CM8z0W1BkYlX_Ek-iauCmw 资料下载地址:https://pan.baidu.com/s/1Mcjco71s14jlcAkVqE1-yQ 迷你ST-LINK / V2,功能与官方完全一致,支持自动升级,支持全系列STM32 SWD 和全系列 STM8 SWIM的下载和调试。 本店ST-LINK V2 八大靓点: 1、使用U盘外壳安装内部主板,携带方便,安全可靠! 2、接口定义直接在外壳上标注,一目了然,方便实用! 3、5V、3.3
[单片机]
<font color='red'>STM32</font> 与 ST-Link V2仿真器 接线与烧录
STM32简易多级菜单(数组查表法)显示方法
单片机开发中,有时会用到屏幕来显示内容,当需要逐级显示内容时,就需要使用多级菜单的形式了。 1 多级菜单 多级菜单的实现,大体分为两种设计思路: 通过双向链表实现 通过数组查表实现 总体思路都是把菜单的各个界面联系起来,可以从上级菜单跳到下级菜单,也可从下级菜单返回上级菜单。 数组查表的方式比较简单,易于理解,本篇就来使用数组查表发在STM32上实现多级菜单的显示。 2 代码实现 2.1 数组查表 首先需要定义一个结构体: typedef struct { uchar current; uchar up;//向上翻索引号 uchar down;//向下翻索引号 uchar ent
[单片机]
<font color='red'>STM32</font>简易多级菜单(数组查表法)显示方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved