diff --git a/Core/Src/Components/ILI9341.cpp b/Core/Src/Components/ILI9341.cpp index 00d05b6..ae54332 100644 --- a/Core/Src/Components/ILI9341.cpp +++ b/Core/Src/Components/ILI9341.cpp @@ -37,32 +37,50 @@ int32_t ILI9341::init() { // Wrong ID return -1; } + /* uint8_t idn[3]; errors += readReg8(0xDA, idn); errors += readReg8(0xDB, idn+1); errors += readReg8(0xDC, idn+2); - writeBuffer(0x11, nullptr, 0); + */ + errors += writeBuffer(0x11, nullptr, 0); // Sleep out vTaskDelay(5); - uint8_t buf[720]; - uint8_t pasetBuf[4]; - for(uint16_t i = 0; i<320; i++){ - pasetBuf[0] = (i>>8); - pasetBuf[1] = i; - pasetBuf[2] = 319>>8; - pasetBuf[3] = 319; - writeBuffer(0x2B, pasetBuf, 4); - for(uint32_t j = 0; j<720; j++){ - buf[j] = (j%64)<<2; - } - writeBuffer(0x2C, buf, 720); - } - writeBuffer(0x29, nullptr, 0); + /* uint32_t status; errors += readReg32(0x09, &status); - errors += hLedPwm->setDuty(1); + */ + errors += writeBuffer(0x29, nullptr, 0); // Display on + setBacklight(0); return errors; } +int32_t ILI9341::setPosition(uint16_t xPosition, uint16_t yPosition, uint16_t xSize, uint16_t ySize) { + int32_t errors = 0; + uint8_t casetBuf[4]; + casetBuf[0] = (xPosition>>8); + casetBuf[1] = xPosition; + casetBuf[2] = ((xPosition+xSize-1)>>8); + casetBuf[3] = (xPosition+xSize-1); + errors += writeBuffer(0x2A, casetBuf, 4); + uint8_t pasetBuf[4]; + pasetBuf[0] = (yPosition>>8); + pasetBuf[1] = yPosition; + pasetBuf[2] = ((yPosition+ySize-1)>>8); + pasetBuf[3] = (yPosition+ySize-1); + errors += writeBuffer(0x2B, pasetBuf, 4); + return errors; +} + +int32_t ILI9341::write(uint8_t* buffer, uint32_t length) { + return writeBuffer(0x2C, buffer, length); +} + + + +int32_t ILI9341::setBacklight(float backlight) { + return hLedPwm->setDuty(backlight); +} + // Private methods int32_t ILI9341::readReg8(uint8_t command, uint8_t* reg) { diff --git a/Core/Src/Components/ILI9341.hpp b/Core/Src/Components/ILI9341.hpp index 83f9060..7a8a479 100644 --- a/Core/Src/Components/ILI9341.hpp +++ b/Core/Src/Components/ILI9341.hpp @@ -20,6 +20,9 @@ public: ILI9341(SPI_Peripheral* hSpi, GPIO_Pin* nssPin, GPIO_Pin* hResetPin, GPIO_Pin* hDcrsPin, PWM_Pin* hLedPwm); virtual ~ILI9341(); int32_t init(); + int32_t setPosition(uint16_t xPosition, uint16_t yPosition, uint16_t xSize, uint16_t ySize); + int32_t write(uint8_t* buffer, uint32_t length); + int32_t setBacklight(float backlight); private: int32_t readReg8(uint8_t command, uint8_t* reg); int32_t readReg24(uint8_t command, uint32_t* reg); @@ -30,8 +33,8 @@ private: GPIO_Pin* hResetPin; GPIO_Pin* hDcrsPin; PWM_Pin* hLedPwm; - uint8_t txBuffer[16384]; - uint8_t rxBuffer[16384]; + uint8_t txBuffer[16]; + uint8_t rxBuffer[16]; }; #endif /* SRC_COMPONENTS_ILI9341_HPP_ */ diff --git a/Core/Src/Components/start.cpp b/Core/Src/Components/start.cpp index bb8f252..28098b6 100644 --- a/Core/Src/Components/start.cpp +++ b/Core/Src/Components/start.cpp @@ -22,16 +22,26 @@ GPIO_Pin_STM32 ledBlue(LD6_GPIO_Port, LD6_Pin); //GPIO_Pin_STM32* discoveryLedArray[4] = {&ledOrange, &ledGreen, &ledRed, &ledBlue}; BinLeds discoveryLeds((GPIO_Pin*[]){&ledOrange, &ledGreen, &ledRed, &ledBlue}, 4); -SPI_Peripheral_STM32 spi_a(&hspi5, 100); +SPI_Peripheral_STM32 spi_a(&hspi5, 1000); GPIO_Pin_STM32 displayNss(DISPLAY_NSS_GPIO_Port, DISPLAY_NSS_Pin); GPIO_Pin_STM32 displayReset(DISPLAY_RESET_GPIO_Port, DISPLAY_RESET_Pin); GPIO_Pin_STM32 displayDcrs(DISPLAY_DCRS_GPIO_Port, DISPLAY_DCRS_Pin); PWM_Pin_STM32 displayLed(&htim10, TIM_CHANNEL_1); ILI9341 display(&spi_a, &displayNss, &displayReset, &displayDcrs, &displayLed); +uint8_t buffer[19200]; + void start(){ spi_a.init(); display.init(); + display.setBacklight(1); + for(uint32_t i = 0; i<19200; i++){ + buffer[i] = 32<<2; + } + display.setPosition(0, 0, 80, 80); + display.write(buffer, 19200); + display.setPosition(0, 80, 80, 80); + display.write(buffer, 19200); for(uint32_t i=0; i<16; i++){ discoveryLeds.set(i); vTaskDelay(1000); diff --git a/Core/Src/spi.c b/Core/Src/spi.c index 5f19c6a..8d59cf9 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -79,7 +79,7 @@ void MX_SPI5_Init(void) hspi5.Init.CLKPolarity = SPI_POLARITY_LOW; hspi5.Init.CLKPhase = SPI_PHASE_1EDGE; hspi5.Init.NSS = SPI_NSS_SOFT; - hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; + hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi5.Init.TIMode = SPI_TIMODE_DISABLE; hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; diff --git a/F411VE-ILI9341.ioc b/F411VE-ILI9341.ioc index 176fdfb..8d5957e 100644 --- a/F411VE-ILI9341.ioc +++ b/F411VE-ILI9341.ioc @@ -440,8 +440,8 @@ SPI1.Direction=SPI_DIRECTION_2LINES SPI1.IPParameters=CalculateBaudRate,BaudRatePrescaler,Mode,VirtualType,Direction SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER -SPI5.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64 -SPI5.CalculateBaudRate=1.5 MBits/s +SPI5.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 +SPI5.CalculateBaudRate=6.0 MBits/s SPI5.Direction=SPI_DIRECTION_2LINES SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI5.Mode=SPI_MODE_MASTER