第一次实验-作业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_Delay(100);
|
}
|
||||||
|
HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
|
||||||
|
// 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…
Reference in New Issue
Block a user