我在STM32 F407 VG开发板上工作。我需要用那个处理器设计一个产品。我的应用程序包括SHORT PRESS和LONG PRESS功能。我实现了逻辑。但我不知道问题出在哪。
我在船上使用了用户按钮。我用的是定时器6,它每隔20毫秒就会产生中断。有人可以检查代码并告诉我问题。我知道我还没加去抖动。这一点也需要补充。
目前,当我按下按钮,然后我的执行,但它只在第一,如果条件,这是短按它不处理长按。
volatile uint32_t buttonPressTime = 0;
volatile uint8_t buttonPressed = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM6_Init(void);
#define SHORT_PRESS_THRESHOLD 50 // For example, 50 milliseconds
#define LONG_PRESS_THRESHOLD 3000 // 3 seconds
int main(void)
{
HAL_Init();
SystemClock_Config();
/
MX_GPIO_Init();
MX_TIM6_Init();
HAL_TIM_Base_Start_IT(&htim6); // Start Timer 6 with interrupts enabled
/* USER CODE BEGIN WHILE */
while (1)
{
if (buttonPressed) {
if (buttonPressTime < SHORT_PRESS_THRESHOLD) {
// Handle short press
printf("Short Press");
} else if (buttonPressTime >= LONG_PRESS_THRESHOLD)
{
// Handle long press
printf("Long presss");
}
buttonPressed = 0; // Reset flag
}
}
}
Tim 6初始化
static void MX_TIM6_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim6.Instance = TIM6;
htim6.Init.Prescaler = 55;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 59999;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}
回调函数如下
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM6)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
buttonPressTime++; // Increment button press time
}
else
{
if (buttonPressTime > 0)
{
buttonPressed = 1; // Set button pressed flag
}
buttonPressTime = 0; // Reset button press time
}
}
}
我的设计应用程序基本上是控制亮度单按和打开/关闭显示使用长按按钮。长按时间应在2-3秒左右。目前,我的代码只是一个基本的代码。我稍后会添加功能。当项目的这一部分开始正常工作时。
1条答案
按热度按时间jhdbpxl91#
对我来说,无论何时设置
buttonPressed = 1
,看起来你总是设置buttonPressTime=0
所以当你测试
if (buttonPressed)
时,buttonPressTime
总是0。我会尝试一些像: