32F429IDISCOVERY TFT-LCD에 다양한 색 출력하기 - 3

2019. 7. 19. 08:58임베디드/32F429IDISCOVERY

이전 예제에서는 10가지 색을 순차적으로 띄었다면, 랜덤 좌표와 RGB를 받아서 기괴한 그림을 띄우는 것으로 하려고 한다

 

/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd_ili9341.h"
#include "stm32f429i_discovery_ts.h"
#include <stdio.h>
#include <stdlib.h>
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define swap(a,b) {int16_t t=a; a=b; b=t;}
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c3;
LTDC_HandleTypeDef hltdc;
SPI_HandleTypeDef hspi5;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_LTDC_Init(void);
static void MX_SPI5_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_I2C3_Init(void);
/* USER CODE BEGIN PFP */
int _write(int file, char *ptr, int len)
{
HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, 0xFFFFFFFF);
return len;
}
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define LCD_FRAMEBUFFER_SIZE (LCD_PIXEL_WIDTH * LCD_PIXEL_HEIGHT)
uint16_t frame_buffer[LCD_FRAMEBUFFER_SIZE];
void full_screen(uint16_t color)
{
for(uint32_t i=0; i<LCD_FRAMEBUFFER_SIZE; i++) {
frame_buffer[i] = color;
}
}
void draw_pixel(uint16_t x, uint16_t y, uint16_t color)
{
frame_buffer[240*y+x] = color;
}
void FillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
{
uint16_t xpos, ypos;
if(x1>x2) swap(x1, x2);
if(y1>y2) swap(y1, y2);
for(ypos=y1; ypos<=y2; ypos++) {
for(xpos=x1; xpos<=x2; xpos++) {
draw_pixel(xpos, ypos, color);
}
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
TS_StateTypeDef stTouch;
BSP_TS_Init(240, 320);
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LTDC_Init();
MX_SPI5_Init();
MX_USART1_UART_Init();
MX_I2C3_Init();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
LCD_PowerOn();
HAL_LTDC_SetAddress(&hltdc, (uint32_t)frame_buffer, 0);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
FillRectangle(rand()%240, rand()%320, rand()%240, rand()%320, rand()%0xFFFF);
HAL_Delay(10);
}
/* USER CODE END 3 */
}
view raw main.c hosted with ❤ by GitHub

 

 

프로젝트파일: https://github.com/surinoel/stm32/tree/master/32F429IDISCOVERY/cubeMX/HAL_TFT_RAND