Display write and setPosition

This commit is contained in:
2024-02-11 23:10:02 -03:00
parent 2632cc428b
commit 3d9c549b35
5 changed files with 53 additions and 22 deletions

View File

@@ -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) {

View File

@@ -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_ */

View File

@@ -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);

View File

@@ -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;

View File

@@ -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