From c196b9593df8b6a806246d9775143e1e0c3a6294 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Thu, 3 Aug 2023 11:21:51 +0800 Subject: [PATCH] revised SPI and LCD control port --- Core/Inc/main.h | 16 +++++++------ Core/Src/dma.c | 3 ++- Core/Src/gpio.c | 15 ++++++++----- Core/Src/main.c | 42 ++++++++++++++++++++++++---------- Core/Src/spi.c | 22 +++++++++--------- ST7789/st7789.c | 26 ++++++++++++--------- ST7789/st7789.h | 60 ++++++++++++++++++++++++++++++++++++++++--------- 7 files changed, 127 insertions(+), 57 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 95f9db5..1e35d30 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -89,19 +89,21 @@ void Error_Handler(void); #define VOLTAGE_DETECT_GPIO_Port GPIOA //SPI1 ST7789 -#define LCD_CS_Pin GPIO_PIN_4 //ST7789, Pin-7 -#define LCD_CS_GPIO_Port GPIOA - #define LCD_RES_Pin GPIO_PIN_3 //ST7789, Pin-5 #define LCD_RES_GPIO_Port GPIOB -#define BLK_Pin GPIO_PIN_8 //ST7789, Pin-8 -#define BLK_GPIO_Port GPIOB + +#define LCD_BLK_Pin GPIO_PIN_8 //ST7789, Pin-8 +#define LCD_BLK_GPIO_Port GPIOB + +#define LCD_CS_Pin GPIO_PIN_10 //ST7789, Pin-7 +#define LCD_CS_GPIO_Port GPIOB + +#define LCD_DC_Pin GPIO_PIN_5 //ST7789, Pin-6 +#define LCD_DC_GPIO_Port GPIOB #define LCD_TE_Pin GPIO_PIN_13 #define LCD_TE_GPIO_Port GPIOB -#define LCD_DC_Pin GPIO_PIN_5 //ST7789, Pin-6 -#define LCD_DC_GPIO_Port GPIOB #define KEY1_Pin GPIO_PIN_0 #define KEY1_GPIO_Port GPIOA diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 5ba9121..ec6a6d8 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -44,13 +44,14 @@ void MX_DMA_Init(void) __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ +#if 1 /* DMA1_Channel2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn); /* DMA1_Channel3_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); - +#endif /* DMA1_Channel5_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 2, 0); HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index bfd7cbc..8230cc0 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -54,10 +54,15 @@ void MX_GPIO_Init(void) |LED3_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, LCD_CS_Pin|LCD_RES_Pin|W25Q_CS_Pin, GPIO_PIN_RESET); + //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_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); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, LCD_TE_Pin|LCD_DC_Pin|LED_Pin, GPIO_PIN_RESET); + //HAL_GPIO_WritePin(GPIOB, LCD_TE_Pin|LCD_DC_Pin|LED_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : PBPin PBPin PBPin */ GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin; @@ -86,14 +91,14 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : PAPin PAPin PAPin */ - GPIO_InitStruct.Pin = LCD_CS_Pin|LCD_RES_Pin|W25Q_CS_Pin; + GPIO_InitStruct.Pin = LCD_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(LCD_CS_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : PBPin PBPin PBPin */ - GPIO_InitStruct.Pin = LCD_TE_Pin|LCD_DC_Pin|LED_Pin; + GPIO_InitStruct.Pin = LCD_RES_Pin|LCD_BLK_Pin|LCD_DC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; diff --git a/Core/Src/main.c b/Core/Src/main.c index cc61c32..9292832 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -81,7 +81,7 @@ MENU my_menu={ {"screenshot","saving ","success ","fail "}, 0 }; -uint8_t key1_press,key2_press,button_press; +uint8_t key1_press,key2_press,button_press=1; //menu1 bin_size or resize //menu2 color_method //menu3 screenshot @@ -119,14 +119,27 @@ int main(void) MX_LoRaWAN_Init(); /* USER CODE BEGIN 2 */ //MX_ADC_Init(); - MX_DMA_Init(); - MX_I2C_Init(); MX_SPI_Init(); + MX_I2C_Init(); + + MX_DMA_Init(); APP_LOG(TS_OFF,VLEVEL_L,"\r\n Start LCD test..........."); //HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); - //ST7789_Test(); + + ST7789_Init(); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Set Black Light...on...."); + ST7789_SetBackLight(1); + HAL_Delay(500); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Set Black Light... off...."); + ST7789_SetBackLight(0); + HAL_Delay(500); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n Set Black Light...on...."); + ST7789_SetBackLight(1); + +// HAL_Delay(500); +// ST7789_Test(); APP_LOG(TS_OFF,VLEVEL_L,"\r\n END LCD test..........."); @@ -139,7 +152,7 @@ int main(void) mlx90640_init(FPS2HZ,&mlx90640); HAL_Delay(500); mlx90640_get_temp_mat(&mlx90640,mlx90640To); - ST7789_SetBackLight(50); + ST7789_SetBackLight(0); draw_spectrum(img_method_arr[my_menu.chose_color_method_index]); @@ -149,7 +162,6 @@ int main(void) /* USER CODE BEGIN 3 */ APP_LOG(TS_OFF,VLEVEL_L,"\r\nL menu selected:%d,%d,%d\n",chose_menu_index,key1_press,key2_press); - APP_LOG(TS_OFF,VLEVEL_M,"\r\nM menu selected:%d,%d,%d\n",chose_menu_index,key1_press,key2_press); if(key1_press==1) chose_menu_index--; @@ -160,11 +172,13 @@ int main(void) if(chose_menu_index>3) chose_menu_index=1; #if 1 - mlx90640_get_temp_mat(&mlx90640,mlx90640To); + APP_LOG(TS_OFF,VLEVEL_L,"\r\nGet Raw data \r\n"); + + mlx90640_get_temp_mat(&mlx90640,mlx90640To); char buf[128]; - APP_LOG(TS_OFF,VLEVEL_L,"\r\n"); - for (int i=0; i< 24; i++) { - APP_LOG(TS_OFF,VLEVEL_L,"\r\n"); + APP_LOG(TS_OFF,VLEVEL_L,"\r\n"); + for (int i=0; i< 24; i++) { + APP_LOG(TS_OFF,VLEVEL_L,"\r\n"); for (int j=0; j < 32; j++) { sprintf(buf,"%.f", (float)(mlx90640To[j*i])); APP_LOG(TS_OFF,VLEVEL_L,"%s ", buf); @@ -177,6 +191,8 @@ int main(void) {//温度异常重新获取 mlx90640_get_temp_mat(&mlx90640,mlx90640To); } + sprintf(buf,"\r\nMax=%.2f, Min=%.2f, Center=%.2f\r\n",(float)max_temp, (float)min_temp, (float)mlx90640To[768/2]); + APP_LOG(TS_OFF,VLEVEL_L,"%s", buf); APP_LOG(TS_OFF,VLEVEL_L,"\r\n"); for (int i=0; i< 24; i++) { @@ -190,6 +206,7 @@ int main(void) } center_temp=mlx90640To[768/2]; #endif +#if 0 if(button_press) my_menu.screenshot_index=1; ST7789_WriteString(0,0,my_menu.voltage_info,Font_7x10,WHITE,BLACK); @@ -231,9 +248,10 @@ int main(void) else Besize_draw(bmp8,img_method_arr[my_menu.chose_color_method_index],notsavefile); } - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5); + chose_menu_index ++; + //HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5); // UART_printf(&huart1,"%d,%d,%d\n",chose_menu_index,key1_press,key2_press); - +#endif } /* USER CODE END 2 */ diff --git a/Core/Src/spi.c b/Core/Src/spi.c index d9b177d..f60c84b 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -41,18 +41,18 @@ 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_1LINE;//SPI_DIRECTION_2LINES; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;//SPI_POLARITY_LOW; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; 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; //7; -// hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; -// hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + hspi1.Init.CRCPolynomial = 7; //7; + hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); @@ -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_MOSI_Pin|MEMS_CS_N_Pin|MEMS_SPI_MISO_Pin; + 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.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 1 /* SPI1 DMA Init */ /* SPI1_RX Init */ hdma_spi1_rx.Instance = DMA1_Channel2; @@ -152,7 +152,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(SPI1_IRQn); /* USER CODE BEGIN SPI1_MspInit 1 */ - +#endif /* USER CODE END SPI1_MspInit 1 */ } } @@ -174,14 +174,14 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) * PA6 SPI1_MISO * PA7 SPI1_MOSI */ - HAL_GPIO_DeInit(GPIOA, MEMS_SPI_MOSI_Pin|MEMS_CS_N_Pin|MEMS_SPI_MISO_Pin); + HAL_GPIO_DeInit(MEMS_SPI_MOSI_GPIO_Port, MEMS_SPI_MOSI_Pin|MEMS_SPI_MISO_Pin); HAL_GPIO_DeInit(MEMS_SPI_SCK_GPIO_Port, MEMS_SPI_SCK_Pin); - +#if 0 /* SPI1 DMA DeInit */ HAL_DMA_DeInit(spiHandle->hdmarx); HAL_DMA_DeInit(spiHandle->hdmatx); - +#endif /* SPI1 interrupt Deinit */ HAL_NVIC_DisableIRQ(SPI1_IRQn); /* USER CODE BEGIN SPI1_MspDeInit 1 */ diff --git a/ST7789/st7789.c b/ST7789/st7789.c index f37a66b..eaa92a3 100644 --- a/ST7789/st7789.c +++ b/ST7789/st7789.c @@ -624,6 +624,12 @@ void ST7789_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) void ST7789_SetBackLight(uint8_t blk) { //BLK_TIM=blk; + //ST7789_BLK_Clr(); + if (blk) { + ST7789_BLK_Set(); + } else { + ST7789_BLK_Clr(); + } } /** * @brief Open/Close tearing effect line @@ -645,11 +651,11 @@ void ST7789_TearEffect(uint8_t tear) */ void ST7789_Test(void) { - ST7789_Fill_Color(BLACK); - HAL_Delay(1000); + ST7789_Fill_Color(BLUE); + HAL_Delay(2000); ST7789_WriteString(10, 20, "Speed Test", Font_11x18, RED, BLACK); APP_LOG(TS_OFF,VLEVEL_L,"\r\n Speed Test..........."); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(CYAN); ST7789_Fill_Color(RED); ST7789_Fill_Color(BLUE); @@ -669,38 +675,38 @@ void ST7789_Test(void) ST7789_WriteString(10, 50, "Hello World!", Font_7x10, RED, BLACK); ST7789_WriteString(10, 75, "Hello World!", Font_11x18, YELLOW, BLACK); ST7789_WriteString(10, 100, "Hello World!", Font_16x26, MAGENTA, BLACK); - HAL_Delay(1000); + HAL_Delay(100); APP_LOG(TS_OFF,VLEVEL_L,"\r\n Rect, circle Triangle test..........."); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Rect./Line.", Font_11x18, YELLOW, BLACK); ST7789_DrawRectangle(40, 40, 200, 200, WHITE); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Filled Rect.", Font_11x18, YELLOW, BLACK); ST7789_DrawFilledRectangle(40, 40, 160, 160, WHITE); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Circle.", Font_11x18, YELLOW, BLACK); ST7789_DrawCircle(120, 120, 60, WHITE); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Filled Cir.", Font_11x18, YELLOW, BLACK); ST7789_DrawFilledCircle(120, 120, 60, WHITE); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Triangle", Font_11x18, YELLOW, BLACK); ST7789_DrawTriangle(30, 30, 30, 70, 60, 40, WHITE); - HAL_Delay(1000); + HAL_Delay(100); ST7789_Fill_Color(BLACK); ST7789_WriteString(10, 10, "Filled Tri", Font_11x18, YELLOW, BLACK); ST7789_DrawFilledTriangle(30, 30, 30, 70, 60, 40, WHITE); - HAL_Delay(1000); + HAL_Delay(100); /* diff --git a/ST7789/st7789.h b/ST7789/st7789.h index 855f4b0..8f1d8a7 100644 --- a/ST7789/st7789.h +++ b/ST7789/st7789.h @@ -15,16 +15,26 @@ */ /* Define the pins tp connect */ -#define ST7789_RST_PORT GPIOB -#define ST7789_RST_PIN GPIO_PIN_3 -#define ST7789_DC_PORT GPIOB -#define ST7789_DC_PIN GPIO_PIN_5 +//#define ST7789_RST_PORT GPIOB +//#define ST7789_RST_PIN GPIO_PIN_3 +//#define ST7789_DC_PORT GPIOB +//#define ST7789_DC_PIN GPIO_PIN_5 //#define ST7789_CS_PORT GPIOA //#define ST7789_CS_PIN GPIO_PIN_3 -#define ST7789_CS_PORT MEMS_CS_N_GPIO_Port -#define ST7789_CS_PIN MEMS_CS_N_Pin +#define ST7789_RST_PORT LCD_RES_GPIO_Port +#define ST7789_RST_PIN LCD_RES_Pin +#define ST7789_DC_PORT LCD_DC_GPIO_Port +#define ST7789_DC_PIN LCD_DC_Pin + + +#define ST7789_BLK_PORT LCD_BLK_GPIO_Port +#define ST7789_BLK_PIN LCD_BLK_Pin + +#define ST7789_CS_PORT LCD_CS_GPIO_Port +#define ST7789_CS_PIN LCD_CS_Pin + /***** Use if need backlight control ***** @@ -47,11 +57,12 @@ /* Choose a type you are using */ //#define USING_135X240 //#define USING_240X240 -#define USING_320X240 +//#define USING_320X240 +#define USING_280X240 /* Choose a display rotation you want to use: (0-3) */ -//#define ST7789_ROTATION 0 -#define ST7789_ROTATION 1 +#define ST7789_ROTATION 0 +//#define ST7789_ROTATION 1 //#define ST7789_ROTATION 2 // use Normally on 240x240 //#define ST7789_ROTATION 3 @@ -125,6 +136,26 @@ #define Y_SHIFT 0 #endif #endif + +#ifdef USING_280X240 + #define ST7789_WIDTH 280 + #define ST7789_HEIGHT 240 + + #if ST7789_ROTATION == 0 + #define X_SHIFT 0 + #define Y_SHIFT 0 + #elif ST7789_ROTATION == 1 + #define X_SHIFT 0 + #define Y_SHIFT 0 + #elif ST7789_ROTATION == 2 + #define X_SHIFT 0 + #define Y_SHIFT 0 + #elif ST7789_ROTATION == 3 + #define X_SHIFT 0 + #define Y_SHIFT 0 + #endif +#endif + /** *Color of pen *If you want to use another color, you can choose one in RGB565 format. @@ -216,6 +247,9 @@ #define ST7789_DC_Clr() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_RESET) #define ST7789_DC_Set() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_SET) +#define ST7789_BLK_Clr() HAL_GPIO_WritePin(ST7789_BLK_PORT,ST7789_BLK_PIN,GPIO_PIN_RESET) +#define ST7789_BLK_Set() HAL_GPIO_WritePin(ST7789_BLK_PORT,ST7789_BLK_PIN,GPIO_PIN_SET) + #ifdef ST7789_USE_CS #define ST7789_Select() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_RESET) #define ST7789_UnSelect() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_SET) @@ -262,7 +296,9 @@ void ST7789_Test(void); #if !defined(USING_240X240) #if !defined(USING_135X240) #if !defined(USING_320X240) - #error You should at least choose one display resolution! + #if !defined(USING_280X240) + #error You should at least choose one display resolution! + #endif #endif #endif #endif @@ -270,7 +306,9 @@ void ST7789_Test(void); #if !defined(USING_135X240) #if !defined(USING_240X240) #if !defined(USING_320X240) - #error You should at least choose one display resolution! + #if !defined(USING_280X240) + #error You should at least choose one display resolution! + #endif #endif #endif #endif