diff --git a/cube/Core/Src/spi.c b/cube/Core/Src/spi.c index 9ad0df8..5186f53 100644 --- a/cube/Core/Src/spi.c +++ b/cube/Core/Src/spi.c @@ -80,10 +80,10 @@ void MX_SPI3_Init(void) hspi3.Init.Mode = SPI_MODE_MASTER; hspi3.Init.Direction = SPI_DIRECTION_2LINES; hspi3.Init.DataSize = SPI_DATASIZE_8BIT; - hspi3.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi3.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH; + hspi3.Init.CLKPhase = SPI_PHASE_2EDGE; hspi3.Init.NSS = SPI_NSS_SOFT; - hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi3.Init.TIMode = SPI_TIMODE_DISABLE; hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; diff --git a/cube/Makefile b/cube/Makefile index 201f89e..e7ced9b 100644 --- a/cube/Makefile +++ b/cube/Makefile @@ -1,4 +1,4 @@ -# Processed by ../tools/insertMyCode.sh +# Processed by ../tools/insertMyCode.sh ########################################################################################################################## # File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Thu Nov 19 18:53:40 CET 2020] ########################################################################################################################## @@ -36,37 +36,37 @@ BUILD_DIR = build # source ###################################### # C sources -C_SOURCES = \ -User/Src/cmdHandler.c User/Src/eeprom.c User/Src/frontend.c User/Src/logger.c User/Src/loopCtrl.c User/Src/main2.c User/Src/mbusComm.c User/Src/mbusParserExt.c User/Src/mqttComm.c User/Src/ports.c User/Src/ringbuffer.c User/Src/show.c User/Src/utils.c User/Src/wizHelper.c hottislib/PontCoopScheduler.c \ -libmbus/mbus/mbus-protocol.c \ -Core/Src/main.c \ -Core/Src/gpio.c \ -Core/Src/adc.c \ -Core/Src/spi.c \ -Core/Src/usart.c \ -Core/Src/stm32f1xx_it.c \ -Core/Src/stm32f1xx_hal_msp.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ +C_SOURCES = \ +User/Src/oled.c User/Src/cmdHandler.c User/Src/eeprom.c User/Src/frontend.c User/Src/logger.c User/Src/loopCtrl.c User/Src/main2.c User/Src/mbusComm.c User/Src/mbusParserExt.c User/Src/mqttComm.c User/Src/ports.c User/Src/ringbuffer.c User/Src/show.c User/Src/utils.c User/Src/wizHelper.c hottislib/PontCoopScheduler.c \ +libmbus/mbus/mbus-protocol.c \ +Core/Src/main.c \ +Core/Src/gpio.c \ +Core/Src/adc.c \ +Core/Src/spi.c \ +Core/Src/usart.c \ +Core/Src/stm32f1xx_it.c \ +Core/Src/stm32f1xx_hal_msp.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ Core/Src/system_stm32f1xx.c # ASM sources -ASM_SOURCES = \ +ASM_SOURCES = \ startup_stm32f103xe.s @@ -110,8 +110,8 @@ MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) AS_DEFS = # C defines -C_DEFS = \ --DUSE_HAL_DRIVER \ +C_DEFS = \ +-DUSE_HAL_DRIVER \ -DSTM32F103xE @@ -119,18 +119,18 @@ C_DEFS = \ AS_INCLUDES = # C includes -C_INCLUDES = \ --Ihottislib \ --Ipubsubc/src \ --Ilibmbus \ --IUser/Inc \ --IioLibrary_Driver/Internet/DHCP \ --IioLibrary_Driver/Ethernet \ --ICore/Inc \ --IDrivers/STM32F1xx_HAL_Driver/Inc \ --IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ --IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ --IDrivers/CMSIS/Include \ +C_INCLUDES = \ +-Ihottislib \ +-Ipubsubc/src \ +-Ilibmbus \ +-IUser/Inc \ +-IioLibrary_Driver/Internet/DHCP \ +-IioLibrary_Driver/Ethernet \ +-ICore/Inc \ +-IDrivers/STM32F1xx_HAL_Driver/Inc \ +-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ +-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ +-IDrivers/CMSIS/Include \ -IDrivers/CMSIS/Include @@ -169,17 +169,17 @@ all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET # list of objects OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) -OBJECTS += $(addprefix $(BUILD_DIR)/,w5500.a pubsubc.a) +OBJECTS += $(addprefix $(BUILD_DIR)/,w5500.a pubsubc.a) # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES))) -$(BUILD_DIR)/w5500.a: - (cd ioLibrary_Driver && $(MAKE) && cp w5500.a ../$(BUILD_DIR) && cd ..) - -$(BUILD_DIR)/pubsubc.a: - (cd pubsubc && $(MAKE) && cp pubsubc.a ../$(BUILD_DIR) && cd ..) - +$(BUILD_DIR)/w5500.a: + (cd ioLibrary_Driver && $(MAKE) && cp w5500.a ../$(BUILD_DIR) && cd ..) + +$(BUILD_DIR)/pubsubc.a: + (cd pubsubc && $(MAKE) && cp pubsubc.a ../$(BUILD_DIR) && cd ..) + $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ diff --git a/cube/User/Inc/oled-fonts.h b/cube/User/Inc/oled-fonts.h new file mode 100644 index 0000000..b0d935c --- /dev/null +++ b/cube/User/Inc/oled-fonts.h @@ -0,0 +1,226 @@ +/* + * oled-fonts.h + * + * Created on: May 29, 2017 + * Author: wn + */ + +#ifndef OLED_FONTS_H_ +#define OLED_FONTS_H_ + + +/* + * Code found at http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/ + * Thank you very much! + * Adapted from Arduino to STM32 HAL by wollud1969 + */ + + + +const unsigned char F6x8[][6] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp + { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! + { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " + { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # + { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ + { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % + { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & + { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' + { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( + { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) + { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * + { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , + { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - + { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . + { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / + { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 + { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 + { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 + { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 + { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 + { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 + { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 + { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 + { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; + { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < + { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = + { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? + { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ + { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A + { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B + { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C + { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D + { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E + { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F + { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G + { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H + { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I + { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J + { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K + { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L + { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M + { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N + { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O + { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P + { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q + { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R + { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S + { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T + { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U + { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V + { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W + { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X + { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y + { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z + { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ 91 + { 0x00, 0x02, 0x04 ,0x08, 0x10, 0x20 }, // \92 + { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] + { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ + { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ + { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' + { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a + { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b + { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c + { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d + { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e + { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f + { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g + { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h + { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i + { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j + { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k + { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l + { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m + { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n + { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o + { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p + { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q + { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r + { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s + { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t + { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u + { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v + { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w + { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x + { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y + { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines +}; + + + + + + + + +const unsigned char F8X16[]= +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 + 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1 + 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2 + 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//#3 + 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$4 + 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//%5 + 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//&6 + 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'7 + 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//(8 + 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//)9 + 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//*10 + 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+11 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//,12 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-13 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.14 + 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,///15 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//016 + 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//117 + 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//218 + 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//319 + 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//420 + 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//521 + 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//622 + 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//723 + 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//824 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//925 + 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:26 + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//;27 + 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//<28 + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//=29 + 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//>30 + 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?31 + 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@32 + 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A33 + 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B34 + 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C35 + 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D36 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E37 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F38 + 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G39 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H40 + 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I41 + 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J42 + 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K43 + 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L44 + 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M45 + 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N46 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O47 + 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P48 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q49 + 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R50 + 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S51 + 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T52 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U53 + 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V54 + 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W55 + 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X56 + 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y57 + 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z58 + 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[59 + 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\60 + 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//]61 + 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^62 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_63 + 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`64 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a65 + 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b66 + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c67 + 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d68 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e69 + 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f70 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g71 + 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h72 + 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i73 + 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j74 + 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k75 + 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l76 + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m77 + 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n78 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o79 + 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p80 + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q81 + 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r82 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s83 + 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t84 + 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//unsigned char5 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v86 + 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w87 + 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x88 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y89 + 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z90 + 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{91 + 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//|92 + 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}93 + 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~94 + +}; + + + + +#endif /* OLED_FONTS_H_ */ diff --git a/cube/User/Inc/oled.h b/cube/User/Inc/oled.h new file mode 100644 index 0000000..f1c755e --- /dev/null +++ b/cube/User/Inc/oled.h @@ -0,0 +1,37 @@ +/* + * oled.h + * + * Created on: May 29, 2017 + * Author: wn + */ + +#ifndef OLED_H_ +#define OLED_H_ + + +/* + * Code found at http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/ + * Thank you very much! + * Adapted from Arduino to STM32 HAL by wollud1969 + */ + +void oledInit(void); + +void oled_CLS(void); +void oled_Set_Pos(unsigned char x,unsigned char y);//Set the coordinate +void oled_WrDat(unsigned char data); //Write Data +void oled_P6x8Char(unsigned char x,unsigned char y,unsigned char ch); +void oled_P6x8Str(unsigned char x,unsigned char y,char ch[]); +void oled_P8x16Str(unsigned char x,unsigned char y,char ch[]); + +void oled_PrintBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bmp[]); +void oled_Fill(unsigned char dat); +//void oled_PrintValueC(unsigned char x, unsigned char y,char data); +//void oled_PrintValueI(unsigned char x, unsigned char y, int data); +//void oled_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num); +void oled_PrintEdge(void); +void oled_Cursor(unsigned char cursor_column, unsigned char cursor_row); +void oled_PrintLine(void); + + +#endif /* OLED_H_ */ diff --git a/cube/User/Src/main2.c b/cube/User/Src/main2.c index 24c674b..06bceef 100644 --- a/cube/User/Src/main2.c +++ b/cube/User/Src/main2.c @@ -19,6 +19,7 @@ #include #include #include +#include void my_setup_1() { @@ -37,6 +38,10 @@ void my_setup_2() { show(LED_GREEN, BLINK); logMsg("Application starting"); + oledInit(); + oled_P8x16Str(0, 0, "App starting"); + + eepromInit(); wizInit(); diff --git a/cube/User/Src/oled.c b/cube/User/Src/oled.c new file mode 100644 index 0000000..cb63176 --- /dev/null +++ b/cube/User/Src/oled.c @@ -0,0 +1,526 @@ +/* + * Code found at http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/ + * Thank you very much! + * Adapted from Arduino to STM32 HAL by wollud1969 + */ + +#include +#include + +#include +#include +#include + + + +#define HIGH GPIO_PIN_SET +#define LOW GPIO_PIN_RESET + + +// DO: SPI Clk, D1: SPI Data + + + + + + + + +static void __LEDPIN_RST(GPIO_PinState v) { + HAL_GPIO_WritePin(Display_RES_GPIO_Port, Display_RES_Pin, v); +} + +static void __LEDPIN_DC(GPIO_PinState v) { + HAL_GPIO_WritePin(Display_DC_GPIO_Port, Display_DC_Pin, v); +} + +static void __LEDPIN_CS(GPIO_PinState v) { + HAL_GPIO_WritePin(Display_CS_GPIO_Port, Display_CS_Pin, v); +} + +void oled_WrDat(unsigned char data) +{ + __LEDPIN_CS(LOW); + __LEDPIN_DC(HIGH); + + HAL_SPI_Transmit(&displaySpi, &data, 1, 0); + + __LEDPIN_CS(HIGH); +} +void oled_WrCmd(unsigned char cmd) +{ + __LEDPIN_CS(LOW); + __LEDPIN_DC(LOW); + + HAL_SPI_Transmit(&displaySpi, &cmd, 1, 0); + + __LEDPIN_CS(HIGH); +} +void oled_Set_Pos(unsigned char x, unsigned char y) +{ + oled_WrCmd(0xb0+y); + oled_WrCmd(((x&0xf0)>>4)|0x10); + oled_WrCmd((x&0x0f)|0x00); +} + + +void oled_Fill(unsigned char bmp_data) +{ + unsigned char y,x; + + for(y=0;y<8;y++) + { + oled_WrCmd(0xb0+y); + oled_WrCmd(0x00); + oled_WrCmd(0x10); + for(x=0;x<128;x++) + oled_WrDat(bmp_data); + } +} + + + +void oled_CLS(void) +{ + unsigned char y,x; + for(y=0;y<8;y++) + { + oled_WrCmd(0xb0+y); + oled_WrCmd(0x00); + oled_WrCmd(0x10); + for(x=0;x<128;x++) + oled_WrDat(0); + } +} + +void oled_DLY_ms(unsigned int ms) +{ + uint32_t start = HAL_GetTick(); + while (HAL_GetTick() < start + ms); +} + +void SetStartColumn(unsigned char d) +{ + oled_WrCmd(0x00+d%16); // Set Lower Column Start Address for Page Addressing Mode + // Default => 0x00 + oled_WrCmd(0x10+d/16); // Set Higher Column Start Address for Page Addressing Mode + // Default => 0x10 +} + +void SetAddressingMode(unsigned char d) +{ + oled_WrCmd(0x20); // Set Memory Addressing Mode + oled_WrCmd(d); // Default => 0x02 + // 0x00 => Horizontal Addressing Mode + // 0x01 => Vertical Addressing Mode + // 0x02 => Page Addressing Mode +} + +void SetColumnAddress(unsigned char a, unsigned char b) +{ + oled_WrCmd(0x21); // Set Column Address + oled_WrCmd(a); // Default => 0x00 (Column Start Address) + oled_WrCmd(b); // Default => 0x7F (Column End Address) +} + +void SetPageAddress(unsigned char a, unsigned char b) +{ + oled_WrCmd(0x22); // Set Page Address + oled_WrCmd(a); // Default => 0x00 (Page Start Address) + oled_WrCmd(b); // Default => 0x07 (Page End Address) +} + +void SetStartLine(unsigned char d) +{ + oled_WrCmd(0x40|d); // Set Display Start Line + // Default => 0x40 (0x00) +} + +void SetContrastControl(unsigned char d) +{ + oled_WrCmd(0x81); // Set Contrast Control + oled_WrCmd(d); // Default => 0x7F +} + +void Set_Charge_Pump(unsigned char d) +{ + oled_WrCmd(0x8D); // Set Charge Pump + oled_WrCmd(0x10|d); // Default => 0x10 + // 0x10 (0x00) => Disable Charge Pump + // 0x14 (0x04) => Enable Charge Pump +} + +void Set_Segment_Remap(unsigned char d) +{ + oled_WrCmd(0xA0|d); // Set Segment Re-Map + // Default => 0xA0 + // 0xA0 (0x00) => Column Address 0 Mapped to SEG0 + // 0xA1 (0x01) => Column Address 0 Mapped to SEG127 +} + +void Set_Entire_Display(unsigned char d) +{ + oled_WrCmd(0xA4|d); // Set Entire Display On / Off + // Default => 0xA4 + // 0xA4 (0x00) => Normal Display + // 0xA5 (0x01) => Entire Display On +} + +void Set_Inverse_Display(unsigned char d) +{ + oled_WrCmd(0xA6|d); // Set Inverse Display On/Off + // Default => 0xA6 + // 0xA6 (0x00) => Normal Display + // 0xA7 (0x01) => Inverse Display On +} + +void Set_Multiplex_Ratio(unsigned char d) +{ + oled_WrCmd(0xA8); // Set Multiplex Ratio + oled_WrCmd(d); // Default => 0x3F (1/64 Duty) +} + +void Set_Display_On_Off(unsigned char d) +{ + oled_WrCmd(0xAE|d); // Set Display On/Off + // Default => 0xAE + // 0xAE (0x00) => Display Off + // 0xAF (0x01) => Display On +} + +void SetStartPage(unsigned char d) +{ + oled_WrCmd(0xB0|d); // Set Page Start Address for Page Addressing Mode + // Default => 0xB0 (0x00) +} + +void Set_Common_Remap(unsigned char d) +{ + oled_WrCmd(0xC0|d); // Set COM Output Scan Direction + // Default => 0xC0 + // 0xC0 (0x00) => Scan from COM0 to 63 + // 0xC8 (0x08) => Scan from COM63 to 0 +} + +void Set_Display_Offset(unsigned char d) +{ + oled_WrCmd(0xD3); // Set Display Offset + oled_WrCmd(d); // Default => 0x00 +} + +void Set_Display_Clock(unsigned char d) +{ + oled_WrCmd(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency + oled_WrCmd(d); // Default => 0x80 + // D[3:0] => Display Clock Divider + // D[7:4] => Oscillator Frequency +} + +void Set_Precharge_Period(unsigned char d) +{ + oled_WrCmd(0xD9); // Set Pre-Charge Period + oled_WrCmd(d); // Default => 0x22 (2 Display Clocks [Phase 2] / 2 Display Clocks [Phase 1]) + // D[3:0] => Phase 1 Period in 1~15 Display Clocks + // D[7:4] => Phase 2 Period in 1~15 Display Clocks +} + +void Set_Common_Config(unsigned char d) +{ + oled_WrCmd(0xDA); // Set COM Pins Hardware Configuration + oled_WrCmd(0x02|d); // Default => 0x12 (0x10) + // Alternative COM Pin Configuration + // Disable COM Left/Right Re-Map +} + +void Set_VCOMH(unsigned char d) +{ + oled_WrCmd(0xDB); // Set VCOMH Deselect Level + oled_WrCmd(d); // Default => 0x20 (0.77*VCC) +} + +void Set_NOP(void) +{ + oled_WrCmd(0xE3); // Command for No Operation +} + +void oledInit(void) +{ + // LEDPIN_Init(); + // LED_PORT=0X0F; + //LED_SCLH;;; + //LED_RSTL;;; + //digitalWrite(SCL_PIN,HIGH);;; + __LEDPIN_RST(LOW); + // for(i=0;i<100;i++)asm("nop"); + oled_DLY_ms(50); + //LED_RSTH;;; + __LEDPIN_RST(HIGH); + + Set_Display_On_Off(0x00); // Display Off (0x00/0x01) + Set_Display_Clock(0x80); // Set Clock as 100 Frames/Sec + Set_Multiplex_Ratio(0x3F); // 1/64 Duty (0x0F~0x3F) + Set_Display_Offset(0x00); // Shift Mapping RAM Counter (0x00~0x3F) + SetStartLine(0x00); // Set Mapping RAM Display Start Line (0x00~0x3F) + Set_Charge_Pump(0x04); // Enable Embedded DC/DC Converter (0x00/0x04) + SetAddressingMode(0x02); // Set Page Addressing Mode (0x00/0x01/0x02) + Set_Segment_Remap(0x01); // Set SEG/Column Mapping + Set_Common_Remap(0x08); // Set COM/Row Scan Direction + Set_Common_Config(0x10); // Set Sequential Configuration (0x00/0x10) + SetContrastControl(0xCF); // Set SEG Output Current + Set_Precharge_Period(0xF1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock + Set_VCOMH(0x40); // Set VCOM Deselect Level + Set_Entire_Display(0x00); // Disable Entire Display On (0x00/0x01) + Set_Inverse_Display(0x00); // Disable Inverse Display On (0x00/0x01) + Set_Display_On_Off(0x01); // Display On (0x00/0x01) + oled_Fill(0x00); //clear all + oled_Set_Pos(0,0); +} + + +void oled_P6x8Char(unsigned char x,unsigned char y,unsigned char ch) +{ + unsigned char c=0,i=0; + + c =ch-32; + if(x>122) + { + x=0; + y++; + } + oled_Set_Pos(x,y); + for(i=0;i<6;i++) + { + oled_WrDat(F6x8[c][i]); + } +} + +void oled_P6x8Str(unsigned char x,unsigned char y,char ch[]) +{ + unsigned char c=0,i=0,j=0; + while (ch[j]!='\0') + { + c =ch[j]-32; + if(x>126) + { + x=0; + y++; + } + oled_Set_Pos(x,y); + for(i=0;i<6;i++) + { + oled_WrDat(F6x8[c][i]); + } + x+=6; + j++; + } +} + +void oled_P8x16Str(unsigned char x,unsigned char y,char ch[]) +{ + unsigned char c=0,i=0,j=0; + while (ch[j]!='\0') + { + c =ch[j]-32; + if(x>120) + { + x=0; + y++; + } + oled_Set_Pos(x,y); + for(i=0;i<8;i++) + { + oled_WrDat(F8X16[(c<<4)+i]); + } + oled_Set_Pos(x,y+1); + for(i=0;i<8;i++) + { + oled_WrDat(F8X16[(c<<4)+i+8]); + } + x+=8; + j++; + } +} + + + +void oled_PrintBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bmp[]) +{ + int ii=0; + unsigned char x,y; + for(y=y0;y<=y1;y++) + { + oled_Set_Pos(x0,y); + for(x=x0;x