|
|
@ -15,8 +15,20 @@ void bsp_pin_init(GPIO_TypeDef *port, uint16_t pin, uint8_t mode) |
|
|
HAL_GPIO_Init(port, &GPIO_InitStruct); |
|
|
HAL_GPIO_Init(port, &GPIO_InitStruct); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void bsp_dwt_init(void) |
|
|
|
|
|
{ |
|
|
|
|
|
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // 使能 DWT
|
|
|
|
|
|
DWT->CYCCNT = 0; // 清零周期计数器
|
|
|
|
|
|
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // 使能周期计数器
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void delay_us(int nus) |
|
|
void delay_us(int nus) |
|
|
{ |
|
|
{ |
|
|
|
|
|
#ifdef USE_FREERTOS |
|
|
|
|
|
uint32_t start = DWT->CYCCNT; // 记录起始计数值
|
|
|
|
|
|
uint32_t ticks = nus * (SystemCoreClock / 1000000); // 计算需要的时钟周期数
|
|
|
|
|
|
while ((DWT->CYCCNT - start) < ticks); // 等待达到目标周期数
|
|
|
|
|
|
#else |
|
|
uint32_t ticks; |
|
|
uint32_t ticks; |
|
|
uint32_t told,tnow,tcnt=0; |
|
|
uint32_t told,tnow,tcnt=0; |
|
|
uint32_t reload=SysTick->LOAD; //LOAD的值
|
|
|
uint32_t reload=SysTick->LOAD; //LOAD的值
|
|
|
@ -33,4 +45,5 @@ void delay_us(int nus) |
|
|
if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
|
|
|
if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
|
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
|