updated display, work fine display and get temperature values, display

with 2/3 of height
This commit is contained in:
Yunhorn 2023-08-07 16:59:50 +08:00
parent 959cfeec63
commit 10a012c390
7 changed files with 123 additions and 66 deletions

View File

@ -44,7 +44,11 @@ void MX_DMA_Init(void)
__HAL_RCC_DMA1_CLK_ENABLE();
/* DMA interrupt init */
#if 1
/* DMA1_Channel1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
#if 0
/* DMA1_Channel2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);

View File

@ -131,36 +131,43 @@ int main(void)
MX_LoRaWAN_Init();
/* USER CODE BEGIN 2 */
//MX_ADC_Init();
MX_SPI_Init();
MX_GPIO_Init();
MX_DMA_Init();
MX_SPI_Init();
MX_I2C_Init();
//MX_DMA_Init();
APP_LOG(TS_OFF, VLEVEL_L, "START LCD init....\r\n");
BSP_LCD_Init();
BSP_LCD_DisplayOn();
//HAL_Delay(2000);
//BSP_LCD_DisplayOff();
BSP_LCD_Test();
MLX90640_I2CInit();
mlx90640_display_init();
#if 0
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);
#endif
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//BSP_LCD_DisplayOff();
mlx90640_display_process();
}
//HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

View File

@ -33,7 +33,10 @@ void MX_SPI_Init(void)
{
/* USER CODE BEGIN SPI1_Init 0 */
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* USER CODE END SPI1_Init 0 */
/* USER CODE BEGIN SPI1_Init 1 */
@ -41,14 +44,14 @@ 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;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
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.TIMode = SPI_TIMODE_DISABLE;
//hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
//hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
@ -102,7 +105,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
#if 0
/* SPI1 DMA Init */
/* SPI1_RX Init */
hdma_spi1_rx.Instance = DMA1_Channel2;
@ -125,27 +128,28 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
}
__HAL_LINKDMA(spiHandle,hdmarx,hdma_spi1_rx);
#endif
#if 1
/* SPI1_TX Init */
hdma_spi1_tx.Instance = DMA1_Channel3;
hdma_spi1_tx.Instance = DMA1_Channel1;
hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX;
hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_spi1_tx.Init.Mode = DMA_NORMAL;
hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
{
Error_Handler();
}
#if 0
if (HAL_DMA_ConfigChannelAttributes(&hdma_spi1_tx, DMA_CHANNEL_NPRIV) != HAL_OK)
{
Error_Handler();
}
#endif
__HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);
/* SPI1 interrupt Init */

View File

@ -244,6 +244,20 @@ void EXTI1_IRQHandler(void)
/* USER CODE END EXTI1_IRQn 1 */
}
/**
* @brief This function handles DMA1 Channel 1 Interrupt.
*/
void DMA1_Channel1_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
/* USER CODE END DMA1_Channel1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_tx);
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
/* USER CODE END DMA1_Channel1_IRQn 1 */
}
#if 0
/**
* @brief This function handles DMA1 Channel 2 Interrupt.
*/
@ -266,12 +280,12 @@ 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 */
}
#endif
/**
* @brief This function handles DMA1 Channel 5 Interrupt.
*/

View File

@ -114,15 +114,15 @@ static void drawLegend(void) {
for (ii = minTemp; ii < maxTemp; ii += inc) {
BSP_LCD_DrawVLine(8+ + j++, 292, 20, TempToColor(ii));
}
BSP_LCD_SetFont(&Font16);
memset(tempBuffer,0,sizeof(tempBuffer));
sprintf(tempBuffer,(char *)"%2.1f",minTemp);
BSP_LCD_DisplayStringAt(8,290,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAt(8,230,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_BLUE);
memset(tempBuffer,0,sizeof(tempBuffer));
sprintf(tempBuffer,(char *)"%2.1f",maxTemp);
BSP_LCD_DisplayStringAt(190,290,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_RED);
BSP_LCD_DisplayStringAt(190,230,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_RED);
}
@ -134,17 +134,17 @@ 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(&Font16);
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);
BSP_LCD_DisplayStringAt(88,230,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_RED);
}
static void drawPicture(void) {
for (y=0; y<24; y++) {
for (x=0; x<32; x++) {
BSP_LCD_FillRect(8 + x*7, 8 + y*7, 7, 7, TempToColor(tempValues[(31-x) + (y*32)]));
BSP_LCD_FillRect(x*10, y*10, 9, 10, TempToColor(tempValues[(x) + (y*32)]));
}
}
}
@ -169,6 +169,7 @@ static void readTempValues(void) {
MLX90640_CalculateTo(mlx90640Frame, &mlx90640, EMMISIVITY, tr, tempValues);
}
#if 0
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++) {
@ -176,10 +177,11 @@ static void readTempValues(void) {
}
APP_LOG(TS_OFF,VLEVEL_L, "\r\n");
}
#endif
}
void mlx90640_display_process(void){
APP_LOG(TS_OFF, VLEVEL_L, "Read value.\r\n");
//APP_LOG(TS_OFF, VLEVEL_L, "Read value.\r\n");
readTempValues();
setTempScale();
drawPicture();

View File

@ -66,8 +66,8 @@ LCD_DrvTypeDef st7789v_drv =
//static uint8_t Is_st7789v_Initialized = 0;
static uint16_t ArrayRGB[280] = {0};
uint16_t st7789v_width = 240;
uint16_t st7789v_height = 280;
uint16_t st7789v_width = ST7789V_LCD_PIXEL_WIDTH;
uint16_t st7789v_height = ST7789V_LCD_PIXEL_HEIGHT;
uint8_t st7789v_rotation = 0;
/**
* @}
@ -122,20 +122,19 @@ void st7789v_Init(void)
/* Initialize st7789v low level bus layer -----------------------------------*/
LCD_IO_Init();
//LCD_CS_HIGH();
LCD_RST_LOW();
HAL_Delay(10);
//LCD_CS_LOW(); //CHIP SELECT
LCD_RST_LOW(); // CHIP RESET
HAL_Delay(100);
LCD_RST_HIGH();
HAL_Delay(10);
HAL_Delay(100);
LCD_BL_ON();
HAL_Delay(100);
/* Out of sleep mode, 0 args, no delay */
st7789v_WriteRegCmd(0x11);
HAL_Delay(120);
st7789v_WriteRegCmd(0x11);
HAL_Delay(120);
st7789v_WriteRegCmd(0x36);
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);
@ -192,7 +191,8 @@ void st7789v_Init(void)
st7789v_WriteReg(0xE1, 0x0E);
st7789v_WriteReg(0xE1, 0x09);
st7789v_WriteReg(0xE1, 0x09);
st7789v_WriteReg(0xE1, 0x05);
st7789v_WriteReg(0xE1, 0x15);
st7789v_WriteReg(0xE1, 0x31);
st7789v_WriteReg(0xE1, 0x33);
st7789v_WriteReg(0xE1, 0x48);
st7789v_WriteReg(0xE1, 0x17);
@ -254,9 +254,9 @@ void st7789v_SetCursor(uint16_t Xpos, uint16_t Ypos)
data = (Xpos) & 0xFF;
LCD_IO_WriteMultipleData(&data, 1);
LCD_IO_WriteReg(0x2B);/* Row address set: RASET */
data = (Ypos) >> 8;
data = (Ypos+20) >> 8;
LCD_IO_WriteMultipleData(&data, 1);
data = (Ypos) & 0xFF;
data = (Ypos+20) & 0xFF;
LCD_IO_WriteMultipleData(&data, 1);
LCD_IO_WriteReg(0x2C);/* Memory write: RAMWR */
}
@ -271,10 +271,10 @@ void st7789v_SetCursor(uint16_t Xpos, uint16_t Ypos)
void st7789v_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
{
uint8_t data = 0;
// if((Xpos > ST7789V_LCD_PIXEL_WIDTH) || (Ypos > ST7789V_LCD_PIXEL_HEIGHT))
// {
// return;
// }
if((Xpos > ST7789V_LCD_PIXEL_WIDTH) || (Ypos > ST7789V_LCD_PIXEL_HEIGHT))
{
return;
}
/* Set Cursor */
st7789v_SetCursor(Xpos, Ypos);
@ -484,7 +484,7 @@ void st7789_SetRotation(uint8_t rotation)
case 0:
/* Memory access control: MY = 0, MX = 0, MV = 0, ML = 0 */
/* */
#if 0
#if 1
st7789v_WriteReg(0X36, 0x08);
st7789v_WriteReg(0x2A, 0x00);
st7789v_WriteReg(0x2A, 0x00);
@ -500,7 +500,7 @@ void st7789_SetRotation(uint8_t rotation)
break;
case 1:
/* Memory access control: MY = 0, MX = 1, MV = 1, ML = 0 */
#if 0
#if 1
st7789v_WriteReg(0X36, 0x68);
st7789v_WriteReg(0x2A, 0x00);
st7789v_WriteReg(0x2A, 0x00);

View File

@ -146,25 +146,43 @@ uint8_t BSP_LCD_Init(void)
uint8_t ret = LCD_ERROR;
/* Default value for draw propriety */
#if 1
DrawProp.BackColor = 0xFFFF;
DrawProp.pFont = &Font16;
DrawProp.TextColor = 0x0000;
#endif
// lcd_drv = &hx8347d_drv;
lcd_drv = &st7789v_drv;
LCD_IO_Init();
//LCD_IO_Init();
/* LCD Init */
lcd_drv->Init();
BSP_LCD_SetRotation(0);
LCD_BL_ON();
lcd_drv->SetRotation(1);
#if 0
/* Clear the LCD screen */
BSP_LCD_Clear(LCD_COLOR_WHITE);
HAL_Delay(1000);
LCD_BL_OFF();
/* Initialize the font */
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
BSP_LCD_SetRotation(1);
LCD_BL_ON();
BSP_LCD_Clear(LCD_COLOR_BLUE);
HAL_Delay(1000);
LCD_BL_OFF();
BSP_LCD_SetRotation(2);
LCD_BL_ON();
BSP_LCD_Clear(LCD_COLOR_GREEN);
HAL_Delay(1000);
LCD_BL_OFF();
/* Clear the LCD screen */
BSP_LCD_Clear(LCD_COLOR_WHITE);
#endif
ret = LCD_OK;
return ret;
@ -692,7 +710,7 @@ void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Hei
lcd_drv->FillRect(Xpos, Ypos, Width, Height, RGBCode);
}
SetDisplayWindow(0, 0, BSP_LCD_GetYSize(), BSP_LCD_GetXSize());
SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
}
/**
@ -1187,15 +1205,20 @@ void LCD_IO_Init(void)
/* 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;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(LCD_CS_GPIO_Port, &gpioinitstruct);
/* Configure LCD_DC_PIN pin: LCD Card DC pin */
gpioinitstruct.Pin = LCD_DC_PIN;
HAL_GPIO_Init(LCD_DC_GPIO_PORT, &gpioinitstruct);
gpioinitstruct.Pin = LCD_RST_PIN;
HAL_GPIO_Init(LCD_RST_GPIO_PORT, &gpioinitstruct);
/* LCD chip select high */
LCD_CS_HIGH();
LCD_DC_HIGH();
LCD_RST_HIGH();
/* LCD SPI Config */
//SPIx_Init();
@ -1212,13 +1235,16 @@ 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);
LCD_DC_HIGH();
/* Deselect : Chip Select high */
LCD_CS_HIGH();
}
/**
@ -1312,37 +1338,37 @@ void LCD_Delay(uint32_t Delay)
void BSP_LCD_Test(void)
{
BSP_LCD_Clear(LCD_COLOR_WHITE);
HAL_Delay(1000);
HAL_Delay(500);
APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with red...........\r\n");
BSP_LCD_Clear(LCD_COLOR_RED);
HAL_Delay(1000);
HAL_Delay(500);
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);
HAL_Delay(500);
APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with YELLOW...........\r\n");
BSP_LCD_Clear(LCD_COLOR_YELLOW);
HAL_Delay(1000);
HAL_Delay(500);
APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with GREEN...........\r\n");
BSP_LCD_Clear(LCD_COLOR_GREEN);
HAL_Delay(1000);
HAL_Delay(500);
APP_LOG(TS_OFF,VLEVEL_L,"\r\n Clear with WHITE...........\r\n");
BSP_LCD_Clear(LCD_COLOR_WHITE);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_WHITE);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_RED);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_BROWN);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_LIGHTGREEN);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_LGRAYBLUE);
HAL_Delay(1000);
HAL_Delay(500);
BSP_LCD_FillRect(0,0,ST7789V_LCD_PIXEL_WIDTH,ST7789V_LCD_PIXEL_HEIGHT,LCD_COLOR_BLUE);
#if 0
@ -1398,7 +1424,7 @@ void BSP_LCD_Test(void)
BSP_LCD_Clear(LCD_COLOR_BLACK);
//BSP_LCD_DrawBitmap(0, 0, (char *)gImage_1);
HAL_Delay(3000);
HAL_Delay(500);
/*