STM32F7xx外设驱动2-delay(寄存器)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | //源文件 static uint32_t fac_us = 0; // us延时倍乘数 /** * @brief 初始化延迟函数 * 当使用ucos的时候,此函数会初始化ucos的时钟节拍 * SYSTICK的时钟固定为AHB时钟的1/8 * @param SYSCLK 系统时钟频率 */ void DelayPhyConfig() { HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //SysTick频率为HCLK fac_us = 216; //不论是否使用OS,fac_us都需要使用 } /** * @brief 延时nus * * @param nus 要延时的us数.值不要大于1000us */ void DelayPhyUs(uint32_t nus) { uint32_t ticks; uint32_t told, tnow, tcnt = 0; uint32_t reload = SysTick->LOAD; //LOAD的值 ticks = nus * fac_us; //需要的节拍数 told = SysTick->VAL; //刚进入时的计数器值 while (1) { tnow = SysTick->VAL; if (tnow != told) { if (tnow < told) tcnt += told - tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了. else tcnt += reload - tnow + told; told = tnow; if (tcnt >= ticks) break ; //时间超过/等于要延迟的时间,则退出. } }; } /** * @brief 延时nms * * @param nms 要延时的ms数 */ void DelayPhyMs(uint16_t nms) { uint32_t i; for (i = 0; i < nms; i++) DelayPhyUs(1000); } //头文件 /*****************************delay************************************/ void DelayPhyConfig( void ); void DelayPhyUs(uint32_t nus); void DelayPhyMs(uint16_t nms); /**********************************************************************/ |
分类:
STM32F7xx 外设
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!