Skip to content

Commit b9d15d3

Browse files
committed
print Vs from hydrophone
1 parent 66ed60b commit b9d15d3

File tree

76 files changed

+34457
-11149
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+34457
-11149
lines changed

stm_workspace/hydrophone/.mxproject

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

stm_workspace/hydrophone/Core/Inc/main.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ void Error_Handler(void);
6666
#define MCO_GPIO_Port GPIOH
6767
#define SMPS_V1_Pin GPIO_PIN_5
6868
#define SMPS_V1_GPIO_Port GPIOA
69-
#define SMPS_PG_Pin GPIO_PIN_6
70-
#define SMPS_PG_GPIO_Port GPIOA
7169
#define SMPS_SW_Pin GPIO_PIN_7
7270
#define SMPS_SW_GPIO_Port GPIOA
7371
#define TMS_Pin GPIO_PIN_13

stm_workspace/hydrophone/Core/Inc/stm32l4xx_hal_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
* @brief This is the list of modules to be used in the HAL driver
3737
*/
3838
#define HAL_MODULE_ENABLED
39-
/*#define HAL_ADC_MODULE_ENABLED */
39+
#define HAL_ADC_MODULE_ENABLED
4040
/*#define HAL_CRYP_MODULE_ENABLED */
4141
/*#define HAL_CAN_MODULE_ENABLED */
4242
/*#define HAL_COMP_MODULE_ENABLED */

stm_workspace/hydrophone/Core/Inc/stm32l4xx_it.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void SVC_Handler(void);
5555
void DebugMon_Handler(void);
5656
void PendSV_Handler(void);
5757
void SysTick_Handler(void);
58+
void DMA1_Channel1_IRQHandler(void);
5859
void TIM2_IRQHandler(void);
5960
/* USER CODE BEGIN EFP */
6061

stm_workspace/hydrophone/Core/Src/main.c

Lines changed: 138 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
/* USER CODE END PM */
4040

4141
/* Private variables ---------------------------------------------------------*/
42+
ADC_HandleTypeDef hadc1;
43+
DMA_HandleTypeDef hdma_adc1;
44+
4245
TIM_HandleTypeDef htim2;
4346

4447
UART_HandleTypeDef huart2;
@@ -50,8 +53,10 @@ UART_HandleTypeDef huart2;
5053
/* Private function prototypes -----------------------------------------------*/
5154
void SystemClock_Config(void);
5255
static void MX_GPIO_Init(void);
56+
static void MX_DMA_Init(void);
5357
static void MX_TIM2_Init(void);
5458
static void MX_USART2_UART_Init(void);
59+
static void MX_ADC1_Init(void);
5560
/* USER CODE BEGIN PFP */
5661
#ifdef __GNUC__
5762
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
@@ -74,8 +79,18 @@ void sineF32(const float32_t frequency, const float32_t amplitude, const float32
7479
*pOut = point;
7580
}
7681

82+
void calculateVoltage(uint16_t VREFINT_DATA, uint16_t ADC_DATA, float32_t *pOut) {
83+
float32_t VREFINT_CAL = (float32_t) *((uint16_t*) VREFINT_CAL_ADDR);
84+
float32_t Vdda = 3.0 * (VREFINT_CAL / (float32_t) VREFINT_DATA);
85+
*pOut = (Vdda / 4095) * (float32_t) ADC_DATA;
86+
}
87+
7788
static float32_t sineValues[1024];
7889
static uint32_t sec = 0;
90+
volatile uint16_t adcChannels[4];
91+
volatile int conversionComplete = 0;
92+
93+
7994
/* USER CODE END 0 */
8095

8196
/**
@@ -106,10 +121,13 @@ int main(void)
106121

107122
/* Initialize all configured peripherals */
108123
MX_GPIO_Init();
124+
MX_DMA_Init();
109125
MX_TIM2_Init();
110126
MX_USART2_UART_Init();
127+
MX_ADC1_Init();
111128
/* USER CODE BEGIN 2 */
112-
HAL_TIM_Base_Start_IT(&htim2);
129+
float32_t V1, V2, V3, V4;
130+
//HAL_TIM_Base_Start_IT(&htim2);
113131
/*float32_t x = 0.0f;
114132
float32_t fx;
115133
HAL_UART_Transmit(&huart2, (uint8_t *)"hello", 5, HAL_MAX_DELAY);
@@ -126,6 +144,17 @@ int main(void)
126144
/* USER CODE BEGIN WHILE */
127145
while (1)
128146
{
147+
HAL_ADC_Start_DMA(&hadc1, (uint32_t *) adcChannels, 4);
148+
while (conversionComplete == 0) {
149+
continue;
150+
}
151+
conversionComplete = 0;
152+
calculateVoltage(adcChannels[0], adcChannels[1], &V2);
153+
calculateVoltage(adcChannels[0], adcChannels[2], &V3);
154+
calculateVoltage(adcChannels[0], adcChannels[3], &V4);
155+
printf("CH2: %f, CH3: %f, CH4: %f\r\n", V2, V3, V4);
156+
HAL_Delay(100);
157+
129158
/* USER CODE END WHILE */
130159

131160
/* USER CODE BEGIN 3 */
@@ -182,6 +211,91 @@ void SystemClock_Config(void)
182211
}
183212
}
184213

214+
/**
215+
* @brief ADC1 Initialization Function
216+
* @param None
217+
* @retval None
218+
*/
219+
static void MX_ADC1_Init(void)
220+
{
221+
222+
/* USER CODE BEGIN ADC1_Init 0 */
223+
224+
/* USER CODE END ADC1_Init 0 */
225+
226+
ADC_ChannelConfTypeDef sConfig = {0};
227+
228+
/* USER CODE BEGIN ADC1_Init 1 */
229+
230+
/* USER CODE END ADC1_Init 1 */
231+
232+
/** Common config
233+
*/
234+
hadc1.Instance = ADC1;
235+
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
236+
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
237+
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
238+
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
239+
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
240+
hadc1.Init.LowPowerAutoWait = DISABLE;
241+
hadc1.Init.ContinuousConvMode = DISABLE;
242+
hadc1.Init.NbrOfConversion = 4;
243+
hadc1.Init.DiscontinuousConvMode = DISABLE;
244+
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
245+
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
246+
hadc1.Init.DMAContinuousRequests = DISABLE;
247+
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
248+
hadc1.Init.OversamplingMode = DISABLE;
249+
if (HAL_ADC_Init(&hadc1) != HAL_OK)
250+
{
251+
Error_Handler();
252+
}
253+
254+
/** Configure Regular Channel
255+
*/
256+
sConfig.Channel = ADC_CHANNEL_VREFINT;
257+
sConfig.Rank = ADC_REGULAR_RANK_1;
258+
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
259+
sConfig.SingleDiff = ADC_SINGLE_ENDED;
260+
sConfig.OffsetNumber = ADC_OFFSET_NONE;
261+
sConfig.Offset = 0;
262+
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
263+
{
264+
Error_Handler();
265+
}
266+
267+
/** Configure Regular Channel
268+
*/
269+
sConfig.Channel = ADC_CHANNEL_16;
270+
sConfig.Rank = ADC_REGULAR_RANK_2;
271+
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
272+
{
273+
Error_Handler();
274+
}
275+
276+
/** Configure Regular Channel
277+
*/
278+
sConfig.Channel = ADC_CHANNEL_11;
279+
sConfig.Rank = ADC_REGULAR_RANK_3;
280+
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
281+
{
282+
Error_Handler();
283+
}
284+
285+
/** Configure Regular Channel
286+
*/
287+
sConfig.Channel = ADC_CHANNEL_9;
288+
sConfig.Rank = ADC_REGULAR_RANK_4;
289+
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
290+
{
291+
Error_Handler();
292+
}
293+
/* USER CODE BEGIN ADC1_Init 2 */
294+
295+
/* USER CODE END ADC1_Init 2 */
296+
297+
}
298+
185299
/**
186300
* @brief TIM2 Initialization Function
187301
* @param None
@@ -262,6 +376,22 @@ static void MX_USART2_UART_Init(void)
262376

263377
}
264378

379+
/**
380+
* Enable DMA controller clock
381+
*/
382+
static void MX_DMA_Init(void)
383+
{
384+
385+
/* DMA controller clock enable */
386+
__HAL_RCC_DMA1_CLK_ENABLE();
387+
388+
/* DMA interrupt init */
389+
/* DMA1_Channel1_IRQn interrupt configuration */
390+
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
391+
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
392+
393+
}
394+
265395
/**
266396
* @brief GPIO Initialization Function
267397
* @param None
@@ -295,12 +425,6 @@ static void MX_GPIO_Init(void)
295425
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
296426
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
297427

298-
/*Configure GPIO pin : SMPS_PG_Pin */
299-
GPIO_InitStruct.Pin = SMPS_PG_Pin;
300-
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
301-
GPIO_InitStruct.Pull = GPIO_PULLUP;
302-
HAL_GPIO_Init(SMPS_PG_GPIO_Port, &GPIO_InitStruct);
303-
304428
/* USER CODE BEGIN MX_GPIO_Init_2 */
305429
/* USER CODE END MX_GPIO_Init_2 */
306430
}
@@ -310,6 +434,13 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
310434
sec++;
311435
printf("%d microseconds\r\n", sec);
312436
}
437+
438+
/*void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc) {
439+
}*/
440+
441+
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
442+
conversionComplete = 1;
443+
}
313444
/* USER CODE END 4 */
314445

315446
/**

stm_workspace/hydrophone/Core/Src/stm32l4xx_hal_msp.c

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
/* USER CODE BEGIN Includes */
2525

2626
/* USER CODE END Includes */
27+
extern DMA_HandleTypeDef hdma_adc1;
2728

2829
/* Private typedef -----------------------------------------------------------*/
2930
/* USER CODE BEGIN TD */
@@ -77,6 +78,117 @@ void HAL_MspInit(void)
7778
/* USER CODE END MspInit 1 */
7879
}
7980

81+
/**
82+
* @brief ADC MSP Initialization
83+
* This function configures the hardware resources used in this example
84+
* @param hadc: ADC handle pointer
85+
* @retval None
86+
*/
87+
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
88+
{
89+
GPIO_InitTypeDef GPIO_InitStruct = {0};
90+
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
91+
if(hadc->Instance==ADC1)
92+
{
93+
/* USER CODE BEGIN ADC1_MspInit 0 */
94+
95+
/* USER CODE END ADC1_MspInit 0 */
96+
97+
/** Initializes the peripherals clock
98+
*/
99+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
100+
PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
101+
PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSI;
102+
PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
103+
PeriphClkInit.PLLSAI1.PLLSAI1N = 8;
104+
PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
105+
PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
106+
PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
107+
PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_ADC1CLK;
108+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
109+
{
110+
Error_Handler();
111+
}
112+
113+
/* Peripheral clock enable */
114+
__HAL_RCC_ADC_CLK_ENABLE();
115+
116+
__HAL_RCC_GPIOA_CLK_ENABLE();
117+
__HAL_RCC_GPIOB_CLK_ENABLE();
118+
/**ADC1 GPIO Configuration
119+
PA4 ------> ADC1_IN9
120+
PA6 ------> ADC1_IN11
121+
PB1 ------> ADC1_IN16
122+
*/
123+
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_6;
124+
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
125+
GPIO_InitStruct.Pull = GPIO_NOPULL;
126+
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
127+
128+
GPIO_InitStruct.Pin = GPIO_PIN_1;
129+
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
130+
GPIO_InitStruct.Pull = GPIO_NOPULL;
131+
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
132+
133+
/* ADC1 DMA Init */
134+
/* ADC1 Init */
135+
hdma_adc1.Instance = DMA1_Channel1;
136+
hdma_adc1.Init.Request = DMA_REQUEST_0;
137+
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
138+
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
139+
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
140+
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
141+
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
142+
hdma_adc1.Init.Mode = DMA_NORMAL;
143+
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
144+
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
145+
{
146+
Error_Handler();
147+
}
148+
149+
__HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
150+
151+
/* USER CODE BEGIN ADC1_MspInit 1 */
152+
153+
/* USER CODE END ADC1_MspInit 1 */
154+
}
155+
156+
}
157+
158+
/**
159+
* @brief ADC MSP De-Initialization
160+
* This function freeze the hardware resources used in this example
161+
* @param hadc: ADC handle pointer
162+
* @retval None
163+
*/
164+
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
165+
{
166+
if(hadc->Instance==ADC1)
167+
{
168+
/* USER CODE BEGIN ADC1_MspDeInit 0 */
169+
170+
/* USER CODE END ADC1_MspDeInit 0 */
171+
/* Peripheral clock disable */
172+
__HAL_RCC_ADC_CLK_DISABLE();
173+
174+
/**ADC1 GPIO Configuration
175+
PA4 ------> ADC1_IN9
176+
PA6 ------> ADC1_IN11
177+
PB1 ------> ADC1_IN16
178+
*/
179+
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_6);
180+
181+
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1);
182+
183+
/* ADC1 DMA DeInit */
184+
HAL_DMA_DeInit(hadc->DMA_Handle);
185+
/* USER CODE BEGIN ADC1_MspDeInit 1 */
186+
187+
/* USER CODE END ADC1_MspDeInit 1 */
188+
}
189+
190+
}
191+
80192
/**
81193
* @brief TIM_Base MSP Initialization
82194
* This function configures the hardware resources used in this example

stm_workspace/hydrophone/Core/Src/stm32l4xx_it.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
/* USER CODE END 0 */
5656

5757
/* External variables --------------------------------------------------------*/
58+
extern DMA_HandleTypeDef hdma_adc1;
5859
extern TIM_HandleTypeDef htim2;
5960
/* USER CODE BEGIN EV */
6061

@@ -198,6 +199,20 @@ void SysTick_Handler(void)
198199
/* please refer to the startup file (startup_stm32l4xx.s). */
199200
/******************************************************************************/
200201

202+
/**
203+
* @brief This function handles DMA1 channel1 global interrupt.
204+
*/
205+
void DMA1_Channel1_IRQHandler(void)
206+
{
207+
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
208+
209+
/* USER CODE END DMA1_Channel1_IRQn 0 */
210+
HAL_DMA_IRQHandler(&hdma_adc1);
211+
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
212+
213+
/* USER CODE END DMA1_Channel1_IRQn 1 */
214+
}
215+
201216
/**
202217
* @brief This function handles TIM2 global interrupt.
203218
*/

0 commit comments

Comments
 (0)