我不想测量一段代码运行的时间,我只想运行x秒。
#include <stdio.h>
#include <time.h>
int main()
{
clock_t t_Zero, t_Final;
double t_Diff;
int goodAttempt = 1;
while (1)
{
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == GPIO_PIN_SET) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
t_Zero = clock();
HAL_Delay(5000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
while (t_Diff < 15 && goodAttempt == 1) { // 2 * frequency * t times to blink
//i++;
int i = 0;
i++;
t_Final = clock();
t_Diff = (double)((t_Final-t_Zero)/CLOCKS_PER_SEC);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
HAL_Delay(100); /* Insert delay 100 ms (5Hz) */
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET && HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_SET) {
goodAttempt = 2;
break; // else, reset
}
}
}
现在是凌晨4:30,所以我的代码不是最好的,但是我已经在这个问题上花了几个小时,我真的找不到解决办法。
1条答案
按热度按时间zzzyeukh1#
在STM32上,此类功能的基本用法是:
使用减法进行计算是安全的,即使滴答计数翻转(uint32_t毫秒计数器每49天翻转一次)。
您的代码示例中缺少一个
}
,因此不清楚初始if
中包含哪些位。