使用轮询方式进行ADC转换(野火STM32 MINI开发板)

实验器材:野火STM32 MINI开发板

任务目标:利用ADC采集电位器的电压,并通过串口调试助手输出变化的电压值

任务内容:调整开发板上的滑动变阻器,将电压值通过开发板到PC进行显示

开发板原理图:

1. 滑动变阻器电路图

2. USB转串口电路图

 3. 外部晶振电路图

外部输入晶振为8MHz

 一、CubeMX配置

1. 目标选择(芯片信号为STM32F103RCT6)

  2. 引脚配置

PC1(见滑动变阻器电路图)设置为ADC_IN11

 3.外设配置

3.1 复位及时钟控制

按照下图设置RCC(图1)中的HSE为BYPASS Clock Source(图2)

 3.2 调试接口

 按照下图设置SYS(图1)中的Serial Wire(图2)

 3.3 Analog 设置

ADC1设置参数如下

 3.4 Connectivity设置

USART1串口设置参数如下

  4.时钟配置(如图所示)

输入频率为8MHz,最高为72MHz

 5.工程配置(建议勾选如下图所示选项)

  二 Cube IDE程序编写

1. 添加头文件

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

2.进行宏定义、

/* USER CODE BEGIN PD */
/* 串口重定向宏定义开始 */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif
/* 串口重定向宏定义结束 */
/* USER CODE END PD */

3.自定义变量

/* USER CODE BEGIN PV */
uint32_t val;   //存储转换结果的变量
uint32_t Volt;
/* USER CODE END PV */

4.打印提示语句

  /* USER CODE BEGIN 2 */
  printf("******ADC Function*********\n");
  /* USER CODE END 2 */

5.主函数中的while()循环

关于电压值的计算

ADC转换后的结果是一个数字量,与实际模拟电压之间的计算关系由VREF+和转换精度位数确定。STM32F103系列MCU的ADC转换精度为12位(ADC转换分辨率为12位),如测量的电压范围是0~3.3V(见滑动变阻器电路图),转换后的二进制数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以转换后的二进制数X代表的真实电压的计算方法是:V=3300*val/4096 (单位mv);

 /* USER CODE BEGIN 3 */
	  HAL_ADC_Start(&hadc1);   //ADC轮询方式启动,必须每次转换前启动
	  if(HAL_ADC_PollForConversion(&hadc1, 200)==HAL_OK)   //等待转换完成,&hadc1应于引脚配置中的选择一致
	  {
		  val=HAL_ADC_GetValue(&hadc1) ;   //读取转换结果
		  Volt=3300*val/4096;               //以mV为单位
		  printf("Volt: %ldmV\r\n",Volt);   //通过串口打印输出
	  }
	  HAL_Delay(500);
  }
  /* USER CODE END 3 */

6.串口重定向函数

/* USER CODE BEGIN 4 */
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
  return ch;
}

GETCHAR_PROTOTYPE
{
	uint8_t  ch;
	HAL_UART_Receive(&huart1,(uint8_t *)&ch, 1, HAL_MAX_DELAY);
    return  ch;
}

/* USER CODE END 4 */

7. 运行函数,下载到开发板,显示结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值