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.
You are viewing an older revision! See the latest version
Homepage
- include "mbed.h"
- include "string"
- include "cmsis.h"
- include "pinmap.h"
- include "PeripheralPins.h"
Serial pc(USBTX, USBRX);
uint32_t g_ADCValue; float g_ADC_Value_Volts; const float maxAdcBits = 4095.0f; Using Float for clarity const float maxVolts = 3.3f; Using Float for clarity const float voltsPerBit = (maxVolts / maxAdcBits);
int main() { Start of initializing analog input on pin PC_1 ADC_HandleTypeDef AdcHandle; GPIO_InitTypeDef gpioInit; Start GPIO and ADC1 Clocks GPIOC_CLK_ENABLE(); ADC1_CLK_ENABLE(); Define PC_1 which is Pin one of group C and connected to a 10K potentiometer. gpioInit.Pin = GPIO_PIN_1; gpioInit.Mode = GPIO_MODE_ANALOG; gpioInit.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &gpioInit);
Configure ADC AdcHandle.Instance = ADC1; AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2; AdcHandle.Init.Resolution = ADC_RESOLUTION12b; AdcHandle.Init.ScanConvMode = DISABLE; AdcHandle.Init.ContinuousConvMode = ENABLE; AdcHandle.Init.DiscontinuousConvMode = DISABLE; AdcHandle.Init.NbrOfDiscConversion = 0; AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1; AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; AdcHandle.Init.NbrOfConversion = 1; AdcHandle.Init.DMAContinuousRequests = DISABLE; AdcHandle.Init.EOCSelection = DISABLE;
if (HAL_ADC_Init(&AdcHandle) != HAL_OK) { pc.printf("Cannot initialize ADC\n"); while(1){ } } ADC_ChannelConfTypeDef sConfig = {0}; Configure ADC channel sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; sConfig.Offset = 0; sConfig.Channel = ADC_CHANNEL_11;
if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK) { pc.printf("Cannot config channel\r\n"); while(1){ } } HAL_ADC_ConfigChannel(&AdcHandle, &sConfig); Not sure why, but I have to do this twice? pc.printf("AnalogIn example\r\n"); HAL_ADC_Start(&AdcHandle); Start conversion while(1) { g_ADCValue = 0; if (HAL_ADC_PollForConversion(&AdcHandle, 1000000) == HAL_OK) { g_ADCValue = HAL_ADC_GetValue(&AdcHandle); g_ADC_Value_Volts = g_ADCValue*voltsPerBit; pc.printf("Conversion ready \r\n"); printf("measure = %f V \r\n", g_ADC_Value_Volts); } else { pc.printf("Conversion not ready \r\n"); } wait(1.0); 1 second } }