xref: /btstack/port/stm32-f4discovery-cc256x/Src/main.c (revision 225f4ba4fe806afeda1ee8519bb5f4a8ce540af2)
1*225f4ba4SMatthias Ringwald /* USER CODE BEGIN Header */
2*225f4ba4SMatthias Ringwald /**
3*225f4ba4SMatthias Ringwald   ******************************************************************************
4*225f4ba4SMatthias Ringwald   * @file           : main.c
5*225f4ba4SMatthias Ringwald   * @brief          : Main program body
6*225f4ba4SMatthias Ringwald   ******************************************************************************
7*225f4ba4SMatthias Ringwald   * @attention
8*225f4ba4SMatthias Ringwald   *
9*225f4ba4SMatthias Ringwald   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10*225f4ba4SMatthias Ringwald   * All rights reserved.</center></h2>
11*225f4ba4SMatthias Ringwald   *
12*225f4ba4SMatthias Ringwald   * This software component is licensed by ST under BSD 3-Clause license,
13*225f4ba4SMatthias Ringwald   * the "License"; You may not use this file except in compliance with the
14*225f4ba4SMatthias Ringwald   * License. You may obtain a copy of the License at:
15*225f4ba4SMatthias Ringwald   *                        opensource.org/licenses/BSD-3-Clause
16*225f4ba4SMatthias Ringwald   *
17*225f4ba4SMatthias Ringwald   ******************************************************************************
18*225f4ba4SMatthias Ringwald   */
19*225f4ba4SMatthias Ringwald /* USER CODE END Header */
20*225f4ba4SMatthias Ringwald 
21*225f4ba4SMatthias Ringwald /* Includes ------------------------------------------------------------------*/
22*225f4ba4SMatthias Ringwald #include "main.h"
23*225f4ba4SMatthias Ringwald #include "dma.h"
24*225f4ba4SMatthias Ringwald #include "usart.h"
25*225f4ba4SMatthias Ringwald #include "gpio.h"
26*225f4ba4SMatthias Ringwald 
27*225f4ba4SMatthias Ringwald /* Private includes ----------------------------------------------------------*/
28*225f4ba4SMatthias Ringwald /* USER CODE BEGIN Includes */
29*225f4ba4SMatthias Ringwald #include "port.h"
30*225f4ba4SMatthias Ringwald /* USER CODE END Includes */
31*225f4ba4SMatthias Ringwald 
32*225f4ba4SMatthias Ringwald /* Private typedef -----------------------------------------------------------*/
33*225f4ba4SMatthias Ringwald /* USER CODE BEGIN PTD */
34*225f4ba4SMatthias Ringwald 
35*225f4ba4SMatthias Ringwald /* USER CODE END PTD */
36*225f4ba4SMatthias Ringwald 
37*225f4ba4SMatthias Ringwald /* Private define ------------------------------------------------------------*/
38*225f4ba4SMatthias Ringwald /* USER CODE BEGIN PD */
39*225f4ba4SMatthias Ringwald 
40*225f4ba4SMatthias Ringwald /* USER CODE END PD */
41*225f4ba4SMatthias Ringwald 
42*225f4ba4SMatthias Ringwald /* Private macro -------------------------------------------------------------*/
43*225f4ba4SMatthias Ringwald /* USER CODE BEGIN PM */
44*225f4ba4SMatthias Ringwald 
45*225f4ba4SMatthias Ringwald /* USER CODE END PM */
46*225f4ba4SMatthias Ringwald 
47*225f4ba4SMatthias Ringwald /* Private variables ---------------------------------------------------------*/
48*225f4ba4SMatthias Ringwald 
49*225f4ba4SMatthias Ringwald /* USER CODE BEGIN PV */
50*225f4ba4SMatthias Ringwald 
51*225f4ba4SMatthias Ringwald /* USER CODE END PV */
52*225f4ba4SMatthias Ringwald 
53*225f4ba4SMatthias Ringwald /* Private function prototypes -----------------------------------------------*/
54*225f4ba4SMatthias Ringwald void SystemClock_Config(void);
55*225f4ba4SMatthias Ringwald /* USER CODE BEGIN PFP */
56*225f4ba4SMatthias Ringwald 
57*225f4ba4SMatthias Ringwald /* USER CODE END PFP */
58*225f4ba4SMatthias Ringwald 
59*225f4ba4SMatthias Ringwald /* Private user code ---------------------------------------------------------*/
60*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 0 */
61*225f4ba4SMatthias Ringwald 
62*225f4ba4SMatthias Ringwald /* USER CODE END 0 */
63*225f4ba4SMatthias Ringwald 
64*225f4ba4SMatthias Ringwald /**
65*225f4ba4SMatthias Ringwald   * @brief  The application entry point.
66*225f4ba4SMatthias Ringwald   * @retval int
67*225f4ba4SMatthias Ringwald   */
68*225f4ba4SMatthias Ringwald int main(void)
69*225f4ba4SMatthias Ringwald {
70*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN 1 */
71*225f4ba4SMatthias Ringwald 
72*225f4ba4SMatthias Ringwald   /* USER CODE END 1 */
73*225f4ba4SMatthias Ringwald 
74*225f4ba4SMatthias Ringwald   /* MCU Configuration--------------------------------------------------------*/
75*225f4ba4SMatthias Ringwald 
76*225f4ba4SMatthias Ringwald   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
77*225f4ba4SMatthias Ringwald   HAL_Init();
78*225f4ba4SMatthias Ringwald 
79*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN Init */
80*225f4ba4SMatthias Ringwald 
81*225f4ba4SMatthias Ringwald   /* USER CODE END Init */
82*225f4ba4SMatthias Ringwald 
83*225f4ba4SMatthias Ringwald   /* Configure the system clock */
84*225f4ba4SMatthias Ringwald   SystemClock_Config();
85*225f4ba4SMatthias Ringwald 
86*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN SysInit */
87*225f4ba4SMatthias Ringwald 
88*225f4ba4SMatthias Ringwald   /* USER CODE END SysInit */
89*225f4ba4SMatthias Ringwald 
90*225f4ba4SMatthias Ringwald   /* Initialize all configured peripherals */
91*225f4ba4SMatthias Ringwald   MX_GPIO_Init();
92*225f4ba4SMatthias Ringwald   MX_DMA_Init();
93*225f4ba4SMatthias Ringwald   MX_USART2_UART_Init();
94*225f4ba4SMatthias Ringwald   MX_USART3_UART_Init();
95*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN 2 */
96*225f4ba4SMatthias Ringwald   // jump to BTstack port
97*225f4ba4SMatthias Ringwald   port_main();
98*225f4ba4SMatthias Ringwald   /* USER CODE END 2 */
99*225f4ba4SMatthias Ringwald 
100*225f4ba4SMatthias Ringwald   /* Infinite loop */
101*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN WHILE */
102*225f4ba4SMatthias Ringwald   while (1)
103*225f4ba4SMatthias Ringwald   {
104*225f4ba4SMatthias Ringwald     /* USER CODE END WHILE */
105*225f4ba4SMatthias Ringwald 
106*225f4ba4SMatthias Ringwald     /* USER CODE BEGIN 3 */
107*225f4ba4SMatthias Ringwald   }
108*225f4ba4SMatthias Ringwald   /* USER CODE END 3 */
109*225f4ba4SMatthias Ringwald }
110*225f4ba4SMatthias Ringwald 
111*225f4ba4SMatthias Ringwald /**
112*225f4ba4SMatthias Ringwald   * @brief System Clock Configuration
113*225f4ba4SMatthias Ringwald   * @retval None
114*225f4ba4SMatthias Ringwald   */
115*225f4ba4SMatthias Ringwald void SystemClock_Config(void)
116*225f4ba4SMatthias Ringwald {
117*225f4ba4SMatthias Ringwald   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
118*225f4ba4SMatthias Ringwald   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
119*225f4ba4SMatthias Ringwald 
120*225f4ba4SMatthias Ringwald   /** Configure the main internal regulator output voltage
121*225f4ba4SMatthias Ringwald   */
122*225f4ba4SMatthias Ringwald   __HAL_RCC_PWR_CLK_ENABLE();
123*225f4ba4SMatthias Ringwald   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
124*225f4ba4SMatthias Ringwald   /** Initializes the CPU, AHB and APB busses clocks
125*225f4ba4SMatthias Ringwald   */
126*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
127*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
128*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
129*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
130*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
131*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLM = 8;
132*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLN = 64;
133*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
134*225f4ba4SMatthias Ringwald   RCC_OscInitStruct.PLL.PLLQ = 7;
135*225f4ba4SMatthias Ringwald   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
136*225f4ba4SMatthias Ringwald   {
137*225f4ba4SMatthias Ringwald     Error_Handler();
138*225f4ba4SMatthias Ringwald   }
139*225f4ba4SMatthias Ringwald   /** Initializes the CPU, AHB and APB busses clocks
140*225f4ba4SMatthias Ringwald   */
141*225f4ba4SMatthias Ringwald   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
142*225f4ba4SMatthias Ringwald                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
143*225f4ba4SMatthias Ringwald   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
144*225f4ba4SMatthias Ringwald   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
145*225f4ba4SMatthias Ringwald   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
146*225f4ba4SMatthias Ringwald   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
147*225f4ba4SMatthias Ringwald 
148*225f4ba4SMatthias Ringwald   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
149*225f4ba4SMatthias Ringwald   {
150*225f4ba4SMatthias Ringwald     Error_Handler();
151*225f4ba4SMatthias Ringwald   }
152*225f4ba4SMatthias Ringwald }
153*225f4ba4SMatthias Ringwald 
154*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 4 */
155*225f4ba4SMatthias Ringwald 
156*225f4ba4SMatthias Ringwald /* USER CODE END 4 */
157*225f4ba4SMatthias Ringwald 
158*225f4ba4SMatthias Ringwald /**
159*225f4ba4SMatthias Ringwald   * @brief  This function is executed in case of error occurrence.
160*225f4ba4SMatthias Ringwald   * @retval None
161*225f4ba4SMatthias Ringwald   */
162*225f4ba4SMatthias Ringwald void Error_Handler(void)
163*225f4ba4SMatthias Ringwald {
164*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN Error_Handler_Debug */
165*225f4ba4SMatthias Ringwald   /* User can add his own implementation to report the HAL error return state */
166*225f4ba4SMatthias Ringwald 
167*225f4ba4SMatthias Ringwald   /* USER CODE END Error_Handler_Debug */
168*225f4ba4SMatthias Ringwald }
169*225f4ba4SMatthias Ringwald 
170*225f4ba4SMatthias Ringwald #ifdef  USE_FULL_ASSERT
171*225f4ba4SMatthias Ringwald /**
172*225f4ba4SMatthias Ringwald   * @brief  Reports the name of the source file and the source line number
173*225f4ba4SMatthias Ringwald   *         where the assert_param error has occurred.
174*225f4ba4SMatthias Ringwald   * @param  file: pointer to the source file name
175*225f4ba4SMatthias Ringwald   * @param  line: assert_param error line source number
176*225f4ba4SMatthias Ringwald   * @retval None
177*225f4ba4SMatthias Ringwald   */
178*225f4ba4SMatthias Ringwald void assert_failed(uint8_t *file, uint32_t line)
179*225f4ba4SMatthias Ringwald {
180*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN 6 */
181*225f4ba4SMatthias Ringwald   /* User can add his own implementation to report the file name and line number,
182*225f4ba4SMatthias Ringwald      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
183*225f4ba4SMatthias Ringwald   /* USER CODE END 6 */
184*225f4ba4SMatthias Ringwald }
185*225f4ba4SMatthias Ringwald #endif /* USE_FULL_ASSERT */
186*225f4ba4SMatthias Ringwald 
187*225f4ba4SMatthias Ringwald /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
188