diff options
Diffstat (limited to 'GameLogic/stm32')
| -rw-r--r-- | GameLogic/stm32/main.c | 460 | ||||
| -rw-r--r-- | GameLogic/stm32/main.h | 69 | ||||
| -rw-r--r-- | GameLogic/stm32/stm32Design.md | 17 | ||||
| -rw-r--r-- | GameLogic/stm32/stm32f0xx_hal_conf.h | 322 | ||||
| -rw-r--r-- | GameLogic/stm32/stm32f0xx_hal_msp.c | 190 | ||||
| -rw-r--r-- | GameLogic/stm32/stm32f0xx_it.c | 145 | ||||
| -rw-r--r-- | GameLogic/stm32/stm32f0xx_it.h | 62 | ||||
| -rw-r--r-- | GameLogic/stm32/syscalls.c | 176 | ||||
| -rw-r--r-- | GameLogic/stm32/sysmem.c | 79 | ||||
| -rw-r--r-- | GameLogic/stm32/system_stm32f0xx.c | 247 | 
10 files changed, 1767 insertions, 0 deletions
| diff --git a/GameLogic/stm32/main.c b/GameLogic/stm32/main.c new file mode 100644 index 0000000..edabde5 --- /dev/null +++ b/GameLogic/stm32/main.c @@ -0,0 +1,460 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file           : main.c
 +  * @brief          : Main program body
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2023 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 +  ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +/* Includes ------------------------------------------------------------------*/
 +#include "main.h"
 +
 +/* Private includes ----------------------------------------------------------*/
 +/* USER CODE BEGIN Includes */
 +
 +/* USER CODE END Includes */
 +
 +/* Private typedef -----------------------------------------------------------*/
 +/* USER CODE BEGIN PTD */
 +
 +/* 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 ---------------------------------------------------------*/
 +SPI_HandleTypeDef hspi1;
 +
 +TIM_HandleTypeDef htim3;
 +
 +/* USER CODE BEGIN PV */
 +
 +/* USER CODE END PV */
 +
 +/* Private function prototypes -----------------------------------------------*/
 +void SystemClock_Config(void);
 +static void MX_GPIO_Init(void);
 +static void MX_SPI1_Init(void);
 +static void MX_TIM3_Init(void);
 +/* USER CODE BEGIN PFP */
 +
 +/* USER CODE END PFP */
 +
 +/* Private user code ---------------------------------------------------------*/
 +/* USER CODE BEGIN 0 */
 +
 +/* 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 */
 +
 +  /* USER CODE END SysInit */
 +
 +  /* Initialize all configured peripherals */
 +  MX_GPIO_Init();
 +  MX_SPI1_Init();
 +  MX_TIM3_Init();
 +  /* USER CODE BEGIN 2 */
 +  // correct byte for led control
 +  uint16_t pos_x = 310; //0b0000 0001 0011 0110
 +  uint16_t pos_y = 210;
 +
 +  uint8_t left = 0;
 +  uint8_t right = 0;
 +  uint8_t up = 0;
 +  uint8_t down = 0;
 +
 +  uint8_t tileMap[30][40] =
 +  {
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }
 +
 +
 +
 +  };
 +
 +  uint8_t pos_x_bit[2];
 +  uint8_t pos_y_bit[2];
 +  uint8_t data_send[3];
 +
 +  int tileX;
 +  int tileY;
 +
 +
 +
 +
 +
 +  /* USER CODE END 2 */
 +
 +  /* Infinite loop */
 +  /* USER CODE BEGIN WHILE */
 +  while (1)
 +  {
 +
 +		//shift int into 2 8bit u_int
 +		pos_x_bit[1] = pos_x & 0xff;
 +		pos_x_bit[0] = (pos_x >> 8);
 +
 +		pos_y_bit[1] = pos_y & 0xff;
 +		pos_y_bit[0] = (pos_y >> 8);
 +
 +		// simplify coor for tilemap
 +		tileX = pos_x / 20;
 +		tileY = pos_y / 16;
 +
 +
 +		//read buttons 4 times
 +		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4) == 1)
 +		{
 +			left++;
 +		}
 +		else
 +		{
 +			left = 0;
 +		}
 +		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == 1)
 +		 {
 +			right++;
 +		 }
 +		else
 +		{
 +			right = 0;
 +		}
 +		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 1)
 +		{
 +			up++;
 +		}
 +		else
 +		{
 +			up = 0;
 +		}
 +		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == 1)
 +		{
 +			down++;
 +		}
 +		else
 +		{
 +			down = 0;
 +		}
 +		// compare position x/y with tilemap for collision
 +		if(left > 10)
 +		{
 +			if(tileMap[tileY][tileX] == 1)
 +			{
 +				left = 0;
 +			}
 +			else
 +			{
 +				pos_x--;
 +			}
 +			left = 0;
 +		}
 +		if(right > 10)
 +		{
 +			if(tileMap[tileY][tileX+1] == 1)
 +			{
 +				right = 0;
 +			}
 +			else
 +			{
 +				pos_x++;
 +			}
 +			right = 0;
 +		}
 +		if(up > 10)
 +		{
 +			if(tileMap[tileY+1][tileX] == 1)
 +			{
 +				up = 0;
 +			}
 +			else
 +			{
 +				pos_y++;
 +			}
 +		up = 0;
 +		}
 +		if(down > 10)
 +		{
 +			if( tileMap[tileY][tileX] == 1)
 +			{
 +				down = 0;
 +			}
 +			else
 +			{
 +				pos_y--;
 +			}
 +			down = 0;
 +		}
 +		// send data via SPI
 +		data_send[0] = 0b00000000; // first byte is address
 +		data_send[1] = pos_y_bit[0] ;
 +		data_send[2] = pos_y_bit[1];
 +		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
 +		HAL_SPI_Transmit(&hspi1, data_send, 3, HAL_MAX_DELAY); //3*8 bit
 +		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 +		data_send[0] = 0b01000000; // first byte is address
 +		data_send[1] = pos_x_bit[0] ;
 +		data_send[2] = pos_x_bit[1];
 +		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
 +		HAL_SPI_Transmit(&hspi1, data_send, 3, HAL_MAX_DELAY); //3*8 bit
 +		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 +
 +
 +    /* USER CODE END WHILE */
 +
 +    /* USER CODE BEGIN 3 */
 +  }
 +  /* USER CODE END 3 */
 +}
 +
 +/**
 +  * @brief System Clock Configuration
 +  * @retval None
 +  */
 +void SystemClock_Config(void)
 +{
 +  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 +  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 +
 +  /** Initializes the RCC Oscillators according to the specified parameters
 +  * in the RCC_OscInitTypeDef structure.
 +  */
 +  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 +  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 +  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 +  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
 +  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +
 +  /** Initializes the CPU, AHB and APB buses clocks
 +  */
 +  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 +                              |RCC_CLOCKTYPE_PCLK1;
 +  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
 +  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 +  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 +
 +  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +}
 +
 +/**
 +  * @brief SPI1 Initialization Function
 +  * @param None
 +  * @retval None
 +  */
 +static void MX_SPI1_Init(void)
 +{
 +
 +  /* USER CODE BEGIN SPI1_Init 0 */
 +
 +  /* USER CODE END SPI1_Init 0 */
 +
 +  /* USER CODE BEGIN SPI1_Init 1 */
 +
 +  /* USER CODE END SPI1_Init 1 */
 +  /* SPI1 parameter configuration*/
 +  hspi1.Instance = SPI1;
 +  hspi1.Init.Mode = SPI_MODE_MASTER;
 +  hspi1.Init.Direction = SPI_DIRECTION_1LINE;
 +  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
 +  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
 +  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 +  hspi1.Init.NSS = SPI_NSS_SOFT;
 +  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
 +  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 +  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
 +  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 +  hspi1.Init.CRCPolynomial = 7;
 +  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 +  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
 +  if (HAL_SPI_Init(&hspi1) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +  /* USER CODE BEGIN SPI1_Init 2 */
 +
 +  /* USER CODE END SPI1_Init 2 */
 +
 +}
 +
 +/**
 +  * @brief TIM3 Initialization Function
 +  * @param None
 +  * @retval None
 +  */
 +static void MX_TIM3_Init(void)
 +{
 +
 +  /* USER CODE BEGIN TIM3_Init 0 */
 +
 +  /* USER CODE END TIM3_Init 0 */
 +
 +  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 +  TIM_MasterConfigTypeDef sMasterConfig = {0};
 +
 +  /* USER CODE BEGIN TIM3_Init 1 */
 +
 +  /* USER CODE END TIM3_Init 1 */
 +  htim3.Instance = TIM3;
 +  htim3.Init.Prescaler = 7999;
 +  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
 +  htim3.Init.Period = 65535;
 +  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 +  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 +  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
 +  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 +  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 +  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
 +  {
 +    Error_Handler();
 +  }
 +  /* USER CODE BEGIN TIM3_Init 2 */
 +
 +  /* USER CODE END TIM3_Init 2 */
 +
 +}
 +
 +/**
 +  * @brief GPIO Initialization Function
 +  * @param None
 +  * @retval None
 +  */
 +static void MX_GPIO_Init(void)
 +{
 +  GPIO_InitTypeDef GPIO_InitStruct = {0};
 +
 +  /* GPIO Ports Clock Enable */
 +  __HAL_RCC_GPIOA_CLK_ENABLE();
 +  __HAL_RCC_GPIOB_CLK_ENABLE();
 +
 +  /*Configure GPIO pin Output Level */
 +  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 +
 +  /*Configure GPIO pin : PA9 */
 +  GPIO_InitStruct.Pin = GPIO_PIN_9;
 +  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);
 +
 +  /*Configure GPIO pins : PB4 PB5 PB6 PB8 */
 +  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_8;
 +  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 +  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
 +  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 +
 +}
 +
 +/* USER CODE BEGIN 4 */
 +
 +/* USER CODE END 4 */
 +
 +/**
 +  * @brief  This function is executed in case of error occurrence.
 +  * @retval None
 +  */
 +void Error_Handler(void)
 +{
 +  /* USER CODE BEGIN Error_Handler_Debug */
 +  /* User can add his own implementation to report the HAL error return state */
 +  __disable_irq();
 +  while (1)
 +  {
 +  }
 +  /* USER CODE END Error_Handler_Debug */
 +}
 +
 +#ifdef  USE_FULL_ASSERT
 +/**
 +  * @brief  Reports the name of the source file and the source line number
 +  *         where the assert_param error has occurred.
 +  * @param  file: pointer to the source file name
 +  * @param  line: assert_param error line source number
 +  * @retval None
 +  */
 +void assert_failed(uint8_t *file, uint32_t line)
 +{
 +  /* USER CODE BEGIN 6 */
 +  /* User can add his own implementation to report the file name and line number,
 +     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 +  /* USER CODE END 6 */
 +}
 +#endif /* USE_FULL_ASSERT */
 diff --git a/GameLogic/stm32/main.h b/GameLogic/stm32/main.h new file mode 100644 index 0000000..4495405 --- /dev/null +++ b/GameLogic/stm32/main.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file           : main.h
 +  * @brief          : Header for main.c file.
 +  *                   This file contains the common defines of the application.
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2023 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 +  ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +
 +/* Define to prevent recursive inclusion -------------------------------------*/
 +#ifndef __MAIN_H
 +#define __MAIN_H
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +
 +/* Includes ------------------------------------------------------------------*/
 +#include "stm32f0xx_hal.h"
 +
 +/* Private includes ----------------------------------------------------------*/
 +/* USER CODE BEGIN Includes */
 +
 +/* USER CODE END Includes */
 +
 +/* Exported types ------------------------------------------------------------*/
 +/* USER CODE BEGIN ET */
 +
 +/* USER CODE END ET */
 +
 +/* Exported constants --------------------------------------------------------*/
 +/* USER CODE BEGIN EC */
 +
 +/* USER CODE END EC */
 +
 +/* Exported macro ------------------------------------------------------------*/
 +/* USER CODE BEGIN EM */
 +
 +/* USER CODE END EM */
 +
 +/* Exported functions prototypes ---------------------------------------------*/
 +void Error_Handler(void);
 +
 +/* USER CODE BEGIN EFP */
 +
 +/* USER CODE END EFP */
 +
 +/* Private defines -----------------------------------------------------------*/
 +
 +/* USER CODE BEGIN Private defines */
 +
 +/* USER CODE END Private defines */
 +
 +#ifdef __cplusplus
 +}
 +#endif
 +
 +#endif /* __MAIN_H */
 diff --git a/GameLogic/stm32/stm32Design.md b/GameLogic/stm32/stm32Design.md new file mode 100644 index 0000000..19f0aa3 --- /dev/null +++ b/GameLogic/stm32/stm32Design.md @@ -0,0 +1,17 @@ +Pin layout  + +| pin STM | function | +|---------|----------| +| PA5 / D13 | SPI clock | +| PA7 / D11 | SPI MOSI | +| PA9 / D8 | SPI cs | +| PB4 / D5 | button 1 | +| PB5 / D4 | button 2 | +| PB6 / D10 | button 3 | +| PB8 / D15 | button 4 | + +| pin FPGA | function | +|---------|----------| +| JB 7 | SPI clock | +| JB 8 | SPI data | +| JB 9 | SPI cs | diff --git a/GameLogic/stm32/stm32f0xx_hal_conf.h b/GameLogic/stm32/stm32f0xx_hal_conf.h new file mode 100644 index 0000000..02785c6 --- /dev/null +++ b/GameLogic/stm32/stm32f0xx_hal_conf.h @@ -0,0 +1,322 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file    stm32f0xx_hal_conf.h
 +  * @brief   HAL configuration file.
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2016 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 +  ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +
 +/* Define to prevent recursive inclusion -------------------------------------*/
 +#ifndef __STM32F0xx_HAL_CONF_H
 +#define __STM32F0xx_HAL_CONF_H
 +
 +#ifdef __cplusplus
 + extern "C" {
 +#endif
 +
 +/* Exported types ------------------------------------------------------------*/
 +/* Exported constants --------------------------------------------------------*/
 +
 +/* ########################## Module Selection ############################## */
 +/**
 +  * @brief This is the list of modules to be used in the HAL driver
 +  */
 +#define HAL_MODULE_ENABLED
 +  /*#define HAL_ADC_MODULE_ENABLED   */
 +/*#define HAL_CRYP_MODULE_ENABLED   */
 +/*#define HAL_CAN_MODULE_ENABLED   */
 +/*#define HAL_CEC_MODULE_ENABLED   */
 +/*#define HAL_COMP_MODULE_ENABLED   */
 +/*#define HAL_CRC_MODULE_ENABLED   */
 +/*#define HAL_CRYP_MODULE_ENABLED   */
 +/*#define HAL_TSC_MODULE_ENABLED   */
 +/*#define HAL_DAC_MODULE_ENABLED   */
 +/*#define HAL_I2S_MODULE_ENABLED   */
 +/*#define HAL_IWDG_MODULE_ENABLED   */
 +/*#define HAL_LCD_MODULE_ENABLED   */
 +/*#define HAL_LPTIM_MODULE_ENABLED   */
 +/*#define HAL_RNG_MODULE_ENABLED   */
 +/*#define HAL_RTC_MODULE_ENABLED   */
 +#define HAL_SPI_MODULE_ENABLED
 +#define HAL_TIM_MODULE_ENABLED
 +/*#define HAL_UART_MODULE_ENABLED   */
 +/*#define HAL_USART_MODULE_ENABLED   */
 +/*#define HAL_IRDA_MODULE_ENABLED   */
 +/*#define HAL_SMARTCARD_MODULE_ENABLED   */
 +/*#define HAL_SMBUS_MODULE_ENABLED   */
 +/*#define HAL_WWDG_MODULE_ENABLED   */
 +/*#define HAL_PCD_MODULE_ENABLED   */
 +#define HAL_CORTEX_MODULE_ENABLED
 +#define HAL_DMA_MODULE_ENABLED
 +#define HAL_FLASH_MODULE_ENABLED
 +#define HAL_GPIO_MODULE_ENABLED
 +#define HAL_EXTI_MODULE_ENABLED
 +#define HAL_PWR_MODULE_ENABLED
 +#define HAL_RCC_MODULE_ENABLED
 +#define HAL_I2C_MODULE_ENABLED
 +
 +/* ########################## HSE/HSI Values adaptation ##################### */
 +/**
 +  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
 +  *        This value is used by the RCC HAL module to compute the system frequency
 +  *        (when HSE is used as system clock source, directly or through the PLL).
 +  */
 +#if !defined  (HSE_VALUE)
 +  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
 +#endif /* HSE_VALUE */
 +
 +/**
 +  * @brief In the following line adjust the External High Speed oscillator (HSE) Startup
 +  *        Timeout value
 +  */
 +#if !defined  (HSE_STARTUP_TIMEOUT)
 +  #define HSE_STARTUP_TIMEOUT    ((uint32_t)100)   /*!< Time out for HSE start up, in ms */
 +#endif /* HSE_STARTUP_TIMEOUT */
 +
 +/**
 +  * @brief Internal High Speed oscillator (HSI) value.
 +  *        This value is used by the RCC HAL module to compute the system frequency
 +  *        (when HSI is used as system clock source, directly or through the PLL).
 +  */
 +#if !defined  (HSI_VALUE)
 +  #define HSI_VALUE    ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/
 +#endif /* HSI_VALUE */
 +
 +/**
 +  * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup
 +  *        Timeout value
 +  */
 +#if !defined  (HSI_STARTUP_TIMEOUT)
 + #define HSI_STARTUP_TIMEOUT   ((uint32_t)5000) /*!< Time out for HSI start up */
 +#endif /* HSI_STARTUP_TIMEOUT */
 +
 +/**
 +  * @brief Internal High Speed oscillator for ADC (HSI14) value.
 +  */
 +#if !defined  (HSI14_VALUE)
 +#define HSI14_VALUE ((uint32_t)14000000) /*!< Value of the Internal High Speed oscillator for ADC in Hz.
 +                                             The real value may vary depending on the variations
 +                                             in voltage and temperature.  */
 +#endif /* HSI14_VALUE */
 +
 +/**
 +  * @brief Internal High Speed oscillator for USB (HSI48) value.
 +  */
 +#if !defined  (HSI48_VALUE)
 +  #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal High Speed oscillator for USB in Hz.
 +                                             The real value may vary depending on the variations
 +                                             in voltage and temperature.  */
 +#endif /* HSI48_VALUE */
 +
 +/**
 +  * @brief Internal Low Speed oscillator (LSI) value.
 +  */
 +#if !defined  (LSI_VALUE)
 +  #define LSI_VALUE  ((uint32_t)40000)
 +#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz
 +                                             The real value may vary depending on the variations
 +                                             in voltage and temperature.  */
 +/**
 +  * @brief External Low Speed oscillator (LSI) value.
 +  */
 +#if !defined  (LSE_VALUE)
 +  #define LSE_VALUE  ((uint32_t)32768)    /*!< Value of the External Low Speed oscillator in Hz */
 +#endif /* LSE_VALUE */
 +
 +/**
 +  * @brief Time out for LSE start up value in ms.
 +  */
 +#if !defined  (LSE_STARTUP_TIMEOUT)
 +  #define LSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for LSE start up, in ms */
 +#endif /* LSE_STARTUP_TIMEOUT */
 +
 +/* Tip: To avoid modifying this file each time you need to use different HSE,
 +   ===  you can define the HSE value in your toolchain compiler preprocessor. */
 +
 +/* ########################### System Configuration ######################### */
 +/**
 +  * @brief This is the HAL system configuration section
 +  */
 +#define  VDD_VALUE                    ((uint32_t)3300) /*!< Value of VDD in mv */
 +#define  TICK_INT_PRIORITY            ((uint32_t)3)    /*!< tick interrupt priority (lowest by default)  */
 +                                                                              /*  Warning: Must be set to higher priority for HAL_Delay()  */
 +                                                                              /*  and HAL_GetTick() usage under interrupt context          */
 +#define  USE_RTOS                     0
 +#define  PREFETCH_ENABLE              1
 +#define  INSTRUCTION_CACHE_ENABLE     0
 +#define  DATA_CACHE_ENABLE            0
 +#define  USE_SPI_CRC                     0U
 +
 +#define  USE_HAL_ADC_REGISTER_CALLBACKS         0U /* ADC register callback disabled       */
 +#define  USE_HAL_CAN_REGISTER_CALLBACKS         0U /* CAN register callback disabled       */
 +#define  USE_HAL_COMP_REGISTER_CALLBACKS        0U /* COMP register callback disabled      */
 +#define  USE_HAL_CEC_REGISTER_CALLBACKS         0U /* CEC register callback disabled       */
 +#define  USE_HAL_DAC_REGISTER_CALLBACKS         0U /* DAC register callback disabled       */
 +#define  USE_HAL_I2C_REGISTER_CALLBACKS         0U /* I2C register callback disabled       */
 +#define  USE_HAL_SMBUS_REGISTER_CALLBACKS       0U /* SMBUS register callback disabled     */
 +#define  USE_HAL_UART_REGISTER_CALLBACKS        0U /* UART register callback disabled      */
 +#define  USE_HAL_USART_REGISTER_CALLBACKS       0U /* USART register callback disabled     */
 +#define  USE_HAL_IRDA_REGISTER_CALLBACKS        0U /* IRDA register callback disabled      */
 +#define  USE_HAL_SMARTCARD_REGISTER_CALLBACKS   0U /* SMARTCARD register callback disabled */
 +#define  USE_HAL_WWDG_REGISTER_CALLBACKS        0U /* WWDG register callback disabled      */
 +#define  USE_HAL_RTC_REGISTER_CALLBACKS         0U /* RTC register callback disabled       */
 +#define  USE_HAL_SPI_REGISTER_CALLBACKS         0U /* SPI register callback disabled       */
 +#define  USE_HAL_I2S_REGISTER_CALLBACKS         0U /* I2S register callback disabled       */
 +#define  USE_HAL_TIM_REGISTER_CALLBACKS         0U /* TIM register callback disabled       */
 +#define  USE_HAL_TSC_REGISTER_CALLBACKS         0U /* TSC register callback disabled       */
 +#define  USE_HAL_PCD_REGISTER_CALLBACKS         0U /* PCD register callback disabled       */
 +
 +/* ########################## Assert Selection ############################## */
 +/**
 +  * @brief Uncomment the line below to expanse the "assert_param" macro in the
 +  *        HAL drivers code
 +  */
 +/* #define USE_FULL_ASSERT   1U */
 +
 +/* Includes ------------------------------------------------------------------*/
 +/**
 +  * @brief Include module's header file
 +  */
 +
 +#ifdef HAL_RCC_MODULE_ENABLED
 + #include "stm32f0xx_hal_rcc.h"
 +#endif /* HAL_RCC_MODULE_ENABLED */
 +
 +#ifdef HAL_GPIO_MODULE_ENABLED
 + #include "stm32f0xx_hal_gpio.h"
 +#endif /* HAL_GPIO_MODULE_ENABLED */
 +
 +#ifdef HAL_EXTI_MODULE_ENABLED
 +  #include "stm32f0xx_hal_exti.h"
 +#endif /* HAL_EXTI_MODULE_ENABLED */
 +
 +#ifdef HAL_DMA_MODULE_ENABLED
 +  #include "stm32f0xx_hal_dma.h"
 +#endif /* HAL_DMA_MODULE_ENABLED */
 +
 +#ifdef HAL_CORTEX_MODULE_ENABLED
 + #include "stm32f0xx_hal_cortex.h"
 +#endif /* HAL_CORTEX_MODULE_ENABLED */
 +
 +#ifdef HAL_ADC_MODULE_ENABLED
 + #include "stm32f0xx_hal_adc.h"
 +#endif /* HAL_ADC_MODULE_ENABLED */
 +
 +#ifdef HAL_CAN_MODULE_ENABLED
 + #include "stm32f0xx_hal_can.h"
 +#endif /* HAL_CAN_MODULE_ENABLED */
 +
 +#ifdef HAL_CEC_MODULE_ENABLED
 + #include "stm32f0xx_hal_cec.h"
 +#endif /* HAL_CEC_MODULE_ENABLED */
 +
 +#ifdef HAL_COMP_MODULE_ENABLED
 + #include "stm32f0xx_hal_comp.h"
 +#endif /* HAL_COMP_MODULE_ENABLED */
 +
 +#ifdef HAL_CRC_MODULE_ENABLED
 + #include "stm32f0xx_hal_crc.h"
 +#endif /* HAL_CRC_MODULE_ENABLED */
 +
 +#ifdef HAL_DAC_MODULE_ENABLED
 + #include "stm32f0xx_hal_dac.h"
 +#endif /* HAL_DAC_MODULE_ENABLED */
 +
 +#ifdef HAL_FLASH_MODULE_ENABLED
 + #include "stm32f0xx_hal_flash.h"
 +#endif /* HAL_FLASH_MODULE_ENABLED */
 +
 +#ifdef HAL_I2C_MODULE_ENABLED
 + #include "stm32f0xx_hal_i2c.h"
 +#endif /* HAL_I2C_MODULE_ENABLED */
 +
 +#ifdef HAL_I2S_MODULE_ENABLED
 + #include "stm32f0xx_hal_i2s.h"
 +#endif /* HAL_I2S_MODULE_ENABLED */
 +
 +#ifdef HAL_IRDA_MODULE_ENABLED
 + #include "stm32f0xx_hal_irda.h"
 +#endif /* HAL_IRDA_MODULE_ENABLED */
 +
 +#ifdef HAL_IWDG_MODULE_ENABLED
 + #include "stm32f0xx_hal_iwdg.h"
 +#endif /* HAL_IWDG_MODULE_ENABLED */
 +
 +#ifdef HAL_PCD_MODULE_ENABLED
 + #include "stm32f0xx_hal_pcd.h"
 +#endif /* HAL_PCD_MODULE_ENABLED */
 +
 +#ifdef HAL_PWR_MODULE_ENABLED
 + #include "stm32f0xx_hal_pwr.h"
 +#endif /* HAL_PWR_MODULE_ENABLED */
 +
 +#ifdef HAL_RTC_MODULE_ENABLED
 + #include "stm32f0xx_hal_rtc.h"
 +#endif /* HAL_RTC_MODULE_ENABLED */
 +
 +#ifdef HAL_SMARTCARD_MODULE_ENABLED
 + #include "stm32f0xx_hal_smartcard.h"
 +#endif /* HAL_SMARTCARD_MODULE_ENABLED */
 +
 +#ifdef HAL_SMBUS_MODULE_ENABLED
 + #include "stm32f0xx_hal_smbus.h"
 +#endif /* HAL_SMBUS_MODULE_ENABLED */
 +
 +#ifdef HAL_SPI_MODULE_ENABLED
 + #include "stm32f0xx_hal_spi.h"
 +#endif /* HAL_SPI_MODULE_ENABLED */
 +
 +#ifdef HAL_TIM_MODULE_ENABLED
 + #include "stm32f0xx_hal_tim.h"
 +#endif /* HAL_TIM_MODULE_ENABLED */
 +
 +#ifdef HAL_TSC_MODULE_ENABLED
 + #include "stm32f0xx_hal_tsc.h"
 +#endif /* HAL_TSC_MODULE_ENABLED */
 +
 +#ifdef HAL_UART_MODULE_ENABLED
 + #include "stm32f0xx_hal_uart.h"
 +#endif /* HAL_UART_MODULE_ENABLED */
 +
 +#ifdef HAL_USART_MODULE_ENABLED
 + #include "stm32f0xx_hal_usart.h"
 +#endif /* HAL_USART_MODULE_ENABLED */
 +
 +#ifdef HAL_WWDG_MODULE_ENABLED
 + #include "stm32f0xx_hal_wwdg.h"
 +#endif /* HAL_WWDG_MODULE_ENABLED */
 +
 +/* Exported macro ------------------------------------------------------------*/
 +#ifdef  USE_FULL_ASSERT
 +/**
 +  * @brief  The assert_param macro is used for function's parameters check.
 +  * @param  expr If expr is false, it calls assert_failed function
 +  *         which reports the name of the source file and the source
 +  *         line number of the call that failed.
 +  *         If expr is true, it returns no value.
 +  * @retval None
 +  */
 +  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
 +/* Exported functions ------------------------------------------------------- */
 +  void assert_failed(uint8_t* file, uint32_t line);
 +#else
 +  #define assert_param(expr) ((void)0U)
 +#endif /* USE_FULL_ASSERT */
 +
 +#ifdef __cplusplus
 +}
 +#endif
 +
 +#endif /* __STM32F0xx_HAL_CONF_H */
 +
 diff --git a/GameLogic/stm32/stm32f0xx_hal_msp.c b/GameLogic/stm32/stm32f0xx_hal_msp.c new file mode 100644 index 0000000..93bc303 --- /dev/null +++ b/GameLogic/stm32/stm32f0xx_hal_msp.c @@ -0,0 +1,190 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file         stm32f0xx_hal_msp.c
 +  * @brief        This file provides code for the MSP Initialization
 +  *               and de-Initialization codes.
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2023 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 +  ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +
 +/* Includes ------------------------------------------------------------------*/
 +#include "main.h"
 +/* USER CODE BEGIN Includes */
 +
 +/* USER CODE END Includes */
 +
 +/* Private typedef -----------------------------------------------------------*/
 +/* USER CODE BEGIN TD */
 +
 +/* USER CODE END TD */
 +
 +/* Private define ------------------------------------------------------------*/
 +/* USER CODE BEGIN Define */
 +
 +/* USER CODE END Define */
 +
 +/* Private macro -------------------------------------------------------------*/
 +/* USER CODE BEGIN Macro */
 +
 +/* USER CODE END Macro */
 +
 +/* Private variables ---------------------------------------------------------*/
 +/* USER CODE BEGIN PV */
 +
 +/* USER CODE END PV */
 +
 +/* Private function prototypes -----------------------------------------------*/
 +/* USER CODE BEGIN PFP */
 +
 +/* USER CODE END PFP */
 +
 +/* External functions --------------------------------------------------------*/
 +/* USER CODE BEGIN ExternalFunctions */
 +
 +/* USER CODE END ExternalFunctions */
 +
 +/* USER CODE BEGIN 0 */
 +
 +/* USER CODE END 0 */
 +/**
 +  * Initializes the Global MSP.
 +  */
 +void HAL_MspInit(void)
 +{
 +  /* USER CODE BEGIN MspInit 0 */
 +
 +  /* USER CODE END MspInit 0 */
 +
 +  __HAL_RCC_SYSCFG_CLK_ENABLE();
 +  __HAL_RCC_PWR_CLK_ENABLE();
 +
 +  /* System interrupt init*/
 +
 +  /* USER CODE BEGIN MspInit 1 */
 +
 +  /* USER CODE END MspInit 1 */
 +}
 +
 +/**
 +* @brief SPI MSP Initialization
 +* This function configures the hardware resources used in this example
 +* @param hspi: SPI handle pointer
 +* @retval None
 +*/
 +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
 +{
 +  GPIO_InitTypeDef GPIO_InitStruct = {0};
 +  if(hspi->Instance==SPI1)
 +  {
 +  /* USER CODE BEGIN SPI1_MspInit 0 */
 +
 +  /* USER CODE END SPI1_MspInit 0 */
 +    /* Peripheral clock enable */
 +    __HAL_RCC_SPI1_CLK_ENABLE();
 +
 +    __HAL_RCC_GPIOA_CLK_ENABLE();
 +    /**SPI1 GPIO Configuration
 +    PA5     ------> SPI1_SCK
 +    PA7     ------> SPI1_MOSI
 +    */
 +    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
 +    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 +    GPIO_InitStruct.Pull = GPIO_NOPULL;
 +    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 +    GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
 +    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 +
 +  /* USER CODE BEGIN SPI1_MspInit 1 */
 +
 +  /* USER CODE END SPI1_MspInit 1 */
 +  }
 +
 +}
 +
 +/**
 +* @brief SPI MSP De-Initialization
 +* This function freeze the hardware resources used in this example
 +* @param hspi: SPI handle pointer
 +* @retval None
 +*/
 +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
 +{
 +  if(hspi->Instance==SPI1)
 +  {
 +  /* USER CODE BEGIN SPI1_MspDeInit 0 */
 +
 +  /* USER CODE END SPI1_MspDeInit 0 */
 +    /* Peripheral clock disable */
 +    __HAL_RCC_SPI1_CLK_DISABLE();
 +
 +    /**SPI1 GPIO Configuration
 +    PA5     ------> SPI1_SCK
 +    PA7     ------> SPI1_MOSI
 +    */
 +    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7);
 +
 +  /* USER CODE BEGIN SPI1_MspDeInit 1 */
 +
 +  /* USER CODE END SPI1_MspDeInit 1 */
 +  }
 +
 +}
 +
 +/**
 +* @brief TIM_Base MSP Initialization
 +* This function configures the hardware resources used in this example
 +* @param htim_base: TIM_Base handle pointer
 +* @retval None
 +*/
 +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
 +{
 +  if(htim_base->Instance==TIM3)
 +  {
 +  /* USER CODE BEGIN TIM3_MspInit 0 */
 +
 +  /* USER CODE END TIM3_MspInit 0 */
 +    /* Peripheral clock enable */
 +    __HAL_RCC_TIM3_CLK_ENABLE();
 +  /* USER CODE BEGIN TIM3_MspInit 1 */
 +
 +  /* USER CODE END TIM3_MspInit 1 */
 +  }
 +
 +}
 +
 +/**
 +* @brief TIM_Base MSP De-Initialization
 +* This function freeze the hardware resources used in this example
 +* @param htim_base: TIM_Base handle pointer
 +* @retval None
 +*/
 +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
 +{
 +  if(htim_base->Instance==TIM3)
 +  {
 +  /* USER CODE BEGIN TIM3_MspDeInit 0 */
 +
 +  /* USER CODE END TIM3_MspDeInit 0 */
 +    /* Peripheral clock disable */
 +    __HAL_RCC_TIM3_CLK_DISABLE();
 +  /* USER CODE BEGIN TIM3_MspDeInit 1 */
 +
 +  /* USER CODE END TIM3_MspDeInit 1 */
 +  }
 +
 +}
 +
 +/* USER CODE BEGIN 1 */
 +
 +/* USER CODE END 1 */
 diff --git a/GameLogic/stm32/stm32f0xx_it.c b/GameLogic/stm32/stm32f0xx_it.c new file mode 100644 index 0000000..ced8734 --- /dev/null +++ b/GameLogic/stm32/stm32f0xx_it.c @@ -0,0 +1,145 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file    stm32f0xx_it.c
 +  * @brief   Interrupt Service Routines.
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2023 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 +  ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +
 +/* Includes ------------------------------------------------------------------*/
 +#include "main.h"
 +#include "stm32f0xx_it.h"
 +/* Private includes ----------------------------------------------------------*/
 +/* USER CODE BEGIN Includes */
 +/* USER CODE END Includes */
 +
 +/* Private typedef -----------------------------------------------------------*/
 +/* USER CODE BEGIN TD */
 +
 +/* USER CODE END TD */
 +
 +/* Private define ------------------------------------------------------------*/
 +/* USER CODE BEGIN PD */
 +
 +/* USER CODE END PD */
 +
 +/* Private macro -------------------------------------------------------------*/
 +/* USER CODE BEGIN PM */
 +
 +/* USER CODE END PM */
 +
 +/* Private variables ---------------------------------------------------------*/
 +/* USER CODE BEGIN PV */
 +
 +/* USER CODE END PV */
 +
 +/* Private function prototypes -----------------------------------------------*/
 +/* USER CODE BEGIN PFP */
 +
 +/* USER CODE END PFP */
 +
 +/* Private user code ---------------------------------------------------------*/
 +/* USER CODE BEGIN 0 */
 +
 +/* USER CODE END 0 */
 +
 +/* External variables --------------------------------------------------------*/
 +
 +/* USER CODE BEGIN EV */
 +
 +/* USER CODE END EV */
 +
 +/******************************************************************************/
 +/*           Cortex-M0 Processor Interruption and Exception Handlers          */
 +/******************************************************************************/
 +/**
 +  * @brief This function handles Non maskable interrupt.
 +  */
 +void NMI_Handler(void)
 +{
 +  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
 +
 +  /* USER CODE END NonMaskableInt_IRQn 0 */
 +  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
 +  while (1)
 +  {
 +  }
 +  /* USER CODE END NonMaskableInt_IRQn 1 */
 +}
 +
 +/**
 +  * @brief This function handles Hard fault interrupt.
 +  */
 +void HardFault_Handler(void)
 +{
 +  /* USER CODE BEGIN HardFault_IRQn 0 */
 +
 +  /* USER CODE END HardFault_IRQn 0 */
 +  while (1)
 +  {
 +    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
 +    /* USER CODE END W1_HardFault_IRQn 0 */
 +  }
 +}
 +
 +/**
 +  * @brief This function handles System service call via SWI instruction.
 +  */
 +void SVC_Handler(void)
 +{
 +  /* USER CODE BEGIN SVC_IRQn 0 */
 +
 +  /* USER CODE END SVC_IRQn 0 */
 +  /* USER CODE BEGIN SVC_IRQn 1 */
 +
 +  /* USER CODE END SVC_IRQn 1 */
 +}
 +
 +/**
 +  * @brief This function handles Pendable request for system service.
 +  */
 +void PendSV_Handler(void)
 +{
 +  /* USER CODE BEGIN PendSV_IRQn 0 */
 +
 +  /* USER CODE END PendSV_IRQn 0 */
 +  /* USER CODE BEGIN PendSV_IRQn 1 */
 +
 +  /* USER CODE END PendSV_IRQn 1 */
 +}
 +
 +/**
 +  * @brief This function handles System tick timer.
 +  */
 +void SysTick_Handler(void)
 +{
 +  /* USER CODE BEGIN SysTick_IRQn 0 */
 +
 +  /* USER CODE END SysTick_IRQn 0 */
 +  HAL_IncTick();
 +  /* USER CODE BEGIN SysTick_IRQn 1 */
 +
 +  /* USER CODE END SysTick_IRQn 1 */
 +}
 +
 +/******************************************************************************/
 +/* STM32F0xx Peripheral Interrupt Handlers                                    */
 +/* Add here the Interrupt Handlers for the used peripherals.                  */
 +/* For the available peripheral interrupt handler names,                      */
 +/* please refer to the startup file (startup_stm32f0xx.s).                    */
 +/******************************************************************************/
 +
 +/* USER CODE BEGIN 1 */
 +
 +/* USER CODE END 1 */
 diff --git a/GameLogic/stm32/stm32f0xx_it.h b/GameLogic/stm32/stm32f0xx_it.h new file mode 100644 index 0000000..a3fa1b9 --- /dev/null +++ b/GameLogic/stm32/stm32f0xx_it.h @@ -0,0 +1,62 @@ +/* USER CODE BEGIN Header */
 +/**
 +  ******************************************************************************
 +  * @file    stm32f0xx_it.h
 +  * @brief   This file contains the headers of the interrupt handlers.
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * Copyright (c) 2023 STMicroelectronics.
 +  * All rights reserved.
 +  *
 +  * This software is licensed under terms that can be found in the LICENSE file
 +  * in the root directory of this software component.
 +  * If no LICENSE file comes with this software, it is provided AS-IS.
 +  *
 + ******************************************************************************
 +  */
 +/* USER CODE END Header */
 +
 +/* Define to prevent recursive inclusion -------------------------------------*/
 +#ifndef __STM32F0xx_IT_H
 +#define __STM32F0xx_IT_H
 +
 +#ifdef __cplusplus
 + extern "C" {
 +#endif
 +
 +/* Private includes ----------------------------------------------------------*/
 +/* USER CODE BEGIN Includes */
 +
 +/* USER CODE END Includes */
 +
 +/* Exported types ------------------------------------------------------------*/
 +/* USER CODE BEGIN ET */
 +
 +/* USER CODE END ET */
 +
 +/* Exported constants --------------------------------------------------------*/
 +/* USER CODE BEGIN EC */
 +
 +/* USER CODE END EC */
 +
 +/* Exported macro ------------------------------------------------------------*/
 +/* USER CODE BEGIN EM */
 +
 +/* USER CODE END EM */
 +
 +/* Exported functions prototypes ---------------------------------------------*/
 +void NMI_Handler(void);
 +void HardFault_Handler(void);
 +void SVC_Handler(void);
 +void PendSV_Handler(void);
 +void SysTick_Handler(void);
 +/* USER CODE BEGIN EFP */
 +
 +/* USER CODE END EFP */
 +
 +#ifdef __cplusplus
 +}
 +#endif
 +
 +#endif /* __STM32F0xx_IT_H */
 diff --git a/GameLogic/stm32/syscalls.c b/GameLogic/stm32/syscalls.c new file mode 100644 index 0000000..f4278b7 --- /dev/null +++ b/GameLogic/stm32/syscalls.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file      syscalls.c + * @author    Auto-generated by STM32CubeIDE + * @brief     STM32CubeIDE Minimal System calls file + * + *            For more information about which c-functions + *            need which of these lowlevel functions + *            please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include <sys/stat.h> +#include <stdlib.h> +#include <errno.h> +#include <stdio.h> +#include <signal.h> +#include <time.h> +#include <sys/time.h> +#include <sys/times.h> + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ +  return 1; +} + +int _kill(int pid, int sig) +{ +  (void)pid; +  (void)sig; +  errno = EINVAL; +  return -1; +} + +void _exit (int status) +{ +  _kill(status, -1); +  while (1) {}    /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ +  (void)file; +  int DataIdx; + +  for (DataIdx = 0; DataIdx < len; DataIdx++) +  { +    *ptr++ = __io_getchar(); +  } + +  return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ +  (void)file; +  int DataIdx; + +  for (DataIdx = 0; DataIdx < len; DataIdx++) +  { +    __io_putchar(*ptr++); +  } +  return len; +} + +int _close(int file) +{ +  (void)file; +  return -1; +} + + +int _fstat(int file, struct stat *st) +{ +  (void)file; +  st->st_mode = S_IFCHR; +  return 0; +} + +int _isatty(int file) +{ +  (void)file; +  return 1; +} + +int _lseek(int file, int ptr, int dir) +{ +  (void)file; +  (void)ptr; +  (void)dir; +  return 0; +} + +int _open(char *path, int flags, ...) +{ +  (void)path; +  (void)flags; +  /* Pretend like we always fail */ +  return -1; +} + +int _wait(int *status) +{ +  (void)status; +  errno = ECHILD; +  return -1; +} + +int _unlink(char *name) +{ +  (void)name; +  errno = ENOENT; +  return -1; +} + +int _times(struct tms *buf) +{ +  (void)buf; +  return -1; +} + +int _stat(char *file, struct stat *st) +{ +  (void)file; +  st->st_mode = S_IFCHR; +  return 0; +} + +int _link(char *old, char *new) +{ +  (void)old; +  (void)new; +  errno = EMLINK; +  return -1; +} + +int _fork(void) +{ +  errno = EAGAIN; +  return -1; +} + +int _execve(char *name, char **argv, char **env) +{ +  (void)name; +  (void)argv; +  (void)env; +  errno = ENOMEM; +  return -1; +} diff --git a/GameLogic/stm32/sysmem.c b/GameLogic/stm32/sysmem.c new file mode 100644 index 0000000..54081ac --- /dev/null +++ b/GameLogic/stm32/sysmem.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file      sysmem.c + * @author    Generated by STM32CubeIDE + * @brief     STM32CubeIDE System Memory calls file + * + *            For more information about which C functions + *            need which of these lowlevel functions + *            please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include <errno.h> +#include <stdint.h> + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + *        and others from the C library + * + * @verbatim + * ############################################################################ + * #  .data  #  .bss  #       newlib heap       #          MSP stack          # + * #         #        #                         # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start      ^-- _end                             _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ +  extern uint8_t _end; /* Symbol defined in the linker script */ +  extern uint8_t _estack; /* Symbol defined in the linker script */ +  extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ +  const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; +  const uint8_t *max_heap = (uint8_t *)stack_limit; +  uint8_t *prev_heap_end; + +  /* Initialize heap end at first call */ +  if (NULL == __sbrk_heap_end) +  { +    __sbrk_heap_end = &_end; +  } + +  /* Protect heap from growing into the reserved MSP stack */ +  if (__sbrk_heap_end + incr > max_heap) +  { +    errno = ENOMEM; +    return (void *)-1; +  } + +  prev_heap_end = __sbrk_heap_end; +  __sbrk_heap_end += incr; + +  return (void *)prev_heap_end; +} diff --git a/GameLogic/stm32/system_stm32f0xx.c b/GameLogic/stm32/system_stm32f0xx.c new file mode 100644 index 0000000..1b0fbe5 --- /dev/null +++ b/GameLogic/stm32/system_stm32f0xx.c @@ -0,0 +1,247 @@ +/**
 +  ******************************************************************************
 +  * @file    system_stm32f0xx.c
 +  * @author  MCD Application Team
 +  * @brief   CMSIS Cortex-M0 Device Peripheral Access Layer System Source File.
 +  *
 +  * 1. This file provides two functions and one global variable to be called from
 +  *    user application:
 +  *      - SystemInit(): This function is called at startup just after reset and 
 +  *                      before branch to main program. This call is made inside
 +  *                      the "startup_stm32f0xx.s" file.
 +  *
 +  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 +  *                                  by the user application to setup the SysTick
 +  *                                  timer or configure other parameters.
 +  *
 +  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 +  *                                 be called whenever the core clock is changed
 +  *                                 during program execution.
 +  *
 +  *
 +  ******************************************************************************
 +  * @attention
 +  *
 +  * <h2><center>© Copyright (c) 2016 STMicroelectronics.
 +  * All rights reserved.</center></h2>
 +  *
 +  * This software component is licensed by ST under BSD 3-Clause license,
 +  * the "License"; You may not use this file except in compliance with the
 +  * License. You may obtain a copy of the License at:
 +  *                        opensource.org/licenses/BSD-3-Clause
 +  *
 +  ******************************************************************************
 +  */
 +
 +/** @addtogroup CMSIS
 +  * @{
 +  */
 +
 +/** @addtogroup stm32f0xx_system
 +  * @{
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_Includes
 +  * @{
 +  */
 +
 +#include "stm32f0xx.h"
 +
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_TypesDefinitions
 +  * @{
 +  */
 +
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_Defines
 +  * @{
 +  */
 +#if !defined  (HSE_VALUE) 
 +  #define HSE_VALUE    ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz.
 +                                                This value can be provided and adapted by the user application. */
 +#endif /* HSE_VALUE */
 +
 +#if !defined  (HSI_VALUE)
 +  #define HSI_VALUE    ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz.
 +                                                This value can be provided and adapted by the user application. */
 +#endif /* HSI_VALUE */
 +
 +#if !defined (HSI48_VALUE)
 +#define HSI48_VALUE    ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz.
 +                                                 This value can be provided and adapted by the user application. */
 +#endif /* HSI48_VALUE */
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_Macros
 +  * @{
 +  */
 +
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_Variables
 +  * @{
 +  */
 +  /* This variable is updated in three ways:
 +      1) by calling CMSIS function SystemCoreClockUpdate()
 +      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 +      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
 +         Note: If you use this function to configure the system clock; then there
 +               is no need to call the 2 first functions listed above, since SystemCoreClock
 +               variable is updated automatically.
 +  */
 +uint32_t SystemCoreClock = 8000000;
 +
 +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 +const uint8_t APBPrescTable[8]  = {0, 0, 0, 0, 1, 2, 3, 4};
 +
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes
 +  * @{
 +  */
 +
 +/**
 +  * @}
 +  */
 +
 +/** @addtogroup STM32F0xx_System_Private_Functions
 +  * @{
 +  */
 +
 +/**
 +  * @brief  Setup the microcontroller system
 +  * @param  None
 +  * @retval None
 +  */
 +void SystemInit(void)
 +{
 +  /* NOTE :SystemInit(): This function is called at startup just after reset and 
 +                         before branch to main program. This call is made inside
 +                         the "startup_stm32f0xx.s" file.
 +                         User can setups the default system clock (System clock source, PLL Multiplier
 +                         and Divider factors, AHB/APBx prescalers and Flash settings).
 +   */
 +}
 +
 +/**
 +   * @brief  Update SystemCoreClock variable according to Clock Register Values.
 +  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 +  *         be used by the user application to setup the SysTick timer or configure
 +  *         other parameters.
 +  *
 +  * @note   Each time the core clock (HCLK) changes, this function must be called
 +  *         to update SystemCoreClock variable value. Otherwise, any configuration
 +  *         based on this variable will be incorrect.
 +  *
 +  * @note   - The system frequency computed by this function is not the real
 +  *           frequency in the chip. It is calculated based on the predefined
 +  *           constant and the selected clock source:
 +  *
 +  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
 +  *
 +  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
 +  *
 +  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
 +  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 +  *
 +  *         (*) HSI_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value
 +  *             8 MHz) but the real value may vary depending on the variations
 +  *             in voltage and temperature.
 +  *
 +  *         (**) HSE_VALUE is a constant defined in stm32f0xx_hal_conf.h file (its value
 +  *              depends on the application requirements), user has to ensure that HSE_VALUE
 +  *              is same as the real frequency of the crystal used. Otherwise, this function
 +  *              may have wrong result.
 +  *
 +  *         - The result of this function could be not correct when using fractional
 +  *           value for HSE crystal.
 +  *
 +  * @param  None
 +  * @retval None
 +  */
 +void SystemCoreClockUpdate (void)
 +{
 +  uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0;
 +
 +  /* Get SYSCLK source -------------------------------------------------------*/
 +  tmp = RCC->CFGR & RCC_CFGR_SWS;
 +
 +  switch (tmp)
 +  {
 +    case RCC_CFGR_SWS_HSI:  /* HSI used as system clock */
 +      SystemCoreClock = HSI_VALUE;
 +      break;
 +    case RCC_CFGR_SWS_HSE:  /* HSE used as system clock */
 +      SystemCoreClock = HSE_VALUE;
 +      break;
 +    case RCC_CFGR_SWS_PLL:  /* PLL used as system clock */
 +      /* Get PLL clock source and multiplication factor ----------------------*/
 +      pllmull = RCC->CFGR & RCC_CFGR_PLLMUL;
 +      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
 +      pllmull = ( pllmull >> 18) + 2;
 +      predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1;
 +
 +      if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
 +      {
 +        /* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */
 +        SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull;
 +      }
 +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx)
 +      else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV)
 +      {
 +        /* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */
 +        SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull;
 +      }
 +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */
 +      else
 +      {
 +#if defined(STM32F042x6) || defined(STM32F048xx)  || defined(STM32F070x6) \
 + || defined(STM32F078xx) || defined(STM32F071xB)  || defined(STM32F072xB) \
 + || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx)  || defined(STM32F030xC)
 +        /* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */
 +        SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull;
 +#else
 +        /* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */
 +        SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
 +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || 
 +          STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB ||
 +          STM32F091xC || STM32F098xx || STM32F030xC */
 +      }
 +      break;
 +    default: /* HSI used as system clock */
 +      SystemCoreClock = HSI_VALUE;
 +      break;
 +  }
 +  /* Compute HCLK clock frequency ----------------*/
 +  /* Get HCLK prescaler */
 +  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 +  /* HCLK clock frequency */
 +  SystemCoreClock >>= tmp;
 +}
 +
 +/**
 +  * @}
 +  */
 +
 +/**
 +  * @}
 +  */
 +
 +/**
 +  * @}
 +  */
 +
 +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 +
 |