本教程使用stm32f446ve芯片
工程创建自行搜索,网上教程很多
一,单通道ADC采样
1,stm32cubemx配置
2,keil5添加代码
main函数外定义:
uint32_t ADC_Value;
uint8_t i;
while (1)
{
HAL_Delay(500);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_Value = HAL_ADC_GetValue(&hadc1);
}
printf("\r\n******** ADC DMA Example ********\r\n");
printf(" AD1 value = %1.3fV \r\n", ADC_Value*3.3f/4096);
}
二,多通道ADC采样(非DMA)
1,stm32cubemx配置
ADC配置
2,keil5添加代码
main函数外定义:
uint32_t ADC_Value[2];
uint8_t i;
while(1)
{
HAL_Delay(500);
for(i=0;i<2;i++)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_Value[i] = HAL_ADC_GetValue(&hadc1);
}
HAL_ADC_Stop (&hadc1);
printf("\r\n******** ADC DMA Example ********\r\n");
printf(" AD1 value = %1.3fV \r\n", ADC_Value[0]*3.3f/4096);
printf(" AD2 value = %1.3fV \r\n", ADC_Value[1]*3.3f/4096);
}
三,多通道ADC采样(DMA)
1,stm32cubemx配置
配置DMA 2,配置ADC
2,keil5添加代码
main函数外定义:
uint32_t ADC_Value[100];
uint8_t i;
uint32_t ad1,ad2;
main函数内,while外开启ADC通道
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 100);
while(1)
{
HAL_Delay(500);
for(i = 0,ad1 =0,ad2=0; i < 100;)
{
ad1 += ADC_Value[i++];
ad2 += ADC_Value[i++];
}
ad1 /= 50;
ad2 /= 50;
printf("\r\n******** ADC DMA Example ********\r\n\r\n");
printf(" AD1 value = %1.3fV \r\n", ad1*3.3f/4096);
printf(" AD2 value = %1.3fV \r\n", ad2*3.3f/4096);
}
|