• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32中us级延时怎么做

great_CC 2020-11-05 浏览量:668
STM32中us级的延时如何做;Systick能做ms级延时;感觉TIM也只能做10us级延时,1us级延时如何实现。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

  • SYSTICK当然可以做1us延时
    void delay_us(u32 nus)
    {		
    	u32 temp;	    	 
    	SysTick->LOAD=nus*fac_us; 	//	fac_us=SystemCoreClock/8000000;								  		 
    	SysTick->VAL=0x00;        					
    	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	  
    	do
    	{
    		temp=SysTick->CTRL;
    	}while((temp&0x01)&&!(temp&(1<<16)));		   
    	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	
    	SysTick->VAL =0X00;      					 	 
    }

    虽然执行语句也有时间,但是f1主频有72MHz,所以对于1us可以忽略了
    • 发布于 2020-11-14
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:4
  • 你说的没错用嘀嗒定时器小于一定时间就有误差,因为语句自身执行需要时间,所有会大于延时时间,解决办法就是把延时参数带入函数的时候减去一个值来补偿延时函数自己执行的时间
    • 发布于2020-11-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 1us直接插NOP指令,定时器光配置+中断响应时间都要1us了
    • 发布于2020-11-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种级别的定时只能用定时器实现,但定时器进出中断需要时间,不准
    • 发布于2020-11-09
    • 举报
    • 评论 0
    • 0
    • 0

  • systick就可以做us级的延时
    • 发布于2020-11-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32中us级延时怎么做