基于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);
}