STM32的ADC多通道采样

基于STM32Cube的ADC多通道采样

STMCube+MDK

用hal库写的好处就是可以不用进行配置IO口发步骤.有良好的兼容性,更换芯片的时候改代码也简单.

  • 首先打开STM32Cube

    点击new project

    选择芯片(此处我选的是STM32F051R8

    选择结束后如下

    在这里插入图片描述

配置一下芯片的相关配置
在这里插入图片描述在这里插入图片描述在这里插入图片描述
我是ST-LINK下载所以用SW模式.ADC是4通道采样1-4.
打开串口一.只要选项选好,右边的芯片的引脚就自动配置好.

在这里插入图片描述

RCC我在左侧的表格里不用勾选,因为我用的是内部时钟,不用选.下面是我配置的时钟

在这里插入图片描述

之所以是48M,还要分频呢.

下面直接上图片
在这里插入图片描述
在这里插入图片描述

其他的都默认.然后按ALT+P,设置下工程,格式如下

在这里插入图片描述

这个可以把代码格式更模块化。建议选择

在这里插入图片描述

#串口问题就一个重定向就解决了
 #ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;

}
void HAL_ADC_convcpltcallback(ADC_HandleTypeDef* hadc)
{
	flag=1;
 HAL_ADC_Stop_DMA(hadc); 
}
int main(void)
{

  HAL_Init();
  MX_GPIO_Init(); 
  MX_ADC_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  SystemClock_Config();
 HAL_ADC_Start_DMA(&hadc, (uint32_t*)&uhADCxConvertedValue, 4);

  while (1)
  { 
  
	if(flag==1)
	{	   
	flag=0;	
  HAL_Delay(400);	
	printf("ch1 = %d\n",uhADCxConvertedValue[0]);	
	HAL_Delay(400);		
	printf("ch2 = %d\n",uhADCxConvertedValue[1]);
	HAL_Delay(400);			
	printf("ch3 = %f\n",(uhADCxConvertedValue[2]*3.3)/4095);
	HAL_Delay(400);			
	printf("ch4 = %f\n",(uhADCxConvertedValue[3]*3.3)/4095);		
	HAL_Delay(400);			
	}	
	HAL_ADC_Start_DMA(&hadc, (uint32_t*)&uhADCxConvertedValue, 6);
	HAL_Delay(400);  
  }

}

onvCpltCallback(ADC_HandleTypeDef* hadc)
{
	flag=1;
 HAL_ADC_Stop_DMA(hadc); 
}



原创文章 1 获赞 0 访问量 38

猜你喜欢

转载自blog.csdn.net/qq_45820126/article/details/106180300