Files
@ a710d1e0fc2a
Branch filter:
Location: therm-ng/src/gpio.c - annotation
a710d1e0fc2a
2.3 KiB
text/plain
Import from old therm: menus working
f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a a710d1e0fc2a f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d | //
// GPIO: configure general-purpose inputs/outputs
//
#include "stm32f3xx_hal.h"
#include "gpio.h"
#define CHANGE_PERIOD_MS 100
#define CHANGE_ELAPSED (HAL_GetTick() - change_time_reset) > CHANGE_PERIOD_MS
#define CHANGE_RESET change_time_reset = HAL_GetTick()
// Increase on each press, and increase at a fast rate after duration elapsed of continuously holding down... somehow...
static uint32_t change_time_reset = 0;
// Increment/decrement unsigned variable with up/down buttons
void user_input(uint16_t* to_modify)
{
if(CHANGE_ELAPSED) {
if(!HAL_GPIO_ReadPin(SW_UP) ) {
CHANGE_RESET;
(*to_modify)++;
}
else if(!HAL_GPIO_ReadPin(SW_DOWN) && (*to_modify) > 0) {
CHANGE_RESET;
(*to_modify)--;
}
}
}
// Increment/decrement signed variable with up/down buttons
void user_input_signed(int32_t* to_modify)
{
//fixme: need to cast to 16/32 bits correctly
if(CHANGE_ELAPSED) {
if(!HAL_GPIO_ReadPin(SW_UP) ) {
CHANGE_RESET;
if (*to_modify < 32768)
(*to_modify)++;
}
else if(!HAL_GPIO_ReadPin(SW_DOWN)) {
CHANGE_RESET;
if (*to_modify >= -32768)
(*to_modify)--;
}
}
}
// Initialize GPIOs
void gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// GPIO Ports Clock Enable
__GPIOA_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
__GPIOF_CLK_ENABLE();
// Configure LED GPIO pins
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = SW_A_Pin|SW_B_Pin|SW_C_Pin|SW_D_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(SW_C_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = SW_BTN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(SW_BTN_GPIO_Port, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
// Define startup State
HAL_GPIO_WritePin(LED, 0);
}
|