From 6a7b54dcc1349dae6d7393aa5a94c7b50801d4f0 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 7 Jun 2017 20:09:53 +0200 Subject: [PATCH] add eeprom stuff --- cube/output/ttt2/Inc/mxconstants.h | 2 + cube/output/ttt2/Src/main.c | 6 +-- cube/output/ttt2/Src/stm32f1xx_hal_msp.c | 9 +++- cube/output/ttt2/ttt2.ioc | 34 +++++++++------ include/mxconstants.h | 2 + my_src/eeprom.c | 55 ++++++++++++++++++++++++ my_src/eeprom.h | 18 ++++++++ src/main.c | 6 +-- src/main.c-bak | 6 +-- src/stm32f1xx_hal_msp.c | 9 +++- 10 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 my_src/eeprom.c create mode 100644 my_src/eeprom.h diff --git a/cube/output/ttt2/Inc/mxconstants.h b/cube/output/ttt2/Inc/mxconstants.h index 2a3a188..dfdc0e6 100644 --- a/cube/output/ttt2/Inc/mxconstants.h +++ b/cube/output/ttt2/Inc/mxconstants.h @@ -51,6 +51,8 @@ #define ROTARY_A_GPIO_Port GPIOB #define SWITCH_Pin GPIO_PIN_5 #define SWITCH_GPIO_Port GPIOB +#define EEPROM_CS_Pin GPIO_PIN_6 +#define EEPROM_CS_GPIO_Port GPIOB #define OLED_CS_Pin GPIO_PIN_7 #define OLED_CS_GPIO_Port GPIOB #define OLED_DC_Pin GPIO_PIN_8 diff --git a/cube/output/ttt2/Src/main.c b/cube/output/ttt2/Src/main.c index 30e84df..a64bab0 100644 --- a/cube/output/ttt2/Src/main.c +++ b/cube/output/ttt2/Src/main.c @@ -223,7 +223,7 @@ static void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOC, LED_Pin|ERROR_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : LED_Pin ERROR_Pin */ GPIO_InitStruct.Pin = LED_Pin|ERROR_Pin; @@ -237,8 +237,8 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pins : OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ - GPIO_InitStruct.Pin = OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; + /*Configure GPIO pins : EEPROM_CS_Pin OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ + GPIO_InitStruct.Pin = EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); diff --git a/cube/output/ttt2/Src/stm32f1xx_hal_msp.c b/cube/output/ttt2/Src/stm32f1xx_hal_msp.c index 4f108b0..f46cf68 100644 --- a/cube/output/ttt2/Src/stm32f1xx_hal_msp.c +++ b/cube/output/ttt2/Src/stm32f1xx_hal_msp.c @@ -140,6 +140,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO PA7 ------> SPI1_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7; @@ -147,6 +148,11 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /* USER CODE BEGIN SPI1_MspInit 1 */ /* USER CODE END SPI1_MspInit 1 */ @@ -167,9 +173,10 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO PA7 ------> SPI1_MOSI */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7); + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); } /* USER CODE BEGIN SPI1_MspDeInit 1 */ diff --git a/cube/output/ttt2/ttt2.ioc b/cube/output/ttt2/ttt2.ioc index cadc6c7..15f1e54 100644 --- a/cube/output/ttt2/ttt2.ioc +++ b/cube/output/ttt2/ttt2.ioc @@ -27,21 +27,23 @@ Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC Mcu.Pin1=PC14-OSC32_IN -Mcu.Pin10=PB4 -Mcu.Pin11=PB5 -Mcu.Pin12=PB7 -Mcu.Pin13=PB8 -Mcu.Pin14=PB9 -Mcu.Pin15=VP_SYS_VS_Systick +Mcu.Pin10=PB3 +Mcu.Pin11=PB4 +Mcu.Pin12=PB5 +Mcu.Pin13=PB6 +Mcu.Pin14=PB7 +Mcu.Pin15=PB8 +Mcu.Pin16=PB9 +Mcu.Pin17=VP_SYS_VS_Systick Mcu.Pin2=PD0-OSC_IN Mcu.Pin3=PD1-OSC_OUT Mcu.Pin4=PA0-WKUP Mcu.Pin5=PA5 -Mcu.Pin6=PA7 -Mcu.Pin7=PA13 -Mcu.Pin8=PA14 -Mcu.Pin9=PB3 -Mcu.PinsNb=16 +Mcu.Pin6=PA6 +Mcu.Pin7=PA7 +Mcu.Pin8=PA13 +Mcu.Pin9=PA14 +Mcu.PinsNb=18 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx MxCube.Version=4.16.1 @@ -64,9 +66,11 @@ PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK -PA5.Mode=TX_Only_Simplex_Unidirect_Master +PA5.Mode=Full_Duplex_Master PA5.Signal=SPI1_SCK -PA7.Mode=TX_Only_Simplex_Unidirect_Master +PA6.Mode=Full_Duplex_Master +PA6.Signal=SPI1_MISO +PA7.Mode=Full_Duplex_Master PA7.Signal=SPI1_MOSI PB3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI PB3.GPIO_Label=ROTARY_B @@ -86,6 +90,10 @@ PB5.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING PB5.GPIO_PuPd=GPIO_PULLUP PB5.Locked=true PB5.Signal=GPXTI5 +PB6.GPIOParameters=GPIO_Label +PB6.GPIO_Label=EEPROM_CS +PB6.Locked=true +PB6.Signal=GPIO_Output PB7.GPIOParameters=GPIO_Label PB7.GPIO_Label=OLED_CS PB7.Locked=true diff --git a/include/mxconstants.h b/include/mxconstants.h index 2a3a188..dfdc0e6 100644 --- a/include/mxconstants.h +++ b/include/mxconstants.h @@ -51,6 +51,8 @@ #define ROTARY_A_GPIO_Port GPIOB #define SWITCH_Pin GPIO_PIN_5 #define SWITCH_GPIO_Port GPIOB +#define EEPROM_CS_Pin GPIO_PIN_6 +#define EEPROM_CS_GPIO_Port GPIOB #define OLED_CS_Pin GPIO_PIN_7 #define OLED_CS_GPIO_Port GPIOB #define OLED_DC_Pin GPIO_PIN_8 diff --git a/my_src/eeprom.c b/my_src/eeprom.c new file mode 100644 index 0000000..6b9c20e --- /dev/null +++ b/my_src/eeprom.c @@ -0,0 +1,55 @@ +/* + * eeprom.c + * + * Created on: Jun 7, 2017 + * Author: wn + */ + +#include "eeprom.h" +#include "stm32f1xx_hal.h" + + +#define HIGH GPIO_PIN_SET +#define LOW GPIO_PIN_RESET + +extern SPI_HandleTypeDef hspi1; + + +const uint8_t EEPROM_READ = 0x03; +const uint8_t EEPROM_WRITE = 0x02; +const uint8_t EEPROM_WRDI = 0x04; +const uint8_t EEPROM_WREN = 0x06; +const uint8_t EEPROM_RDSR = 0x05; +const uint8_t EEPROM_WRSR = 0x01; + + +static void __EEPROM_CS(GPIO_PinState v) { + HAL_GPIO_WritePin(EEPROM_CS_GPIO_Port, EEPROM_CS_Pin, v); +} + +static void __HAL_SPI_Transmit_One_ByValue(SPI_HandleTypeDef *hspi, uint8_t c) { + HAL_SPI_Transmit(hspi, &c, 1, 0); +} + + +void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len) { + __EEPROM_CS(LOW); + + __HAL_SPI_Transmit_One_ByValue(&hspi1, EEPROM_WREN); + __HAL_SPI_Transmit_One_ByValue(&hspi1, EEPROM_WRITE); + HAL_SPI_Transmit(&hspi1, (uint8_t*)&addr, 2, 0); + HAL_SPI_Transmit(&hspi1, buf, len, 0); + + __EEPROM_CS(HIGH); +} + +void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len) { + __EEPROM_CS(LOW); + + __HAL_SPI_Transmit_One_ByValue(&hspi1, EEPROM_READ); + HAL_SPI_Transmit(&hspi1, (uint8_t*)&addr, 2, 0); + HAL_SPI_Receive(&hspi1, buf, len, 0); + + __EEPROM_CS(HIGH); + +} diff --git a/my_src/eeprom.h b/my_src/eeprom.h new file mode 100644 index 0000000..1b4e838 --- /dev/null +++ b/my_src/eeprom.h @@ -0,0 +1,18 @@ +/* + * eeprom.h + * + * Created on: Jun 7, 2017 + * Author: wn + */ + +#ifndef EEPROM_H_ +#define EEPROM_H_ + +#include "stm32f1xx_hal.h" + + +void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len); +void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len); + + +#endif /* EEPROM_H_ */ diff --git a/src/main.c b/src/main.c index 791cd8d..ac392b5 100644 --- a/src/main.c +++ b/src/main.c @@ -227,7 +227,7 @@ static void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOC, LED_Pin|ERROR_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : LED_Pin ERROR_Pin */ GPIO_InitStruct.Pin = LED_Pin|ERROR_Pin; @@ -241,8 +241,8 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pins : OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ - GPIO_InitStruct.Pin = OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; + /*Configure GPIO pins : EEPROM_CS_Pin OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ + GPIO_InitStruct.Pin = EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); diff --git a/src/main.c-bak b/src/main.c-bak index 30e84df..a64bab0 100644 --- a/src/main.c-bak +++ b/src/main.c-bak @@ -223,7 +223,7 @@ static void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOC, LED_Pin|ERROR_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : LED_Pin ERROR_Pin */ GPIO_InitStruct.Pin = LED_Pin|ERROR_Pin; @@ -237,8 +237,8 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pins : OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ - GPIO_InitStruct.Pin = OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; + /*Configure GPIO pins : EEPROM_CS_Pin OLED_CS_Pin OLED_DC_Pin OLED_RST_Pin */ + GPIO_InitStruct.Pin = EEPROM_CS_Pin|OLED_CS_Pin|OLED_DC_Pin|OLED_RST_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); diff --git a/src/stm32f1xx_hal_msp.c b/src/stm32f1xx_hal_msp.c index 4f108b0..f46cf68 100644 --- a/src/stm32f1xx_hal_msp.c +++ b/src/stm32f1xx_hal_msp.c @@ -140,6 +140,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO PA7 ------> SPI1_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7; @@ -147,6 +148,11 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /* USER CODE BEGIN SPI1_MspInit 1 */ /* USER CODE END SPI1_MspInit 1 */ @@ -167,9 +173,10 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO PA7 ------> SPI1_MOSI */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7); + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); } /* USER CODE BEGIN SPI1_MspDeInit 1 */