源文件
- #include "bsp_phy.h"
- static uint32_t fac_us = 0; // us延时倍乘数
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] 初始化延迟函数
- * 当使用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);
- /**********************************************************************/
|