[STM32L0]

请问如何配置STML0单片机多通道ADC采集呀

[复制链接]
1209|10
手机看帖
扫描二维码
随时随地手机跟帖
wdliming|  楼主 | 2019-3-1 14:10 | 显示全部楼层 |阅读模式
问题如题所示,请问如何用stm32L011芯片配置成多通道ADC采样,比如PA0,PA1两路采样,我的配置如下:
int main(void)

{

/* USER CODE BEGIN 1 */

uint8_t value_L;

uint8_t value_H;

uint8_t i = 0;



/* USER CODE END 1 */



/* MCU Configuration----------------------------------------------------------*/



/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();



/* USER CODE BEGIN Init */



/* USER CODE END Init */



/* Configure the system clock */

SystemClock_Config();



/* USER CODE BEGIN SysInit */



/* USER CODE END SysInit */



/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_ADC_Init();

MX_USART2_UART_Init();

/* USER CODE BEGIN 2 */

USART_SendData(USART2,"a");

USART_SendData(USART2,"a");

USART_SendData(USART2,"a");

//HAL_ADC_Start_DMA(&hadc, (uint32_t*)&uhADCxConvertedValue, 1);

/* USER CODE END 2 */



/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{



/* USER CODE END WHILE */



/* USER CODE BEGIN 3 */


for(i=0;i<2;i++)

{

HAL_ADC_Start(&hadc);



HAL_ADC_PollForConversion(&hadc,0xffff);//wait adc



uhADCxConvertedValue[i]=HAL_ADC_GetValue(&hadc);



//printf("------ch:%d--%d-------\r\n",i,adcBuf[i]);

value_H = (uhADCxConvertedValue[i] & 0xff00 ) >> 8;

value_L = (uhADCxConvertedValue[i] & 0x00ff );

LL_USART_TransmitData8(USART2, value_L);

LL_USART_TransmitData8(USART2, value_H);

}

HAL_ADC_Stop(&hadc);

LL_mDelay(1000);

}

/* USER CODE END 3 */



}



ADC init function is below

/* ADC init function */

void MX_ADC_Init(void)

{

ADC_ChannelConfTypeDef sConfig;



  /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)

  */

hadc.Instance = ADC1;

hadc.Init.OversamplingMode = DISABLE;

hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1;

hadc.Init.Resolution = ADC_RESOLUTION_12B;

hadc.Init.SamplingTime = ADC_SAMPLETIME_79CYCLES_5;

hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;

hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc.Init.ContinuousConvMode = DISABLE;

hadc.Init.DiscontinuousConvMode = ENABLE;

hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc.Init.DMAContinuousRequests = DISABLE;

hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;

hadc.Init.LowPowerAutoWait = DISABLE;

hadc.Init.LowPowerFrequencyMode = DISABLE;

hadc.Init.LowPowerAutoPowerOff = DISABLE;

if (HAL_ADC_Init(&hadc) != HAL_OK)

{

  _Error_Handler(__FILE__, __LINE__);

}



  /**Configure for the selected ADC regular channel to be converted.

  */

sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = 0;

if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)

{

  _Error_Handler(__FILE__, __LINE__);

}



  /**Configure for the selected ADC regular channel to be converted.

  */

sConfig.Channel = ADC_CHANNEL_1;

sConfig.Rank = 1;

if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)

{

  _Error_Handler(__FILE__, __LINE__);

}



}
但是只能采集到PA0的电压,
高手们请问stm32L011的dma配置和F103的配置哪里一样啊?
wdliming|  楼主 | 2019-3-1 14:14 | 显示全部楼层
我用cubemx配置如下:
a.PNG b.PNG c.PNG d.PNG e.PNG
不知道哪里错了?


使用特权

评论回复
ZHMSGE| | 2019-3-1 14:15 | 显示全部楼层
在采集函数里面切换通道,只能帮到这里,不用谢我

使用特权

评论回复
评论
仰望星期五 2019-3-11 17:51 回复TA
我也是这样搞的,当时这个问题花费点时间,左后完美解决。任意通道的采集。 
wdliming|  楼主 | 2019-3-1 14:34 | 显示全部楼层
ZHMSGE 发表于 2019-3-1 14:15
在采集函数里面切换通道,只能帮到这里,不用谢我

请问有示例吗??谢谢

使用特权

评论回复
guanjiaer| | 2019-3-11 13:13 | 显示全部楼层
楼主想用哪种模式进行采集呢

使用特权

评论回复
heimaojingzhang| | 2019-3-11 13:42 | 显示全部楼层
wdliming 发表于 2019-3-1 14:34
请问有示例吗??谢谢

他这个配置完了之后自然生成代码啊

使用特权

评论回复
keaibukelian| | 2019-3-11 14:16 | 显示全部楼层
楼主按照地板进行设置就能生成代码

使用特权

评论回复
wdliming|  楼主 | 2019-3-12 13:30 | 显示全部楼层
已经弄好了。。

使用特权

评论回复
sdswsasx| | 2019-3-12 14:43 | 显示全部楼层
代码空行太多。。。

使用特权

评论回复
wdliming|  楼主 | 2019-3-13 16:41 | 显示全部楼层
sdswsasx 发表于 2019-3-12 14:43
代码空行太多。。。

这个无所谓的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我的未来不是梦

76

主题

913

帖子

4

粉丝