diff --git a/clock.c b/clock.c new file mode 100644 --- /dev/null +++ b/clock.c @@ -0,0 +1,26 @@ + +void SystemClock_Config(void) +{ + + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInit; + + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48; + RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + HAL_RCC_OscConfig(&RCC_OscInitStruct); + + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1); + + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; + PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); + + __SYSCFG_CLK_ENABLE(); + +} diff --git a/clock.h b/clock.h new file mode 100644 --- /dev/null +++ b/clock.h @@ -0,0 +1,6 @@ +#ifndef CLOCK_H +#define CLOCK_H + +void SystemClock_Config(void); + +#endif diff --git a/gpio.c b/gpio.c --- a/gpio.c +++ b/gpio.c @@ -25,122 +25,123 @@ void init_gpio(void) { GPIO_InitTypeDef GPIO_InitStruct; - // Enable SPI clocks - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); - - // Enable GPIO clocks - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOA, ENABLE); - - // Enable DMA clocks (Is AHB even the right thing???) - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // EMZ TODO get the right ones - - /*Configure GPIO pin : PC */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; - GPIO_Init(GPIOC, &GPIO_InitStruct); + /* GPIO Ports Clock Enable */ + __GPIOF_CLK_ENABLE(); + __GPIOA_CLK_ENABLE(); + __GPIOB_CLK_ENABLE(); - /*Configure GPIO pin : PB */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_12 - |GPIO_Pin_9; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; - GPIO_Init(GPIOB, &GPIO_InitStruct); + + ////////////////// + // PORT F // + ////////////////// + + // PORTF OUTPUT + // Configure GPIO pin : PF0 + 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); - /*Configure GPIO pin : PA */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; - GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pin : PB */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6 - |GPIO_Pin_7; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(GPIOB, &GPIO_InitStruct); - - /** SPI1 GPIO Configuration - PA5 ------> SPI1_SCK - PA7 ------> SPI1_MOSI - */ + // 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); - /*Enable or disable the AHB peripheral clock */ - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); - - /*Configure GPIO pin : PA: MOSI,SCK */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; - GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pin alternate function */ - GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); - - /*Configure GPIO pin alternate function */ - GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); - - /** SPI2 GPIO Configuration - PB13 ------> SPI2_SCK - PB14 ------> SPI2_MISO - PB15 ------> SPI2_MOSI - */ + + ////////////////// + // PORT A // + ////////////////// + + // PORT A OUTPUT + // Configure GPIO pins : PA1 PA2 PA3 PA4 + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; + 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); - /*Enable or disable the AHB peripheral clock */ - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); - - // SPI PINSSS - - /*Configure GPIO pin : PB, MOSI, SCK */ - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_15; - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; - GPIO_Init(GPIOB, &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); - GPIO_InitTypeDef GPIO_InitStruct2; - // MISO - GPIO_InitStruct2.GPIO_Pin = GPIO_Pin_14; - GPIO_InitStruct2.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStruct2.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStruct2.GPIO_Speed = GPIO_Speed_10MHz; - GPIO_Init(GPIOB, &GPIO_InitStruct2); + // SPI1 [PORTA] + // Configure GPIO pin : PA, MOSI, SCK + GPIO_InitStruct.GPIO_Pin = GPIO_PIN_7|GPIO_PIN_5; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.GPIO_PuPd = GPIO_NOPULL; + GPIO_InitStruct.GPIO_Speed = GPIO_SPEED_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + // Configure GPIO pin: PA, MISO + GPIO_InitStruct.GPIO_Pin = GPIO_PIN_6; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.GPIO_PuPd = GPIO_NOPULL; + GPIO_InitStruct.GPIO_Speed = GPIO_SPEED_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - //Configure GPIO pin alternate function - GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); - GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); - GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); - + // USB [PORTA] /** USB GPIO Configuration PA11 ------> USB_DM PA12 ------> USB_DP - */ + */ + // Configure GPIO pin : PA, D+, D- + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; + GPIO_InitStruct.Alternate = GPIO_AF1_USB; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /*Enable or disable the AHB peripheral clock */ - //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); - - //GPIO_InitTypeDef GPIO_InitStruct3; + + ////////////////// + // PORT B // + ////////////////// - /*Configure GPIO pin : PA */ - //GPIO_InitStruct3.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12; - //GPIO_InitStruct3.GPIO_Mode = GPIO_Mode_AF; - //GPIO_InitStruct3.GPIO_PuPd = GPIO_PuPd_NOPULL; - //GPIO_InitStruct3.GPIO_Speed = GPIO_Speed_10MHz; - //GPIO_InitStruct3.GPIO_OType = GPIO_OType_PP; - //GPIO_Init(GPIOA, &GPIO_InitStruct3); - //GPIO_SetBits(GPIOA, GPIO_Pin_12); // emz test - //GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_USB); - //GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_USB); + // 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 diff --git a/main.c b/main.c --- a/main.c +++ b/main.c @@ -1,10 +1,12 @@ #include "main.h" -#include "stm32f0xx_conf.h" +#include "stm32f0xx_hal.h" +#include "usb_device.h" #include "ssd1306.h" #include "config.h" #include "eeprom_min.h" #include "gpio.h" #include "spi.h" +#include "clock.h" // USB includes //#include "hw_config.h" @@ -44,6 +46,10 @@ volatile uint32_t ticks = 0; int16_t setpoint_brew = 0; int16_t setpoint_steam = 0; +// HAL Variables +SPI_HandleTypeDef hspi1; + + // State definition enum state { STATE_IDLE = 0, @@ -79,8 +85,9 @@ void save_setpoints(); int main(void) { // Init clocks - SystemInit(); - + HAL_Init(); + SystemClock_Config(); + // Init GPIO init_gpio(); @@ -97,6 +104,9 @@ int main(void) // Init SPI busses init_spi(); + // Init USB + init_usb(); + // Init OLED over SPI ssd1306_Init(); ssd1306_clearscreen(); diff --git a/spi.c b/spi.c --- a/spi.c +++ b/spi.c @@ -1,7 +1,26 @@ void init_spi(void) { - SPI_InitTypeDef SPI_InitStructure; + + SPI_HandleTypeDef hspi1; + + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLED; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLED; + HAL_SPI_Init(&hspi1); + + + /* OLD: + SPI_InitTypeDef SPI_InitStructure; // OLED IC SPI_Cmd(SPI1, DISABLE); @@ -15,7 +34,7 @@ void init_spi(void) SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); - SPI_Cmd(SPI1, ENABLE); /* Enable the SPI */ + SPI_Cmd(SPI1, ENABLE); // MAX IC @@ -30,7 +49,8 @@ void init_spi(void) SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); - SPI_Cmd(SPI2, ENABLE); /* Enable the SPI */ + SPI_Cmd(SPI2, ENABLE); + */ } // vim:softtabstop=4 shiftwidth=4 expandtab