47SPI_HandleTypeDef hspi1;
49TIM_HandleTypeDef htim1;
50TIM_HandleTypeDef htim2;
52UART_HandleTypeDef huart1;
59void SystemClock_Config(
void);
60static void MX_GPIO_Init(
void);
61static void MX_SPI1_Init(
void);
62static void MX_TIM1_Init(
void);
63static void MX_TIM2_Init(
void);
64static void MX_USART1_UART_Init(
void);
73#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
77 HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
106 SystemClock_Config();
117 MX_USART1_UART_Init();
120 printf(
"\x1b[2J\x1b[H");
121 printf(
"Starting Initialization Process\r\n");
133 printf(
"Start Tests\r\n");
150void SystemClock_Config(
void)
152 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
153 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
157 __HAL_RCC_PWR_CLK_ENABLE();
158 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
163 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
164 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
165 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
166 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
167 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
168 RCC_OscInitStruct.PLL.PLLM = 8;
169 RCC_OscInitStruct.PLL.PLLN = 180;
170 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
171 RCC_OscInitStruct.PLL.PLLQ = 4;
172 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
179 if (HAL_PWREx_EnableOverDrive() != HAL_OK)
186 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
187 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
188 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
189 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
190 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
191 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
193 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
204static void MX_SPI1_Init(
void)
215 hspi1.Instance = SPI1;
216 hspi1.Init.Mode = SPI_MODE_MASTER;
217 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
218 hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
219 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
220 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
221 hspi1.Init.NSS = SPI_NSS_SOFT;
222 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
223 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
224 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
225 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
226 hspi1.Init.CRCPolynomial = 10;
227 if (HAL_SPI_Init(&hspi1) != HAL_OK)
242static void MX_TIM1_Init(
void)
249 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
250 TIM_MasterConfigTypeDef sMasterConfig = {0};
255 htim1.Instance = TIM1;
256 htim1.Init.Prescaler = 180-1;
257 htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
258 htim1.Init.Period = 65535;
259 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
260 htim1.Init.RepetitionCounter = 0;
261 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
262 if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
266 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
267 if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
271 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
272 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
273 if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
288static void MX_TIM2_Init(
void)
295 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
296 TIM_MasterConfigTypeDef sMasterConfig = {0};
301 htim2.Instance = TIM2;
302 htim2.Init.Prescaler = 90-1;
303 htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
304 htim2.Init.Period = 4294967295;
305 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
306 htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
307 if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
311 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
312 if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
316 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
317 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
318 if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
333static void MX_USART1_UART_Init(
void)
343 huart1.Instance = USART1;
344 huart1.Init.BaudRate = 19200;
345 huart1.Init.WordLength = UART_WORDLENGTH_8B;
346 huart1.Init.StopBits = UART_STOPBITS_1;
347 huart1.Init.Parity = UART_PARITY_NONE;
348 huart1.Init.Mode = UART_MODE_TX_RX;
349 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
350 huart1.Init.OverSampling = UART_OVERSAMPLING_16;
351 if (HAL_UART_Init(&huart1) != HAL_OK)
366static void MX_GPIO_Init(
void)
368 GPIO_InitTypeDef GPIO_InitStruct = {0};
374 __HAL_RCC_GPIOC_CLK_ENABLE();
375 __HAL_RCC_GPIOH_CLK_ENABLE();
376 __HAL_RCC_GPIOA_CLK_ENABLE();
377 __HAL_RCC_GPIOG_CLK_ENABLE();
378 __HAL_RCC_GPIOB_CLK_ENABLE();
381 HAL_GPIO_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_RESET);
384 HAL_GPIO_WritePin(LCD_WAIT_GPIO_Port, LCD_WAIT_Pin, GPIO_PIN_RESET);
387 HAL_GPIO_WritePin(RA8875_CS_GPIO_Port, RA8875_CS_Pin, GPIO_PIN_RESET);
390 GPIO_InitStruct.Pin = LCD_RESET_Pin;
391 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
392 GPIO_InitStruct.Pull = GPIO_NOPULL;
393 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
394 HAL_GPIO_Init(LCD_RESET_GPIO_Port, &GPIO_InitStruct);
397 GPIO_InitStruct.Pin = LCD_WAIT_Pin;
398 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
399 GPIO_InitStruct.Pull = GPIO_NOPULL;
400 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
401 HAL_GPIO_Init(LCD_WAIT_GPIO_Port, &GPIO_InitStruct);
404 GPIO_InitStruct.Pin = LCD_INT_Pin;
405 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
406 GPIO_InitStruct.Pull = GPIO_PULLUP;
407 HAL_GPIO_Init(LCD_INT_GPIO_Port, &GPIO_InitStruct);
410 GPIO_InitStruct.Pin = RA8875_CS_Pin;
411 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
412 GPIO_InitStruct.Pull = GPIO_PULLUP;
413 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
414 HAL_GPIO_Init(RA8875_CS_GPIO_Port, &GPIO_InitStruct);
417 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
418 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
434void _Error_Handler(
const char *file,
int line)
438#ifdef REDIRECT_PRINTF
441 snprintf(buf,
sizeof(buf),
442 "Trapped in _Error_Handler(). Called from: %s, line: %d\r\n",
456#ifdef USE_FULL_ASSERT
464void assert_failed(uint8_t *file, uint32_t line)
475#ifdef REDIRECT_PRINTF
479 snprintf(buf,
sizeof(buf),
480 "assert_param failed: file %s, line %lu\r\n",
481 (
char *)file, (
unsigned long)line);
C-callable entry points into the C++ RA8875 display code.
void testLCD(bool buildTest)
Runs one of the two display demonstrations.
void initTest(SPI_HandleTypeDef *halSPI)
Creates the display object and starts the RA8875 controller.
int main(void)
The application entry point.
: Header for main.c file. This file contains the common defines of the application.