cancel
Showing results for 
Search instead for 
Did you mean: 

How to make ADC continous scan mode to convert ADC on chip STM32L151RBH6?

sonia
Associate II
Posted on December 06, 2015 at 10:30

I tried to copy some code from STM32F series, and make some change to let it run on STM32L151. But it  doesn't work on my STM32L151RBH6 chip:

code as below:

int main(void)

{

  /* System clocks configuration ---------------------------------------------*/

  RCC_Configuration();

  /* GPIO configuration ------------------------------------------------------*/

  GPIO_Configuration();

  /* DMA1 channel1 configuration ---------------------------------------------*/

  DMA_DeInit(DMA1_Channel1);

  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC1ConvertedValue;

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

  DMA_InitStructure.DMA_BufferSize = BufferLenght;

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

  DMA_Init(DMA1_Channel1, &DMA_InitStructure);

  /* Enable DMA1 channel1 */

  DMA_Cmd(DMA1_Channel1, ENABLE);

  /* ADC1 configuration ------------------------------------------------------*/

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfChannel = BufferLenght;

  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel11, channel14, channel16 and channel17 configurations */

  ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_41Cycles5);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 2, ADC_SampleTime_239Cycles5);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 4, ADC_SampleTime_1Cycles5);

 

  /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

 

  /* Enable ADC1 */

  ADC_Cmd(ADC1, ENABLE);

 

  /* Enable TempSensor and Vrefint channels: channel16 and Channel17 */

  ADC_TempSensorVrefintCmd(ENABLE);

  /* Enable ADC1 reset calibaration register */  

  ADC_ResetCalibration(ADC1);

 

  /* Check the end of ADC1 reset calibration register */

  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */

  ADC_StartCalibration(ADC1);

 

  /* Check the end of ADC1 calibration */

  while(ADC_GetCalibrationStatus(ADC1));

    

  /* Start ADC1 Software Conversion */

  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

 

  /* Test on Channel 1 DMA1_FLAG_TC flag */

  while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));

 

  /* Clear Channel 1 DMA1_FLAG_TC flag */

  DMA_ClearFlag(DMA1_FLAG_TC1); 

  while (1)

  {

  }

}

Could anyone send the code of it? Thank a lot!!
4 REPLIES 4
Posted on December 06, 2015 at 15:06

May be look for some L1 examples?

STM32L1xx_StdPeriph_Lib_V1.3.0\Project\STM32L1xx_StdPeriph_Examples\ADC\ADC1_DMA

[DEAD LINK /public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/STM32Discovery/STM32%20ADC%20DMA%20Circular%20Mode&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=339]https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Discovery%2FSTM32%20ADC%20DMA%20Circular%20Mode&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F¤tviews=339

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/ADC%20on%20STM32L15xx&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=591

For multiple channels : ADC_InitStructure.ADC_ScanConvMode = ENABLE;

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
sonia
Associate II
Posted on December 06, 2015 at 15:53

Hi Clivel,

Thank you for the information. I have another question that I very want to know: where to download STM32L1xx_StdPeriph_Lib_V1.3.0\Project\STM32L1xx_StdPeriph_Examples?

Posted on December 06, 2015 at 17:04

Bottom of the page, red download button, 1.3.1 is current version

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1939/PF257913

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
sonia
Associate II
Posted on December 07, 2015 at 03:26

Thank you Clivel, it works now!! Cheers.