第一次实验-作业1:把微秒级延迟放到main里,用for循环产生10微秒。
This commit is contained in:
		
							parent
							
								
									b0ebd03d19
								
							
						
					
					
						commit
						560343cced
					
				@ -46,14 +46,14 @@ extern "C" {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Exported macro ------------------------------------------------------------*/
 | 
					/* Exported macro ------------------------------------------------------------*/
 | 
				
			||||||
/* USER CODE BEGIN EM */
 | 
					/* USER CODE BEGIN EM */
 | 
				
			||||||
 | 
					#define SYSTICKCLK 170  // Systick Frequency 170MHz
 | 
				
			||||||
/* USER CODE END EM */
 | 
					/* USER CODE END EM */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
					/* Exported functions prototypes ---------------------------------------------*/
 | 
				
			||||||
void Error_Handler(void);
 | 
					void Error_Handler(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USER CODE BEGIN EFP */
 | 
					/* USER CODE BEGIN EFP */
 | 
				
			||||||
 | 
					void delay_us(uint32_t nus);
 | 
				
			||||||
/* USER CODE END EFP */
 | 
					/* USER CODE END EFP */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Private defines -----------------------------------------------------------*/
 | 
					/* Private defines -----------------------------------------------------------*/
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,24 @@ void SystemClock_Config(void);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Private user code ---------------------------------------------------------*/
 | 
					/* Private user code ---------------------------------------------------------*/
 | 
				
			||||||
/* USER CODE BEGIN 0 */
 | 
					/* USER CODE BEGIN 0 */
 | 
				
			||||||
 | 
					void delay_us(uint32_t nus) {
 | 
				
			||||||
 | 
					  uint32_t ticks;
 | 
				
			||||||
 | 
					  uint32_t told, tnow, tcnt=0;
 | 
				
			||||||
 | 
					  uint32_t reload = SysTick->LOAD;      // LOAD的值
 | 
				
			||||||
 | 
					  ticks = nus * SYSTICKCLK;             // 需要的节拍数
 | 
				
			||||||
 | 
					  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;         // 事件超过/等于要延迟的时间,则退出
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
/* USER CODE END 0 */
 | 
					/* USER CODE END 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -104,10 +121,14 @@ int main(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    if (sSysTickTimer.bTimeOk) {
 | 
					    if (sSysTickTimer.bTimeOk) {
 | 
				
			||||||
      sSysTickTimer.bTimeOk = 0;
 | 
					      sSysTickTimer.bTimeOk = 0;
 | 
				
			||||||
      HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
 | 
					      // HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
 | 
					    HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
 | 
				
			||||||
    // HAL_Delay(100);
 | 
					    // HAL_Delay(500);
 | 
				
			||||||
 | 
					    for (int i = 0; i < 50000; i++) {
 | 
				
			||||||
 | 
					      delay_us(10); // 用for循环产生10微秒
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // delay_us(500000);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  /* USER CODE END 3 */
 | 
					  /* USER CODE END 3 */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user