revised SPI and LCD control port

This commit is contained in:
Yunhorn 2023-08-03 11:21:51 +08:00
parent 746671f565
commit c196b9593d
7 changed files with 127 additions and 57 deletions

View File

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

View File

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

View File

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

View File

@ -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,13 +119,26 @@ 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_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,6 +172,8 @@ int main(void)
if(chose_menu_index>3)
chose_menu_index=1;
#if 1
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");
@ -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 */

View File

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

View File

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

View File

@ -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,18 +296,22 @@ void ST7789_Test(void);
#if !defined(USING_240X240)
#if !defined(USING_135X240)
#if !defined(USING_320X240)
#if !defined(USING_280X240)
#error You should at least choose one display resolution!
#endif
#endif
#endif
#endif
#if !defined(USING_135X240)
#if !defined(USING_240X240)
#if !defined(USING_320X240)
#if !defined(USING_280X240)
#error You should at least choose one display resolution!
#endif
#endif
#endif
#endif
#ifndef ST7789_ROTATION