基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集

基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集

基于原子的战舰板做的CubeMX 的多端口电流采集

用Cube MX建立项目

RCC设置

基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第1张图片
###Debug设置
基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第2张图片

ADC设置

1.用PC0,PC1进行双端口电流采集,设置为ADC通道1采集;
基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第3张图片
2.DMA设置,添加DMA
基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第4张图片

计时器设置,这里采用timer3 ,选用内部时钟,每秒钟12800次

基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第5张图片

串口1设置

基于CUBEMX 的STM32 F103ZG ADC+DMA+TIMER的多端口采集_第6张图片

以上设置好后,生成项目文件。

keil中项目的修改

在main中 添加串口打印-节选

main.h

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

main.c


/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
	return ch;
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	
	num ++;
}
/* USER CODE END 4 */

添加DMA用的缓存数组,2个端口,每端口采集256次,每秒钟缓存满提交数据50次

main.c

/* USER CODE BEGIN PM */
uint16_t  ADC_CONV_buf[256*2];
uint32_t num=0;
/* USER CODE END PM */
...
  /* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start(&htim3);
	HAL_ADCEx_Calibration_Start (&hadc1 );
	HAL_ADC_Start_DMA (&hadc1 ,(uint32_t *)ADC_CONV_buf ,256*2);

  /* USER CODE END 2 */
...
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		printf("num : %d channel1-10:%d channel1-11:%d \r\n",num,ADC_CONV_buf [0],ADC_CONV_buf [1]);
		num =0;
		
		HAL_Delay (1000);
    /* USER CODE END WHILE */  
### 添加HAL_ADC_ConvCpltCallback函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	
	num ++;
}
/* USER CODE END 4 */

以上完成后,编译,执行,将PC0端接到gnd,PC1端接到3.3V;
执行效果如下:
在这里插入图片描述

你可能感兴趣的:(markdown)