使用下面的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. java实现md5加密示例
  2. Bytomd 助记词恢复密钥体验指南
  3. 【caffe解读】 caffe从数学公式到代码实现1-导论
  4. 神策数据张涛:AARRR 模型面临的新挑战
  5. 阿里云ECS服务器搭建wordpress个人博客网站【详细图文教程】
  6. C++ 写时拷贝 2
  7. php基础语法知识笔记(一)
  8. mysql5.0 mac_Mac OS X下MySQL 5.0的默认连接数
  9. bzoj1036 [ZJOI2008]树的统计Count 树链剖分模板题
  10. 《30天自制操作系统》03_day_学习笔记
  11. java entry的用法_Java ZipEntry setComment()用法及代码示例
  12. 关于使用UE编辑器无法初始化ftp的问题
  13. java添加word书签,Jacob操作Word书签
  14. 能不用事务就尽量别用
  15. “梦回三国”系列总结
  16. Zigbee网络模型
  17. IM推送Android客户端SDK之智能心跳
  18. system32里的文件说明
  19. result returns more than one elements; nested exception is javax.persistence.NonUniqueResultExceptio
  20. 如何快速优化手游性能问题?从UGUI优化说起

热门文章

  1. 辞职后如何办理档案、户口、党组织关系、公积金
  2. Python实现坦克大战(TankWar)游戏
  3. CT一般扫描参数_CT扫描参数介绍(1)
  4. 基于《狂神说Java》Redis--学习笔记
  5. [python][转载]opencv-python横向纵向拼接图片
  6. studio 3T如何添加索引
  7. markdown笔记(二)—— 插入图片及调整大小
  8. 《设计模式入门》 19.命令模式
  9. 微信小程序云函数服务器,微信小程序云函数使用的几点说明
  10. 六一儿童节 | TcaplusDB祝大小朋友节日快乐