Files @ 752fd27f607a
Branch filter:

Location: therm-ng/src/system/gpio.c

Ethan Zonca
Basic code cleanup
//
// GPIO: configure general-purpose inputs/outputs
//

#include "stm32f3xx_hal.h"
#include "gpio.h"


// Private variables
// 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;


// 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);

}


// 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)--;
        }
    }
}