STM32实现us延时(笔记)
普通定时器实现us延时
/*
普通定时器实现us延时
*/
void user_delaynus_tim(uint32_t nus)
{
uint16_t differ = 0xffff-nus-5;
//设置定时器2的技术初始值
__HAL_TIM_SetCounter(&htim2,differ);
//开启定时器
HAL_TIM_Base_Start(&htim2);
while( differ<0xffff-5)
{
differ = __HAL_TIM_GetCounter(&htim2);
};
//关闭定时器
HAL_TIM_Base_Stop(&htim2);
}
/*
普通定时器实现ms延时,可直接使用HAL库函数HAL_delay()
*/
void delay_ms_tim(uint16_t nms)
{
uint32_t i;
for(i=0;i<nms;i++) user_delaynus_tim(1000);
}
for循环实现延时us,用__NOP()实现
/*
for循环实现延时us
*/
void for_delay_us(uint32_t nus)
{
uint32_t Delay = nus * 168/4;
do
{
__NOP();
}
while (Delay --);
}
转载自知乎@小飞哥玩嵌入式