From 959cfeec63cf8684ed2374dbf7d2d6dffd4af985 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 4 Aug 2023 18:50:53 +0800 Subject: [PATCH] revised spi setting --- Core/Inc/main.h | 24 +++--- Core/Inc/spi.h | 18 ++++- Core/Src/gpio.c | 14 ++-- Core/Src/main.c | 32 ++++---- Core/Src/spi.c | 24 +++--- Core/Src/stm32wlxx_it.c | 18 ++++- mlx90640/mlx90640_lcd_display.c | 4 +- mlx90640/st7789.c | 129 +++++++++++++++++++++----------- mlx90640/st7789.h | 4 +- mlx90640/stm32_hx8347d_lcd.c | 71 +++++++++++++----- mlx90640/stm32_hx8347d_lcd.h | 46 +++++++----- 11 files changed, 252 insertions(+), 132 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 88d5689..5022a59 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -84,10 +84,12 @@ void Error_Handler(void); #define USARTx_TX_Pin GPIO_PIN_2 #define USARTx_TX_GPIO_Port GPIOA +#define USE_IPS_LCD_ST7789 + /* USER CODE BEGIN Private defines */ #define VOLTAGE_DETECT_Pin GPIO_PIN_15 #define VOLTAGE_DETECT_GPIO_Port GPIOA - +#if 0 //SPI1 ST7789 #define LCD_RES_Pin GPIO_PIN_3 //ST7789, Pin-5 #define LCD_RES_GPIO_Port GPIOB @@ -103,7 +105,7 @@ void Error_Handler(void); #define LCD_TE_Pin GPIO_PIN_13 #define LCD_TE_GPIO_Port GPIOB - +#endif #define KEY1_Pin GPIO_PIN_0 #define KEY1_GPIO_Port GPIOA @@ -116,16 +118,16 @@ void Error_Handler(void); #define W25Q_CS_Pin GPIO_PIN_9 #define W25Q_CS_GPIO_Port GPIOA - -#define LCD_RST_Pin GPIO_PIN_3 -#define LCD_RST_GPIO_Port GPIOB -#define LCD_BL_Pin GPIO_PIN_8 -#define LCD_BL_GPIO_Port GPIOB -#define LCD_CS_Pin GPIO_PIN_10 -#define LCD_CS_GPIO_Port GPIOB +#if defined(USE_IPS_LCD_ST7789) +#define LCD_RST_Pin GPIO_PIN_4 +#define LCD_RST_GPIO_Port GPIOA #define LCD_DC_Pin GPIO_PIN_5 -#define LCD_DC_GPIO_Port GPIOB - +#define LCD_DC_GPIO_Port GPIOA +#define LCD_CS_Pin GPIO_PIN_6 +#define LCD_CS_GPIO_Port GPIOA +#define LCD_BL_Pin GPIO_PIN_7 +#define LCD_BL_GPIO_Port GPIOA +#endif /* USER CODE END Private defines */ #ifdef __cplusplus diff --git a/Core/Inc/spi.h b/Core/Inc/spi.h index 0d26ede..8918f71 100644 --- a/Core/Inc/spi.h +++ b/Core/Inc/spi.h @@ -29,7 +29,8 @@ extern "C" { #include "main.h" /* USER CODE BEGIN Includes */ - +/* +#if 0 #if defined(STM32WLE5xx)||defined(STM32WL55xx) #define MEMS_SPI_SCK_Pin GPIO_PIN_5 //GPIO_PIN_3 #define MEMS_SPI_SCK_GPIO_Port GPIOA //GPIOB @@ -45,7 +46,20 @@ extern "C" { #define MEMS_ENABLE_Pin GPIO_PIN_5 #define MEMS_ENABLE_GPIO_Port GPIOB #endif - +#endif +*/ +// For SPI LCD display, master transmit only +//#if defined(USE_IPS_LCD_ST7789) +#define MEMS_SPI_SCK_Pin GPIO_PIN_3 +#define MEMS_SPI_SCK_GPIO_Port GPIOB +#define MEMS_SPI_MOSI_Pin GPIO_PIN_5 +#define MEMS_SPI_MOSI_GPIO_Port GPIOB +//#define MEMS_SENSOR_INTERRUPT_Pin GPIO_PIN_8 +//#define MEMS_SENSOR_INTERRUPT_GPIO_Port GPIOA +//#define MEMS_SENSOR_INTERRUPT_EXTI_IRQn EXTI9_5_IRQn +//#define MEMS_ENABLE_Pin GPIO_PIN_5 +//#define MEMS_ENABLE_GPIO_Port GPIOB +//#endif /* USER CODE END Includes */ diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index a11d747..458fa40 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -55,12 +55,12 @@ void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ //HAL_GPIO_WritePin(GPIOA, LCD_CS_Pin|LCD_RES_Pin|W25Q_CS_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LCD_RES_GPIO_Port, LCD_RES_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LCD_BLK_GPIO_Port, LCD_BLK_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ //HAL_GPIO_WritePin(GPIOB, LCD_TE_Pin|LCD_DC_Pin|LED_Pin, GPIO_PIN_RESET); @@ -106,11 +106,11 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PBPin PBPin PBPin */ - GPIO_InitStruct.Pin = LCD_RES_Pin|LCD_BLK_Pin|LCD_DC_Pin; + GPIO_InitStruct.Pin = LCD_RST_Pin|LCD_BL_Pin|LCD_DC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); diff --git a/Core/Src/main.c b/Core/Src/main.c index d7ab22b..d29658c 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -127,28 +127,34 @@ int main(void) /* USER CODE END SysInit */ /* Initialize all configured peripherals */ - MX_GPIO_Init(); + MX_LoRaWAN_Init(); /* USER CODE BEGIN 2 */ //MX_ADC_Init(); MX_SPI_Init(); + MX_GPIO_Init(); + MX_I2C_Init(); //MX_DMA_Init(); APP_LOG(TS_OFF, VLEVEL_L, "START LCD init....\r\n"); + BSP_LCD_Init(); - MLX90640_I2CInit(); - mlx90640_display_init(); - APP_LOG(TS_OFF, VLEVEL_L, "DISPLAY ON....\r\n"); - BSP_LCD_DisplayOn(); - BSP_LCD_Clear(LCD_COLOR_YELLOW); - APP_LOG(TS_OFF, VLEVEL_L, "WIDTH = %d, HEIGHT =%d \r\n", BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); - BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_BLUE); - BSP_LCD_SetRotation(1); - APP_LOG(TS_OFF, VLEVEL_L, "WIDTH = %d, HEIGHT =%d \r\n", BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); - BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_RED); - APP_LOG(TS_OFF, VLEVEL_L, "DISPLAY LOGO....\r\n"); - BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_BLUE); + + BSP_LCD_Test(); + + MLX90640_I2CInit(); + mlx90640_display_init(); + APP_LOG(TS_OFF, VLEVEL_L, "DISPLAY ON....\r\n"); + BSP_LCD_DisplayOn(); + BSP_LCD_Clear(LCD_COLOR_YELLOW); + APP_LOG(TS_OFF, VLEVEL_L, "WIDTH = %d, HEIGHT =%d \r\n", BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); + BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_BLUE); + BSP_LCD_SetRotation(1); + APP_LOG(TS_OFF, VLEVEL_L, "WIDTH = %d, HEIGHT =%d \r\n", BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); + BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_RED); + APP_LOG(TS_OFF, VLEVEL_L, "DISPLAY LOGO....\r\n"); + BSP_LCD_DisplayStringAt(45,45,"SmarToilets",LEFT_MODE,LCD_COLOR_BLUE); while (1) { diff --git a/Core/Src/spi.c b/Core/Src/spi.c index 1f8b1db..3b594b2 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -25,8 +25,8 @@ /* USER CODE END 0 */ SPI_HandleTypeDef hspi1; -//DMA_HandleTypeDef hdma_spi1_rx; -//DMA_HandleTypeDef hdma_spi1_tx; +DMA_HandleTypeDef hdma_spi1_rx; +DMA_HandleTypeDef hdma_spi1_tx; /* SPI1 init function */ void MX_SPI_Init(void) @@ -41,16 +41,16 @@ void MX_SPI_Init(void) /* USER CODE END SPI1_Init 1 */ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.Direction = SPI_DIRECTION_1LINE; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; + hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; //SPI_BAUDRATEPRESCALER_64; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; //SPI_BAUDRATEPRESCALER_64; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; + //hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 7; //hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; //hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; if (HAL_SPI_Init(&hspi1) != HAL_OK) @@ -89,7 +89,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) * PA6 SPI1_MISO * PA7 SPI1_MOSI */ - GPIO_InitStruct.Pin = MEMS_SPI_MOSI_Pin||MEMS_SPI_MISO_Pin; //MEMS_SPI_MOSI_Pin|MEMS_CS_N_Pin|MEMS_SPI_MISO_Pin; + GPIO_InitStruct.Pin = MEMS_SPI_MOSI_Pin; //MEMS_SPI_MOSI_Pin|MEMS_CS_N_Pin|MEMS_SPI_MISO_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; @@ -102,7 +102,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(MEMS_SPI_SCK_GPIO_Port, &GPIO_InitStruct); -#if 0 +#if 1 /* SPI1 DMA Init */ /* SPI1_RX Init */ hdma_spi1_rx.Instance = DMA1_Channel2; @@ -174,10 +174,10 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) * PA6 SPI1_MISO * PA7 SPI1_MOSI */ - HAL_GPIO_DeInit(MEMS_SPI_MOSI_GPIO_Port, MEMS_SPI_MOSI_Pin|MEMS_SPI_MISO_Pin); + HAL_GPIO_DeInit(MEMS_SPI_MOSI_GPIO_Port, MEMS_SPI_MOSI_Pin); HAL_GPIO_DeInit(MEMS_SPI_SCK_GPIO_Port, MEMS_SPI_SCK_Pin); -#if 0 +#if 1 /* SPI1 DMA DeInit */ HAL_DMA_DeInit(spiHandle->hdmarx); HAL_DMA_DeInit(spiHandle->hdmatx); diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index e92bc8a..aa09bd2 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -252,7 +252,7 @@ void DMA1_Channel2_IRQHandler(void) /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */ /* USER CODE END DMA1_Channel2_IRQn 0 */ - //HAL_DMA_IRQHandler(&hdma_spi1_rx); + HAL_DMA_IRQHandler(&hdma_spi1_rx); /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */ /* USER CODE END DMA1_Channel2_IRQn 1 */ @@ -266,7 +266,7 @@ void DMA1_Channel3_IRQHandler(void) /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */ /* USER CODE END DMA1_Channel3_IRQn 0 */ - //HAL_DMA_IRQHandler(&hdma_spi1_tx); + HAL_DMA_IRQHandler(&hdma_spi1_tx); /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */ /* USER CODE END DMA1_Channel3_IRQn 1 */ @@ -286,6 +286,20 @@ void DMA1_Channel5_IRQHandler(void) /* USER CODE END DMA1_Channel5_IRQn 1 */ } +/** + * @brief This function handles SPI1 Interrupt. + */ +void SPI1_IRQHandler(void) +{ + /* USER CODE BEGIN SPI1_IRQn 0 */ + + /* USER CODE END SPI1_IRQn 0 */ + HAL_SPI_IRQHandler(&hspi1); + /* USER CODE BEGIN SPI1_IRQn 1 */ + + /* USER CODE END SPI1_IRQn 1 */ +} + /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ diff --git a/mlx90640/mlx90640_lcd_display.c b/mlx90640/mlx90640_lcd_display.c index 2d6419c..d032148 100644 --- a/mlx90640/mlx90640_lcd_display.c +++ b/mlx90640/mlx90640_lcd_display.c @@ -135,7 +135,7 @@ static void drawMeasurement(void ) { // Measure and print center temperature centerTemp = (tempValues[383 - 16] + tempValues[383 - 15] + tempValues[384 + 15] + tempValues[384 + 16]) / 4; - BSP_LCD_SetFont(&Font20); + BSP_LCD_SetFont(&Font16); memset(tempBuffer,0,sizeof(tempBuffer)); sprintf(tempBuffer,(char *)"%2.2f ",centerTemp); BSP_LCD_DisplayStringAt(88,220,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_RED); @@ -172,7 +172,7 @@ static void readTempValues(void) { APP_LOG(TS_OFF,VLEVEL_L, "\r\n\n\n"); for (uint8_t y=0; y < 24; y++) { for (uint8_t x=0; x<32; x++) { - APP_LOG(TS_OFF, VLEVEL_L, "%c ", (uint8_t)((((float)tempValues[y*32+x]- 20.0)) + 0x61)); + APP_LOG(TS_OFF, VLEVEL_L, "%c ", (uint8_t)((((float)tempValues[y*32+x]- 25.0)) + 0x30)); } APP_LOG(TS_OFF,VLEVEL_L, "\r\n"); } diff --git a/mlx90640/st7789.c b/mlx90640/st7789.c index f2d2818..4cd14eb 100644 --- a/mlx90640/st7789.c +++ b/mlx90640/st7789.c @@ -60,6 +60,7 @@ LCD_DrvTypeDef st7789v_drv = st7789v_GetLcdPixelWidth, st7789v_GetLcdPixelHeight, st7789v_DrawBitmap, + 0 }; //static uint8_t Is_st7789v_Initialized = 0; @@ -83,7 +84,19 @@ void st7789v_WriteColor(uint16_t color, uint32_t len); /** @defgroup st7789v_Private_Functions * @{ */ - +/** + * @brief Writes to the selected LCD register. + * @param LCDReg: Address of the selected register. + * @param LCDRegValue: value to write to the selected register. + * @retval None + */ +void st7789v_WriteRegCmd(uint8_t LCDReg) +{ + LCD_DC_LOW(); + LCD_IO_WriteReg(LCDReg); + LCD_DC_HIGH(); +} + /** * @brief Writes to the selected LCD register. * @param LCDReg: Address of the selected register. @@ -92,8 +105,10 @@ void st7789v_WriteColor(uint16_t color, uint32_t len); */ void st7789v_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue) { + LCD_DC_LOW(); LCD_IO_WriteReg(LCDReg); LCD_IO_WriteMultipleData(&LCDRegValue, 1); + LCD_DC_HIGH(); } /** @@ -106,72 +121,88 @@ void st7789v_Init(void) /* Initialize st7789v low level bus layer -----------------------------------*/ LCD_IO_Init(); - /* Out of sleep mode, 0 args, no delay */ - st7789v_WriteReg(0x11, 0x00); - /**/ - LCD_Delay(10); - st7789v_WriteReg(0x36, 0x00); - st7789v_WriteReg(0x3A, 0x55); + //LCD_CS_HIGH(); + + LCD_RST_LOW(); + HAL_Delay(10); + LCD_RST_HIGH(); + HAL_Delay(10); + + LCD_BL_ON(); + HAL_Delay(100); + /* Out of sleep mode, 0 args, no delay */ + st7789v_WriteRegCmd(0x11); + HAL_Delay(120); + + st7789v_WriteRegCmd(0x36); + if (st7789v_rotation ==0) st7789v_WriteRegCmd(0x00); + else if (st7789v_rotation ==1) st7789v_WriteRegCmd(0xC0); + if (st7789v_rotation ==2) st7789v_WriteRegCmd(0x70); + else st7789v_WriteRegCmd(0xA0); + st7789v_WriteReg(0x3A, 0x05); // 16bit color + + // porch control st7789v_WriteReg(0xB2, 0x0C); st7789v_WriteReg(0xB2, 0x0C); st7789v_WriteReg(0xB2, 0x00); st7789v_WriteReg(0xB2, 0x33); st7789v_WriteReg(0xB2, 0x33); + + st7789v_WriteReg(0xB7, 0x35); //VGH=13.26V, VGL=-10.43V - st7789v_WriteReg(0xBB, 0x28); //VCOM + st7789v_WriteReg(0xBB, 0x32); //VCOM - st7789v_WriteReg(0xC0, 0x3C); - st7789v_WriteReg(0xC2, 0x01); - st7789v_WriteReg(0xC3, 0x0B); //VAP //5V + st7789v_WriteReg(0xC2, 0x01); //VDV VRH enable - st7789v_WriteReg(0xC4, 0x20); + st7789v_WriteReg(0xC3, 0x15); //VAP //5V - st7789v_WriteReg(0xC6, 0x0F); + st7789v_WriteReg(0xC4, 0x20); //VDV - st7789v_WriteReg(0xD0, 0xA4); + st7789v_WriteReg(0xC6, 0x0F); //Frame rate, 60hz + + st7789v_WriteReg(0xD0, 0xA4); //power control st7789v_WriteReg(0xD0, 0xA1); st7789v_WriteReg(0xE0, 0xD0); - st7789v_WriteReg(0xE0, 0x01); st7789v_WriteReg(0xE0, 0x08); - st7789v_WriteReg(0xE0, 0x0f); - st7789v_WriteReg(0xE0, 0x11); - st7789v_WriteReg(0xE0, 0x2a); - st7789v_WriteReg(0xE0, 0x36); - st7789v_WriteReg(0xE0, 0x55); - st7789v_WriteReg(0xE0, 0x44); - st7789v_WriteReg(0xE0, 0x3a); - st7789v_WriteReg(0xE0, 0x0b); - st7789v_WriteReg(0xE0, 0x06); - st7789v_WriteReg(0xE0, 0x11); - st7789v_WriteReg(0xE0, 0x20); + st7789v_WriteReg(0xE0, 0x0E); + st7789v_WriteReg(0xE0, 0x09); + st7789v_WriteReg(0xE0, 0x09); + st7789v_WriteReg(0xE0, 0x05); + st7789v_WriteReg(0xE0, 0x31); + st7789v_WriteReg(0xE0, 0x33); + st7789v_WriteReg(0xE0, 0x48); + st7789v_WriteReg(0xE0, 0x17); + st7789v_WriteReg(0xE0, 0x14); + st7789v_WriteReg(0xE0, 0x15); + st7789v_WriteReg(0xE0, 0x31); + st7789v_WriteReg(0xE0, 0x34); st7789v_WriteReg(0xE1, 0xD0); - st7789v_WriteReg(0xE1, 0x02); - st7789v_WriteReg(0xE1, 0x07); - st7789v_WriteReg(0xE1, 0x0A); - st7789v_WriteReg(0xE1, 0x0b); - st7789v_WriteReg(0xE1, 0x18); - st7789v_WriteReg(0xE1, 0x34); - st7789v_WriteReg(0xE1, 0x43); - st7789v_WriteReg(0xE1, 0x4a); - st7789v_WriteReg(0xE1, 0x2b); - st7789v_WriteReg(0xE1, 0x1b); - st7789v_WriteReg(0xE1, 0x1c); - st7789v_WriteReg(0xE1, 0x22); - st7789v_WriteReg(0xE1, 0x1f); + st7789v_WriteReg(0xE1, 0x08); + st7789v_WriteReg(0xE1, 0x0E); + st7789v_WriteReg(0xE1, 0x09); + st7789v_WriteReg(0xE1, 0x09); + st7789v_WriteReg(0xE1, 0x05); + st7789v_WriteReg(0xE1, 0x33); + st7789v_WriteReg(0xE1, 0x48); + st7789v_WriteReg(0xE1, 0x17); + st7789v_WriteReg(0xE1, 0x14); + st7789v_WriteReg(0xE1, 0x15); + st7789v_WriteReg(0xE1, 0x31); + st7789v_WriteReg(0xE1, 0x34); - st7789v_WriteReg(0x55,0xb0); - st7789v_WriteReg(0x29,0x00); + st7789v_WriteRegCmd(0x21); + st7789v_WriteRegCmd(0x29); } /** @@ -181,14 +212,14 @@ void st7789v_Init(void) */ void st7789v_DisplayOn(void) { -// uint8_t data = 0; + uint8_t data = 0; LCD_IO_WriteReg(0x13);/* Partial off (Normal): NORON */ LCD_Delay(10); LCD_IO_WriteReg(0x29);/* Display on: DISPON */ LCD_Delay(10); -// LCD_IO_WriteReg(0x36);/* Memory data access control: MADCTL */ -// data = 0xC0; -// LCD_IO_WriteMultipleData(&data, 1); + LCD_IO_WriteReg(0x36);/* Memory data access control: MADCTL */ + data = 0xC0; + LCD_IO_WriteMultipleData(&data, 1); } /** @@ -453,6 +484,7 @@ void st7789_SetRotation(uint8_t rotation) case 0: /* Memory access control: MY = 0, MX = 0, MV = 0, ML = 0 */ /* */ +#if 0 st7789v_WriteReg(0X36, 0x08); st7789v_WriteReg(0x2A, 0x00); st7789v_WriteReg(0x2A, 0x00); @@ -462,11 +494,13 @@ void st7789_SetRotation(uint8_t rotation) st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0x01); st7789v_WriteReg(0x2B, 0x3F); +#endif st7789v_height = ST7789V_LCD_PIXEL_HEIGHT; st7789v_width = ST7789V_LCD_PIXEL_WIDTH; break; case 1: /* Memory access control: MY = 0, MX = 1, MV = 1, ML = 0 */ +#if 0 st7789v_WriteReg(0X36, 0x68); st7789v_WriteReg(0x2A, 0x00); st7789v_WriteReg(0x2A, 0x00); @@ -476,11 +510,13 @@ void st7789_SetRotation(uint8_t rotation) st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0xEF); +#endif st7789v_height = ST7789V_LCD_PIXEL_WIDTH; st7789v_width = ST7789V_LCD_PIXEL_HEIGHT; break; case 2: /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */ +#if 0 st7789v_WriteReg(0X36, 0xC8); st7789v_WriteReg(0x2A, 0x00); st7789v_WriteReg(0x2A, 0x00); @@ -490,11 +526,13 @@ void st7789_SetRotation(uint8_t rotation) st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0x01); st7789v_WriteReg(0x2B, 0x3F); +#endif st7789v_height = ST7789V_LCD_PIXEL_HEIGHT; st7789v_width = ST7789V_LCD_PIXEL_WIDTH; break; case 3: /* Memory access control: MY = 1, MX = 0, MV = 1, ML = 0 */ +#if 0 st7789v_WriteReg(0X36, 0xA8); st7789v_WriteReg(0x2A, 0x00); st7789v_WriteReg(0x2A, 0x00); @@ -504,6 +542,7 @@ void st7789_SetRotation(uint8_t rotation) st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0x00); st7789v_WriteReg(0x2B, 0xEF); +#endif st7789v_height = ST7789V_LCD_PIXEL_WIDTH; st7789v_width = ST7789V_LCD_PIXEL_HEIGHT; break; diff --git a/mlx90640/st7789.h b/mlx90640/st7789.h index 97fde80..5aa33f6 100644 --- a/mlx90640/st7789.h +++ b/mlx90640/st7789.h @@ -77,12 +77,12 @@ uint16_t st7789v_ReadID(void); void st7789v_DisplayOn(void); void st7789v_DisplayOff(void); void st7789v_SetCursor(uint16_t Xpos, uint16_t Ypos); -void st7789_SetRotation(uint8_t rotation); +void st7789_SetRotation(uint8_t rotation); void st7789v_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode); void st7789v_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue); uint8_t st7789v_ReadReg(uint8_t LCDReg); void st7789v_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void st7789v_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint16_t RGBCode); +void st7789v_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint16_t RGBCode); void st7789v_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); void st7789v_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); diff --git a/mlx90640/stm32_hx8347d_lcd.c b/mlx90640/stm32_hx8347d_lcd.c index fa7c768..664607b 100644 --- a/mlx90640/stm32_hx8347d_lcd.c +++ b/mlx90640/stm32_hx8347d_lcd.c @@ -43,12 +43,13 @@ EndDependencies */ #include "spi.h" #include "stm32_hx8347d_lcd.h" #include "Fonts/fonts.h" -#include "Fonts/font24.c" -#include "Fonts/font20.c" +//#include "Fonts/font24.c" +//#include "Fonts/font20.c" #include "Fonts/font16.c" -#include "Fonts/font12.c" -#include "Fonts/font8.c" +//#include "Fonts/font12.c" +//#include "Fonts/font8.c" #include "sys_app.h" +//#include "pic.h" /** @addtogroup BSP * @{ */ @@ -146,7 +147,7 @@ uint8_t BSP_LCD_Init(void) /* Default value for draw propriety */ DrawProp.BackColor = 0xFFFF; - DrawProp.pFont = &Font24; + DrawProp.pFont = &Font16; DrawProp.TextColor = 0x0000; // lcd_drv = &hx8347d_drv; @@ -263,7 +264,7 @@ sFONT *BSP_LCD_GetFont(void) } /** - * @brief Clears the hole LCD. + * @brief Clears the Whole LCD. * @param Color: Color of the background * @retval None */ @@ -1183,7 +1184,7 @@ void LCD_IO_Init(void) LCD_CS_GPIO_CLK_ENABLE(); LCD_DC_GPIO_CLK_ENABLE(); - /* Configure LCD_CS_PIN pin: LCD Card CS pin */ + /* Configure LCD_CS_PIN pin: LCD CS pin */ gpioinitstruct.Pin = LCD_CS_PIN; gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP; gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH; @@ -1211,11 +1212,11 @@ void LCD_IO_WriteReg(uint8_t LCDReg) LCD_CS_LOW(); /* Set LCD data/command line DC to Low */ - LCD_DC_LOW(); + //LCD_DC_LOW(); /* Send Command */ SPIx_Write(LCDReg); - + HAL_Delay(1); /* Deselect : Chip Select high */ LCD_CS_HIGH(); } @@ -1230,7 +1231,7 @@ uint16_t LCD_IO_ReadData(uint16_t LCDReg){ LCD_CS_LOW(); /* Set LCD data/command line DC to Low */ - LCD_DC_LOW(); + //LCD_DC_LOW(); /* Send Command */ uint16_t data = SPIx_Read(LCDReg); @@ -1311,7 +1312,40 @@ void LCD_Delay(uint32_t Delay) void BSP_LCD_Test(void) { BSP_LCD_Clear(LCD_COLOR_WHITE); + HAL_Delay(1000); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with red...........\r\n"); + BSP_LCD_Clear(LCD_COLOR_RED); + HAL_Delay(1000); + BSP_LCD_Clear(LCD_COLOR_RED); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with blue...........\r\n"); + BSP_LCD_Clear(LCD_COLOR_BLUE); + HAL_Delay(1000); + + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with YELLOW...........\r\n"); + BSP_LCD_Clear(LCD_COLOR_YELLOW); + HAL_Delay(1000); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with GREEN...........\r\n"); + BSP_LCD_Clear(LCD_COLOR_GREEN); + HAL_Delay(1000); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with WHITE...........\r\n"); + BSP_LCD_Clear(LCD_COLOR_WHITE); + HAL_Delay(1000); + + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_WHITE); + HAL_Delay(1000); + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_RED); + HAL_Delay(1000); + + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_BROWN); + HAL_Delay(1000); + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_LIGHTGREEN); + HAL_Delay(1000); + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_LGRAYBLUE); + HAL_Delay(1000); + BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_BLUE); + +#if 0 BSP_LCD_DisplayStringAt(10, 20, "Speed Test", LEFT_MODE, LCD_COLOR_RED); APP_LOG(TS_OFF,VLEVEL_L,"\r\n Speed Test..........."); @@ -1328,7 +1362,7 @@ void BSP_LCD_Test(void) BSP_LCD_Clear(LCD_COLOR_LGRAYBLUE); BSP_LCD_Clear(LCD_COLOR_WHITE); BSP_LCD_Clear(LCD_COLOR_BLACK); - +#endif APP_LOG(TS_OFF,VLEVEL_L,"\r\n Font and Hellow world Test..........."); BSP_LCD_DisplayStringAt(10, 10, "Font test.", LEFT_MODE, LCD_COLOR_RED); BSP_LCD_DisplayStringAt(10, 50, "Hello World!", LEFT_MODE, LCD_COLOR_RED); @@ -1342,30 +1376,29 @@ void BSP_LCD_Test(void) BSP_LCD_DrawRect(40, 40, 200, 200, LCD_COLOR_CYAN); - BSP_LCD_Clear(LCD_COLOR_CYAN); + BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_DisplayStringAt(10, 10, "Filled Rect.", LEFT_MODE, LCD_COLOR_YELLOW); BSP_LCD_FillRect(40, 40, 160, 160, LCD_COLOR_CYAN); - BSP_LCD_Clear(LCD_COLOR_CYAN); + BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_DisplayStringAt(10, 10, "Circle.", LEFT_MODE, LCD_COLOR_YELLOW); BSP_LCD_DrawCircle(120, 120, 60, LCD_COLOR_CYAN); - BSP_LCD_Clear(LCD_COLOR_CYAN); + BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_DisplayStringAt(10, 10, "Filled Cir.", LEFT_MODE, LCD_COLOR_YELLOW); BSP_LCD_FillCircle(120, 120, 60, LCD_COLOR_CYAN); - BSP_LCD_Clear(LCD_COLOR_CYAN); - BSP_LCD_DisplayStringAt(10, 10, "Triangle", LEFT_MODE, LCD_COLOR_YELLOW); - ST7789_DrawTriangle(30, 30, 30, 70, 60, 40, LCD_COLOR_CYAN); - - BSP_LCD_Clear(LCD_COLOR_CYAN); + BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_DisplayStringAt(10, 10, "Filled Tri", LEFT_MODE, LCD_COLOR_YELLOW); BSP_LCD_FillTriangle(30, 30, 30, 70, 60, 40, LCD_COLOR_CYAN); + BSP_LCD_Clear(LCD_COLOR_BLACK); + //BSP_LCD_DrawBitmap(0, 0, (char *)gImage_1); + HAL_Delay(3000); /* diff --git a/mlx90640/stm32_hx8347d_lcd.h b/mlx90640/stm32_hx8347d_lcd.h index 06ba9a2..55ea8c2 100644 --- a/mlx90640/stm32_hx8347d_lcd.h +++ b/mlx90640/stm32_hx8347d_lcd.h @@ -130,7 +130,7 @@ typedef enum /** * @brief LCD default font */ -#define LCD_DEFAULT_FONT Font24 +#define LCD_DEFAULT_FONT Font16 //======================================================================================================================////========================================================================================================================// /** * @} @@ -140,16 +140,16 @@ typedef enum #define LCD_SPIx SPI1 #define LCD_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() -#define LCD_SPIx_SCK_GPIO_PORT GPIOA -#define LCD_SPIx_SCK_PIN GPIO_PIN_5 -#define LCD_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define LCD_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() +#define LCD_SPIx_SCK_GPIO_PORT MEMS_SPI_SCK_GPIO_Port +#define LCD_SPIx_SCK_PIN MEMS_SPI_SCK_Pin +#define LCD_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define LCD_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define LCD_SPIx_MISO_MOSI_GPIO_PORT GPIOA -#define LCD_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define LCD_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() +#define LCD_SPIx_MISO_MOSI_GPIO_PORT MEMS_SPI_MOSI_GPIO_Port +#define LCD_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define LCD_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() #define LCD_SPIx_MISO_PIN GPIO_PIN_6 -#define LCD_SPIx_MOSI_PIN GPIO_PIN_7 +#define LCD_SPIx_MOSI_PIN MEMS_SPI_MOSI_Pin /* Maximum Timeout values for flags waiting loops. These timeouts are not based on accurate values, they just guarantee that the application will not remain stuck if the SPI communication is corrupted. @@ -160,27 +160,39 @@ typedef enum /** * @brief LCD Control Lines management */ +#define LCD_RST_LOW() HAL_GPIO_WritePin(LCD_RST_GPIO_PORT,LCD_RST_PIN,GPIO_PIN_RESET) +#define LCD_RST_HIGH() HAL_GPIO_WritePin(LCD_RST_GPIO_PORT,LCD_RST_PIN,GPIO_PIN_SET) #define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_RESET) #define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_SET) #define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_RESET) #define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_SET) -#define LCD_BL_ON() HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET) -#define LCD_BL_OFF() HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_RESET) +#define LCD_BL_ON() HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET) +#define LCD_BL_OFF() HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_RESET) /** - * @brief LCD Control Interface pins (shield D10) + * @brief LCD Control Interface pins */ #define LCD_CS_PIN LCD_CS_Pin #define LCD_CS_GPIO_PORT LCD_CS_GPIO_Port -#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() +#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() /** * @brief LCD Data/Command Interface pins */ #define LCD_DC_PIN LCD_DC_Pin #define LCD_DC_GPIO_PORT LCD_DC_GPIO_Port -#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() +#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() + +/** + * @brief LCD Control Interface pins + */ +#define LCD_RST_PIN LCD_RST_Pin +#define LCD_RST_GPIO_PORT LCD_RST_GPIO_Port +#define LCD_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define LCD_RST_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() + + //=========================================================2=============================================================// /** @defgroup STM32_HX8347D_LCD_Exported_Functions @@ -194,7 +206,7 @@ uint16_t BSP_LCD_GetTextColor(void); uint16_t BSP_LCD_GetBackColor(void); void BSP_LCD_SetTextColor(__IO uint16_t Color); void BSP_LCD_SetBackColor(__IO uint16_t Color); -void BSP_LCD_SetRotation(uint8_t rotation); +void BSP_LCD_SetRotation(uint8_t rotation); void BSP_LCD_SetFont(sFONT *fonts); sFONT *BSP_LCD_GetFont(void);