使用下面的stopwatch_delay(ticks)来完成延迟.它使用STM32的DWT_CYCCNT寄存器,该寄存器专门用于计算位于地址0xE0001004的实际时钟周期.

要验证延迟准确性(请参阅main),您可以调用STOPWATCH_START,运行stopwatch_delay(ticks),然后调用STOPWATCH_STOP并使用CalcNanosecondsFromStopwatch(m_nStart,m_nStop)进行验证.根据需要调整刻度.

uint32_t m_nStart; //DEBUG Stopwatch start cycle counter value

uint32_t m_nStop; //DEBUG Stopwatch stop cycle counter value

#define DEMCR_TRCENA 0x01000000

/* Core Debug registers */

#define DEMCR (*((volatile uint32_t *)0xE000EDFC))

#define DWT_CTRL (*(volatile uint32_t *)0xe0001000)

#define CYCCNTENA (1<<0)

#define DWT_CYCCNT ((volatile uint32_t *)0xE0001004)

#define CPU_CYCLES *DWT_CYCCNT

#define STOPWATCH_START { m_nStart = *((volatile unsigned int *)0xE0001004);}

#define STOPWATCH_STOP { m_nStop = *((volatile unsigned int *)0xE0001004);}

static inline void stopwatch_reset(void)

{

/* Enable DWT */

DEMCR |= DEMCR_TRCENA;

*DWT_CYCCNT = 0;

/* Enable CPU cycle counter */

DWT_CTRL |= CYCCNTENA;

}

static inline uint32_t stopwatch_getticks()

{

return CPU_CYCLES;

}

static inline void stopwatch_delay(uint32_t ticks)

{

uint32_t end_ticks = ticks + stopwatch_getticks();

while(1)

{

if (stopwatch_getticks() >= end_ticks)

break;

}

}

uint32_t CalcNanosecondsFromStopwatch(uint32_t nStart, uint32_t nStop)

{

uint32_t nDiffTicks;

uint32_t nClkTicksPerMicrosec;

nDiffTicks = nStop - nStart;

nDiffTicks *= 1000; // Scale diff by 1000.

nClkTicksPerMicrosec = SystemCoreClock / 1000000; // Convert (clkTicks/sec) to (clkTicks/microsec), SystemCoreClock = 168000000

return nDiffTicks / nClkTicksPerMicrosec; // nanosec = (ticks * 1000) / (clkTicks/microsec)

}

void main(void)

{

int timeDiff = 0;

stopwatch_reset();

STOPWATCH_START;

run_my_function();

STOPWATCH_STOP;

timeDiff = CalcNanosecondsFromStopwatch(m_nStart, m_nStop);

printf("My function took %d nanoseconds\n", timeDiff);

}

stm32f103 延时20ns,在STM32上生成C中的纳秒延迟相关推荐

  1. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享

    原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...

  2. stm32硬件消抖_在 STM32 上使用 C++ 指南

    结识更多同行,共同讨论"嵌入式"技术.欢迎添加社区客服微信,备注发送"电源+公司名(学校)+职位(专业)"拉您入群. 简介 本文描述了如何使用在搭载了 RT-T ...

  3. 一个完整的DS1302时钟在STM32上的应用实例

    一个完整的DS1302时钟在STM32上的应用(代码位置有点乱). 整理后的完整代码https://blog.csdn.net/weibo1230123/article/details/8037279 ...

  4. USB应用开发笔记之一:STM32上实现USB主机读写U盘

      在项目应用中,经常会有对外交换数据的需求.USB接口读写U盘无疑是一种颇为方便的选择.在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法. 1.应用概述   在我们的产品上 ...

  5. 使用TIM3和TIM4,驱动外接LED和STM32上已焊接的LED,实现2个 LED呼吸灯的效果

    文章目录 一.PWM相关介绍 1.PWM的含义 2.PWM的基本原理 3.PWM的优点及应用范围 4.STM32上的PWM 5.PWM相关寄存器 6.PWM脉冲宽度调制 7.PWM的频率 二.实现呼吸 ...

  6. mavlink协议详解_MAVLink通讯协议在STM32上移植,并自定义协议

    mavlink全称是(Micro Air Vehicle Message Marshalling Library),从名字可以看出,mavlink是主要面向飞控的一种开源通信协议.因此它默认定义了很多 ...

  7. ChibiOS系列:二、在STM32上开发:介绍ChibiStudio

    本文翻译自:http://www.playembedded.org/blog/developing-stm32-chibistudio/ 在STM32上开发:介绍ChibiStudio 发表于 201 ...

  8. STM32上可用的的SM 2 3 4国密算法

    可在STM32上使用的国密算法 SM 2 3 4 SM2 SM3 SM4 下面直接给出代码,有问题可评论,自己改动的,测试不到的地方可能有bug,欢迎指正. SM2 由于SM2算法牵扯到一些较为复杂的 ...

  9. LVGL在STM32上的移植及触摸驱动移植(触摸屏控制版)

    前言   在日常的开发中,涉及到用户显示界面控制的时候,如何快速.优美的设计一款用户UI,是攻城狮应该具备的能力(择偶优先权),如何把嵌入式UI设计像高级语言图形化设计一样简便.快捷,今天重磅介绍一款 ...

最新文章

  1. 2021潍坊市高考成绩查询,潍坊2021高考成绩排名榜单,潍坊各高中高考成绩喜报
  2. 关于MySQLdb连接数据的使用(插入数据,删除数据,更新数据,搜索数据——前端页面完成这些对数据库的操作)
  3. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
  4. RocketMQ:NameServer路由管理源码分析
  5. c++矩阵作为函数输入变量_C++实现矩阵乘法
  6. 单片机汇编编程300例_pic单片机编程串烧,pic单片机汇编语言讲解下篇
  7. 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  8. Jenkins之Log Parse的使用
  9. 关于ORACLE MYSQL NOT IN和NOT exists需要注意的 NULL值
  10. 我的春Phone之行
  11. Python是编译运行的
  12. win10安装虚拟机vm遇到的坑
  13. mysql是如何设置候选码_求关系模式中的候选键(软考,数据库)
  14. Git操作之Untracked Files Prevent Checkout
  15. 谈谈对springboot的理解
  16. 双动道岔计算机控制系统,车站信号自动控制习题.doc
  17. 数独的生成以及解答--回溯算法c++附详细代码
  18. VQLS:变分量子算法解线性方程组
  19. Logic Pro X中文汉化版
  20. 微信小程序之图片上传 demo

热门文章

  1. PyPI--python软件仓储库
  2. 亳州学院计算机查询网址,亳州学院教务管理系统入口http://www.bzuu.edu.cn/jwc/
  3. 触摸板把计算机从休眠状态唤醒,win10笔记本盒盖唤醒后触摸板失灵的处理方法...
  4. 捕获阿里云异常日志遇到的问题
  5. 二项分布算法(伯努利实验)
  6. 阅读笔记20141202
  7. Oracle 的next_day函数详解
  8. Web漏洞-Xss跨站
  9. 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
  10. IDEA一致卡在build时间过长问题处理