Files @ 9294a623e8e5
Branch filter:

Location: therm/gpio.c

Ethan Zonca
Added support for both heaters and coolers as well as thermostatic control
#include "gpio.h"

// 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 GPIO
void gpio_init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;

    /* GPIO Ports Clock Enable */
  __GPIOF_CLK_ENABLE();
  __GPIOA_CLK_ENABLE();
  __GPIOB_CLK_ENABLE();
  __SPI1_CLK_ENABLE();

   
  //////////////////
  // PORT F       //
  //////////////////  
  
  // PORTF OUTPUT
  // Configure GPIO pin : PF0 [Power LED]
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  // PORTF UNUSED
  // Configure GPIO pin : PF1
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  
  //////////////////
  // PORT A       //
  //////////////////
  
  // PORT A OUTPUT
  // Configure GPIO pins : (SSR+ CS_OLED RES D/C CS_MAX)
  GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  // PORTA INPUT
  // Configure GPIO pin : PA15 
//  GPIO_InitStruct.Pin = GPIO_PIN_15;
//  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
//  GPIO_InitStruct.Pull = GPIO_PULLUP;
//  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // PORTA UNUSED
  // Configure GPIO pins : PA0 PA8
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  // USART1 [PORTA]
  // Configure GPIO pins : PA9 PA10
  GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // SPI1 [PORTA]
  // Configure GPIO pin : PA, MOSI, SCK 
  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  // Configure GPIO pin: PA, MISO
  GPIO_InitStruct.Pin = GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // USB [PORTA]

  /** USB GPIO Configuration  
  PA11   ------> USB_DM
  PA12   ------> USB_DP
  */  
  // Configure GPIO pin : PA, D+, D-
  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF2_USB; // Can also be AF5
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  
  //////////////////
  // PORT B       //
  //////////////////
  
  // PORT B UNUSED
  // Configure GPIO pins : PB0 PB1 PB8 
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  // PORT B INPUT
  // Configure GPIO pins : PB3 PB4 PB5 PB6 PB7
  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 
                          |GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);  
  
  
  // Enable DMA clocks (Is AHB even the right thing???)
  //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // EMZ TODO get the right ones


}

// vim:softtabstop=4 shiftwidth=4 expandtab