1 | int main(void)
|
2 | {
|
3 |
|
4 | /* USER CODE BEGIN 1 */
|
5 |
|
6 | /* USER CODE END 1 */
|
7 |
|
8 | /* MCU Configuration----------------------------------------------------------*/
|
9 |
|
10 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
11 | HAL_Init();
|
12 |
|
13 | /* USER CODE BEGIN Init */
|
14 |
|
15 | /* USER CODE END Init */
|
16 |
|
17 | /* Configure the system clock */
|
18 | SystemClock_Config();
|
19 |
|
20 | /* USER CODE BEGIN SysInit */
|
21 |
|
22 | /* USER CODE END SysInit */
|
23 |
|
24 | /* Initialize all configured peripherals */
|
25 | MX_GPIO_Init();
|
26 | MX_DMA_Init();
|
27 | MX_TIM2_Init();
|
28 | MX_ADC1_Init();
|
29 | MX_ADC2_Init();
|
30 |
|
31 | /* USER CODE BEGIN 2 */
|
32 |
|
33 | /* USER CODE END 2 */
|
34 |
|
35 | /* Infinite loop */
|
36 | /* USER CODE BEGIN WHILE */
|
37 |
|
38 | //TIMER
|
39 | HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1) ; //Start Timer 2, Channel 1
|
40 | HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_2) ; //Start Timer 2, Channel 2
|
41 | HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_3) ; //Start Timer 2, Channel 3
|
42 | HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_4) ; //Start Timer 2, Channel 4
|
43 |
|
44 |
|
45 | HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
|
46 | HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
|
47 |
|
48 | HAL_ADCEx_MultiModeStart_DMA(&hadc1, adc_array, 99);
|
49 |
|
50 |
|
51 | while (1)
|
52 | {
|
53 |
|
54 | }
|
55 | /* USER CODE END 3 */
|
56 |
|
57 | }
|
58 |
|
59 | /* ADC1 init function */
|
60 | static void MX_ADC1_Init(void)
|
61 | {
|
62 |
|
63 | ADC_MultiModeTypeDef multimode;
|
64 | ADC_ChannelConfTypeDef sConfig;
|
65 |
|
66 | /**Common config
|
67 | */
|
68 | hadc1.Instance = ADC1;
|
69 | hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
70 | hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
71 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
72 | hadc1.Init.ContinuousConvMode = DISABLE;
|
73 | hadc1.Init.DiscontinuousConvMode = DISABLE;
|
74 | hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
75 | hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_TRGO;
|
76 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
77 | hadc1.Init.NbrOfConversion = 1;
|
78 | hadc1.Init.DMAContinuousRequests = ENABLE;
|
79 | hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
80 | hadc1.Init.LowPowerAutoWait = DISABLE;
|
81 | hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
82 | if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
83 | {
|
84 | _Error_Handler(__FILE__, __LINE__);
|
85 | }
|
86 |
|
87 | /**Configure the ADC multi-mode
|
88 | */
|
89 | multimode.Mode = ADC_DUALMODE_REGSIMULT;
|
90 | multimode.DMAAccessMode = ADC_DMAACCESSMODE_12_10_BITS;
|
91 | multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE;
|
92 | if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
|
93 | {
|
94 | _Error_Handler(__FILE__, __LINE__);
|
95 | }
|
96 |
|
97 | /**Configure Regular Channel
|
98 | */
|
99 | sConfig.Channel = ADC_CHANNEL_4;
|
100 | sConfig.Rank = 1;
|
101 | sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
102 | sConfig.SamplingTime = ADC_SAMPLETIME_601CYCLES_5;
|
103 | sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
104 | sConfig.Offset = 0;
|
105 | if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
106 | {
|
107 | _Error_Handler(__FILE__, __LINE__);
|
108 | }
|
109 |
|
110 | }
|
111 |
|
112 | /* ADC2 init function */
|
113 | static void MX_ADC2_Init(void)
|
114 | {
|
115 |
|
116 | ADC_ChannelConfTypeDef sConfig;
|
117 |
|
118 | /**Common config
|
119 | */
|
120 | hadc2.Instance = ADC2;
|
121 | hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
122 | hadc2.Init.Resolution = ADC_RESOLUTION_12B;
|
123 | hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
124 | hadc2.Init.ContinuousConvMode = DISABLE;
|
125 | hadc2.Init.DiscontinuousConvMode = DISABLE;
|
126 | hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
127 | hadc2.Init.NbrOfConversion = 2;
|
128 | hadc2.Init.DMAContinuousRequests = ENABLE;
|
129 | hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
130 | hadc2.Init.LowPowerAutoWait = DISABLE;
|
131 | hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
132 | if (HAL_ADC_Init(&hadc2) != HAL_OK)
|
133 | {
|
134 | _Error_Handler(__FILE__, __LINE__);
|
135 | }
|
136 |
|
137 | /**Configure Regular Channel
|
138 | */
|
139 | sConfig.Channel = ADC_CHANNEL_1;
|
140 | sConfig.Rank = 1;
|
141 | sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
142 | sConfig.SamplingTime = ADC_SAMPLETIME_181CYCLES_5;
|
143 | sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
144 | sConfig.Offset = 0;
|
145 | if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
146 | {
|
147 | _Error_Handler(__FILE__, __LINE__);
|
148 | }
|
149 |
|
150 | /**Configure Regular Channel
|
151 | */
|
152 | sConfig.Channel = ADC_CHANNEL_2;
|
153 | sConfig.Rank = 2;
|
154 | if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
155 | {
|
156 | _Error_Handler(__FILE__, __LINE__);
|
157 | }
|
158 |
|
159 | }
|
160 |
|
161 | void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
162 | {
|
163 |
|
164 | GPIO_InitTypeDef GPIO_InitStruct;
|
165 | if(hadc->Instance==ADC1)
|
166 | {
|
167 | /* USER CODE BEGIN ADC1_MspInit 0 */
|
168 |
|
169 | /* USER CODE END ADC1_MspInit 0 */
|
170 | /* Peripheral clock enable */
|
171 | HAL_RCC_ADC12_CLK_ENABLED++;
|
172 | if(HAL_RCC_ADC12_CLK_ENABLED==1){
|
173 | __HAL_RCC_ADC12_CLK_ENABLE();
|
174 | }
|
175 |
|
176 | /**ADC1 GPIO Configuration
|
177 | PA3 ------> ADC1_IN4
|
178 | */
|
179 | GPIO_InitStruct.Pin = GPIO_PIN_3;
|
180 | GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
181 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
182 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
183 |
|
184 | /* ADC1 DMA Init */
|
185 | /* ADC1 Init */
|
186 | hdma_adc1.Instance = DMA1_Channel1;
|
187 | hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
188 | hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
|
189 | hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
|
190 | hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
191 | hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
192 | hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
193 | hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM;
|
194 | if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
195 | {
|
196 | _Error_Handler(__FILE__, __LINE__);
|
197 | }
|
198 |
|
199 | __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
|
200 |
|
201 | /* USER CODE BEGIN ADC1_MspInit 1 */
|
202 |
|
203 | /* USER CODE END ADC1_MspInit 1 */
|
204 | }
|
205 | else if(hadc->Instance==ADC2)
|
206 | {
|
207 | /* USER CODE BEGIN ADC2_MspInit 0 */
|
208 |
|
209 | /* USER CODE END ADC2_MspInit 0 */
|
210 | /* Peripheral clock enable */
|
211 | HAL_RCC_ADC12_CLK_ENABLED++;
|
212 | if(HAL_RCC_ADC12_CLK_ENABLED==1){
|
213 | __HAL_RCC_ADC12_CLK_ENABLE();
|
214 | }
|
215 |
|
216 | /**ADC2 GPIO Configuration
|
217 | PA4 ------> ADC2_IN1
|
218 | PA5 ------> ADC2_IN2
|
219 | */
|
220 | GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
|
221 | GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
222 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
223 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
224 |
|
225 | /* ADC2 DMA Init */
|
226 | /* ADC2 Init */
|
227 | hdma_adc2.Instance = DMA1_Channel2;
|
228 | hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
229 | hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
|
230 | hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
|
231 | hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
232 | hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
233 | hdma_adc2.Init.Mode = DMA_CIRCULAR;
|
234 | hdma_adc2.Init.Priority = DMA_PRIORITY_MEDIUM;
|
235 | if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
|
236 | {
|
237 | _Error_Handler(__FILE__, __LINE__);
|
238 | }
|
239 |
|
240 | __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
|
241 |
|
242 | /* USER CODE BEGIN ADC2_MspInit 1 */
|
243 |
|
244 | /* USER CODE END ADC2_MspInit 1 */
|
245 | }
|
246 |
|
247 | }
|