Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: AnalogInDma.cpp
- Revision:
- 0:61544337ff5e
diff -r 000000000000 -r 61544337ff5e AnalogInDma.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AnalogInDma.cpp Thu May 03 20:39:50 2018 +0000
@@ -0,0 +1,104 @@
+#include "AnalogInDma.h"
+
+
+AnalogInDma::AnalogInDma()
+{
+}
+AnalogInDma::~AnalogInDma()
+{
+
+}
+bool AnalogInDma::init()
+{
+ MX_DMA_Init();
+ if(!MX_ADC1_Init())
+ return false;
+ return true;
+}
+
+bool AnalogInDma::start(uint32_t* pData, uint32_t Length)
+{
+ if (HAL_ADC_Start_DMA(&hadc1, pData, Length) != HAL_OK)
+ return false;
+ return true;
+}
+
+/* ADC1 init function */
+bool AnalogInDma::MX_ADC1_Init()
+{
+ ADC_MultiModeTypeDef multimode;
+ ADC_ChannelConfTypeDef sConfig;
+
+ /**Common config
+ */
+ hadc1.Instance = ADC1;
+ hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
+ hadc1.Init.Resolution = ADC_RESOLUTION_12B;
+ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+ hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
+ hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
+ hadc1.Init.LowPowerAutoWait = DISABLE;
+ hadc1.Init.ContinuousConvMode = ENABLE;
+ hadc1.Init.NbrOfConversion = 4;
+ hadc1.Init.DiscontinuousConvMode = DISABLE;
+ hadc1.Init.NbrOfDiscConversion = 1;
+ hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+ hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+ hadc1.Init.DMAContinuousRequests = ENABLE;
+ hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
+ hadc1.Init.OversamplingMode = DISABLE;
+ if (HAL_ADC_Init(&hadc1) != HAL_OK)
+ return false;
+
+ /**Configure the ADC multi-mode
+ */
+ multimode.Mode = ADC_MODE_INDEPENDENT;
+ if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
+ return false;
+
+ /**Configure Regular Channel
+ */
+ sConfig.Channel = ADC_CHANNEL_5;
+ sConfig.Rank = 1;
+ sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5;
+ sConfig.SingleDiff = ADC_SINGLE_ENDED;
+ sConfig.OffsetNumber = ADC_OFFSET_NONE;
+ sConfig.Offset = 0;
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+ return false;
+
+ /**Configure Regular Channel
+ */
+ sConfig.Channel = ADC_CHANNEL_6;
+ sConfig.Rank = 2;
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+ return false;
+
+ /**Configure Regular Channel
+ */
+ sConfig.Channel = ADC_CHANNEL_9;
+ sConfig.Rank = 3;
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+ return false;
+ /**Configure Regular Channel
+ */
+ sConfig.Channel = ADC_CHANNEL_15;
+ sConfig.Rank = 4;
+ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+ return false;
+ return true;
+}
+
+/**
+* Enable DMA controller clock
+*/
+void AnalogInDma::MX_DMA_Init()
+ {
+ /* DMA controller clock enable */
+ __HAL_RCC_DMA1_CLK_ENABLE();
+
+ /* DMA interrupt init */
+ /* DMA1_Channel1_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+}
\ No newline at end of file
