- uint32_t fac_us=0;
- #define assert_param(expr) ((void)0)
- #define SysTick_CTRL_ENABLE_Pos1 0U /*!< SysTick CTRL: ENABLE Position */
- #define SysTick_CTRL_ENABLE_Msk1 (1UL << SysTick_CTRL_ENABLE_Pos1)
- void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
- {
- /* Check the parameters */
- assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
-
- if (SysTick_CLKSource == SYSTICK_CLKSOURCE_HCLK)
- {
- SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
- }
- else
- {
- SysTick->CTRL &= SYSTICK_CLKSOURCE_HCLK_DIV8;
- }
- }
- /************************************************
- 函数名称 : delay_init
- 功 能 : 延时初始化
- 参 数 : 无
- 返 回 值 : 无
- 作 者 : Mico
- *************************************************/
- void delay_init(void)
- {
- SysTick_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); //选择外部时钟 HCLK/8
- fac_us=SystemCoreClock/8000000; //为系统时钟的1/8
- }
- /************************************************
- 函数名称 : delay_us
- 功 能 : 实现微秒级别延时
- 参 数 : nus
- 返 回 值 : 无
- 作 者 : Mico
- *************************************************/
- void delay_us(uint32_t nus)
- {
-
- uint32_t temp;
- SysTick->LOAD=nus*9; //时间加载
- SysTick->VAL=0x00; //清空计数器
- SysTick->CTRL|=0x01 ; //开始倒数
- do
- {
- temp=SysTick->CTRL;
- }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
- SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk1; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
|