Skip to content
This repository was archived by the owner on Jan 30, 2024. It is now read-only.

Commit 5ba847c

Browse files
committed
Move hw initialisation into a separate file.
1 parent 335ebfa commit 5ba847c

File tree

3 files changed

+355
-341
lines changed

3 files changed

+355
-341
lines changed

src/init_hw.c

Lines changed: 337 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,337 @@
1+
#include "stm32f0xx_hal.h"
2+
3+
ADC_HandleTypeDef hadc;
4+
5+
I2C_HandleTypeDef hi2c1;
6+
7+
SPI_HandleTypeDef hspi1;
8+
9+
TIM_HandleTypeDef htim2;
10+
TIM_HandleTypeDef htim3;
11+
TIM_HandleTypeDef htim14;
12+
13+
USART_HandleTypeDef husart1;
14+
15+
void SystemClock_Config(void);
16+
static void MX_GPIO_Init(void);
17+
static void MX_ADC_Init(void);
18+
static void MX_I2C1_Init(void);
19+
static void MX_SPI1_Init(void);
20+
static void MX_TIM2_Init(void);
21+
static void MX_TIM3_Init(void);
22+
static void MX_TIM14_Init(void);
23+
static void MX_USART1_Init(void);
24+
25+
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
26+
27+
/*
28+
* libc_init_array, called from startup code, expects an _init() function,
29+
* which is executed before entering main.
30+
* If linking with -nostartfiles then need to define one manually.
31+
*/
32+
#ifdef LD_NOSTARTFILES
33+
void _init() {} ;
34+
#endif
35+
36+
void init_hw(void)
37+
{
38+
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
39+
HAL_Init();
40+
41+
/* Configure the system clock */
42+
SystemClock_Config();
43+
44+
/* Initialize all configured peripherals */
45+
MX_GPIO_Init();
46+
MX_ADC_Init();
47+
MX_I2C1_Init();
48+
MX_SPI1_Init();
49+
MX_TIM2_Init();
50+
MX_TIM3_Init();
51+
MX_TIM14_Init();
52+
MX_USART1_Init();
53+
54+
}
55+
56+
/** System Clock Configuration
57+
*/
58+
void SystemClock_Config(void)
59+
{
60+
61+
RCC_OscInitTypeDef RCC_OscInitStruct;
62+
RCC_ClkInitTypeDef RCC_ClkInitStruct;
63+
RCC_PeriphCLKInitTypeDef PeriphClkInit;
64+
65+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI
66+
| RCC_OSCILLATORTYPE_HSI14;
67+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
68+
RCC_OscInitStruct.HSI14State = RCC_HSI14_ON;
69+
RCC_OscInitStruct.HSICalibrationValue = 16;
70+
RCC_OscInitStruct.HSI14CalibrationValue = 16;
71+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
72+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
73+
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
74+
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
75+
HAL_RCC_OscConfig(&RCC_OscInitStruct);
76+
77+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
78+
| RCC_CLOCKTYPE_PCLK1;
79+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
80+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
81+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
82+
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
83+
84+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1
85+
| RCC_PERIPHCLK_I2C1;
86+
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
87+
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
88+
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
89+
90+
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
91+
92+
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
93+
94+
/* SysTick_IRQn interrupt configuration */
95+
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
96+
}
97+
98+
/* ADC init function */
99+
void MX_ADC_Init(void)
100+
{
101+
102+
ADC_ChannelConfTypeDef sConfig;
103+
104+
/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
105+
*/
106+
hadc.Instance = ADC1;
107+
hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC;
108+
hadc.Init.Resolution = ADC_RESOLUTION12b;
109+
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
110+
hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
111+
hadc.Init.EOCSelection = EOC_SINGLE_CONV;
112+
hadc.Init.LowPowerAutoWait = DISABLE;
113+
hadc.Init.LowPowerAutoPowerOff = DISABLE;
114+
hadc.Init.ContinuousConvMode = DISABLE;
115+
hadc.Init.DiscontinuousConvMode = DISABLE;
116+
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
117+
hadc.Init.DMAContinuousRequests = DISABLE;
118+
hadc.Init.Overrun = OVR_DATA_PRESERVED;
119+
HAL_ADC_Init(&hadc);
120+
121+
/**Configure for the selected ADC regular channel to be converted.
122+
*/
123+
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
124+
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
125+
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
126+
HAL_ADC_ConfigChannel(&hadc, &sConfig);
127+
128+
}
129+
130+
/* I2C1 init function */
131+
void MX_I2C1_Init(void)
132+
{
133+
134+
hi2c1.Instance = I2C1;
135+
hi2c1.Init.Timing = 0x2000090E;
136+
hi2c1.Init.OwnAddress1 = 0;
137+
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
138+
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;
139+
hi2c1.Init.OwnAddress2 = 0;
140+
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
141+
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;
142+
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;
143+
HAL_I2C_Init(&hi2c1);
144+
145+
/**Configure Analogue filter
146+
*/
147+
HAL_I2CEx_AnalogFilter_Config(&hi2c1, I2C_ANALOGFILTER_ENABLED);
148+
149+
}
150+
151+
/* SPI1 init function */
152+
void MX_SPI1_Init(void)
153+
{
154+
155+
hspi1.Instance = SPI1;
156+
hspi1.Init.Mode = SPI_MODE_SLAVE;
157+
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
158+
hspi1.Init.DataSize = SPI_DATASIZE_4BIT;
159+
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
160+
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
161+
hspi1.Init.NSS = SPI_NSS_SOFT;
162+
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
163+
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
164+
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
165+
hspi1.Init.CRCPolynomial = 7;
166+
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
167+
hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED;
168+
HAL_SPI_Init(&hspi1);
169+
170+
}
171+
172+
/* TIM2 init function */
173+
void MX_TIM2_Init(void)
174+
{
175+
176+
TIM_ClockConfigTypeDef sClockSourceConfig;
177+
TIM_MasterConfigTypeDef sMasterConfig;
178+
TIM_OC_InitTypeDef sConfigOC;
179+
180+
htim2.Instance = TIM2;
181+
htim2.Init.Prescaler = 0;
182+
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
183+
htim2.Init.Period = 0;
184+
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
185+
HAL_TIM_Base_Init(&htim2);
186+
187+
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;
188+
sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;
189+
sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;
190+
sClockSourceConfig.ClockFilter = 0;
191+
HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
192+
193+
HAL_TIM_OC_Init(&htim2);
194+
195+
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
196+
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
197+
HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
198+
199+
sConfigOC.OCMode = TIM_OCMODE_TIMING;
200+
sConfigOC.Pulse = 0;
201+
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
202+
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
203+
HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2);
204+
205+
HAL_TIM_MspPostInit(&htim2);
206+
207+
}
208+
209+
/* TIM3 init function */
210+
void MX_TIM3_Init(void)
211+
{
212+
213+
TIM_ClockConfigTypeDef sClockSourceConfig;
214+
TIM_MasterConfigTypeDef sMasterConfig;
215+
TIM_OC_InitTypeDef sConfigOC;
216+
217+
htim3.Instance = TIM3;
218+
htim3.Init.Prescaler = 0;
219+
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
220+
htim3.Init.Period = 0;
221+
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
222+
HAL_TIM_Base_Init(&htim3);
223+
224+
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
225+
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
226+
227+
HAL_TIM_OC_Init(&htim3);
228+
229+
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
230+
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
231+
HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
232+
233+
sConfigOC.OCMode = TIM_OCMODE_TIMING;
234+
sConfigOC.Pulse = 0;
235+
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
236+
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
237+
HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
238+
239+
HAL_TIM_MspPostInit(&htim3);
240+
241+
}
242+
243+
/* TIM14 init function */
244+
void MX_TIM14_Init(void)
245+
{
246+
247+
htim14.Instance = TIM14;
248+
htim14.Init.Prescaler = 0;
249+
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
250+
htim14.Init.Period = 0;
251+
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
252+
HAL_TIM_Base_Init(&htim14);
253+
254+
}
255+
256+
/* USART1 init function */
257+
void MX_USART1_Init(void)
258+
{
259+
260+
husart1.Instance = USART1;
261+
husart1.Init.BaudRate = 38400;
262+
husart1.Init.WordLength = USART_WORDLENGTH_8B;
263+
husart1.Init.StopBits = USART_STOPBITS_1;
264+
husart1.Init.Parity = USART_PARITY_NONE;
265+
husart1.Init.Mode = USART_MODE_TX_RX;
266+
husart1.Init.CLKPolarity = USART_POLARITY_LOW;
267+
husart1.Init.CLKPhase = USART_PHASE_1EDGE;
268+
husart1.Init.CLKLastBit = USART_LASTBIT_DISABLE;
269+
HAL_USART_Init(&husart1);
270+
271+
}
272+
273+
/** Configure pins as
274+
* Analog
275+
* Input
276+
* Output
277+
* EVENT_OUT
278+
* EXTI
279+
*/
280+
void MX_GPIO_Init(void)
281+
{
282+
283+
GPIO_InitTypeDef GPIO_InitStruct;
284+
285+
/* GPIO Ports Clock Enable */
286+
__GPIOF_CLK_ENABLE();
287+
__GPIOA_CLK_ENABLE();
288+
__GPIOB_CLK_ENABLE();
289+
290+
/*Configure GPIO pin Output Level */
291+
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_SET);
292+
293+
/*Configure GPIO pin Output Level */
294+
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
295+
296+
/*Configure GPIO pin Output Level */
297+
HAL_GPIO_WritePin(GPIOB,
298+
GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7,
299+
GPIO_PIN_SET);
300+
301+
/*Configure GPIO pins : PF0 PF1 */
302+
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
303+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
304+
GPIO_InitStruct.Pull = GPIO_NOPULL;
305+
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
306+
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
307+
308+
/*Configure GPIO pin : PB1 */
309+
GPIO_InitStruct.Pin = GPIO_PIN_1;
310+
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
311+
GPIO_InitStruct.Pull = GPIO_NOPULL;
312+
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
313+
314+
/*Configure GPIO pin : PA8 */
315+
GPIO_InitStruct.Pin = GPIO_PIN_8;
316+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
317+
GPIO_InitStruct.Pull = GPIO_NOPULL;
318+
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
319+
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
320+
321+
/*Configure GPIO pin : PA15 */
322+
GPIO_InitStruct.Pin = GPIO_PIN_15;
323+
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
324+
GPIO_InitStruct.Pull = GPIO_NOPULL;
325+
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
326+
327+
/*Configure GPIO pins : PB3 PB4 PB5 PB6
328+
PB7 */
329+
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6
330+
| GPIO_PIN_7;
331+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
332+
GPIO_InitStruct.Pull = GPIO_NOPULL;
333+
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
334+
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
335+
336+
}
337+

src/init_hw.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef SRC_INIT_HW_H_
2+
#define SRC_INIT_HW_H_
3+
4+
void init_hw(void);
5+
6+
7+
8+
#endif // include guard

0 commit comments

Comments
 (0)