#include "stm32f10x.h"

/* RCC时钟配置 */
void RCC_config(void)
{
 ErrorStatus HSEStartUpStatus;

/* RCC寄存器设置为默认配置 */
 RCC_DeInit();
 /* 打开外部高速时钟 */
 RCC_HSEConfig(RCC_HSE_ON);
 /* 等待外部高速时钟稳定 */
 HSEStartUpStatus = RCC_WaitForHSEStartUp();
 if(HSEStartUpStatus == SUCCESS)
 {
  /* 设置HCLK = SYSCLK */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  /* 设置PCLK2 = HCLK */
  RCC_PCLK2Config(RCC_HCLK_Div1);
  /* 设置PCLK1 = HCLK / 2 */
  RCC_PCLK1Config(RCC_HCLK_Div2);
//  /* 设置FLASH代码延时 */
//  FLASH_SetLatency(FLASH_Latency_2);
//  /* 使能预取址缓存 */
//  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  /* 设置PLL时钟源为HSE倍频9 72MHz */
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  /* 使能PLL */
  RCC_PLLCmd(ENABLE);
  /* 等待PLL稳定 */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  /* 设置PLL为系统时钟源 */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  /* 等待系统时钟源切换到PLL */
  while(RCC_GetSYSCLKSource() != 0x08);
 }
}

/* 毫秒延时函数 */
void delay_ms(uint16_t time)
{   
 uint16_t i = 0;

while(time--)
 {
  i = 12000;
  while(i--);   
 }
}

/* GPIO配置 */
void GPIO_config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

/* 时钟配置 */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

/* 模拟输入 */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/* ADC配置 */
void ADC_config(void)
{
 ADC_InitTypeDef ADC_InitStructure;

/* 使能时钟 */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 
 /* 配置ADC时钟12MHz */
 RCC_ADCCLKConfig(RCC_PCLK2_Div6);
 
 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;     /* 独立模式 */
 ADC_InitStructure.ADC_ScanConvMode = DISABLE;      /* 单通道模式 */
 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;     /* 单次转换模式 */
 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /* 软件触发 */
 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;    /* 数据右对齐 */
 ADC_InitStructure.ADC_NbrOfChannel = 1;        /* 1个通道 */
 ADC_Init(ADC1, &ADC_InitStructure);
 
 /* 模拟通道0、采样序列1、采样周期55.5 */
 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
 
 /* 使能ADC */
 ADC_Cmd(ADC1, ENABLE);
 
 /* 重置校准寄存器 */
 ADC_ResetCalibration(ADC1);
 while(ADC_GetResetCalibrationStatus(ADC1));
 
 /* 开始校准 */
 ADC_StartCalibration(ADC1);
 while(ADC_GetCalibrationStatus(ADC1));
}

/* 主函数 */
int main(void)
{
 uint32_t value;
 volatile float V;
 
 /* RCC时钟配置 */
 RCC_config();

/* IO配置 */
 GPIO_config();
 
 /* ADC配置 */
 ADC_config();
 
 while(1)
 {
  /* 启动转换 */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  /* 等待转换结束 */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
  
  /* 获取转换值 */
  value = ADC_GetConversionValue(ADC1);
  
  /* 将数字量转换为电压值 */
  V = (float)value / 4096 * 3.3;
  
  delay_ms(1000);
 }
}

STM32之ADC单通道单次例程相关推荐

  1. STM32+光敏电阻实现单通道单次采样实验

    准备设备: STM32系列单片机,光敏电阻,Keil uVision5,STM32CubeMX,其他外设 需要知识点: 了解ADC模数转换工作原理 简单介绍ADC ADC简介 ADC其实就是模数转换器 ...

  2. 【资料】低功耗1/单通道/单按键触摸触控芯片VKD223B/EB/NB,适用于TWS/电池供电类触摸屏等

    型号:VKD223B/VKD223NB 陈锐鸿:188/2466/2436 品牌:永嘉微电/VINKA 封装:SOT23-6 VKD223B/NB 概述: VKD223B/VKD223NB  SOT2 ...

  3. STM32之ADC模数转换器单通道。

    ADC模数转换器 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁. 12位逐次 ...

  4. 使用HAL库开发STM32:ADC基础使用

    文章目录 目的 基础说明 基础使用 配置选项说明 轮询 单通道 单次 轮询 单通道 连续 轮询 多通道 扫描 中断 单通道 中断 多通道 扫描 DMA 单通道 单轮 DMA 单通道 连续 DMA 多通 ...

  5. stm32之ADC应用实例(单通道、多通道、基于DMA)

    硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗). 所用的芯片内嵌3个12位的模拟/数 ...

  6. STM32 ADC单通道与多通道_DMA学习笔记

    转自:https://blog.csdn.net/dmfylb/article/details/72802690 第一部分  ADC单路采集 下面我们将 PC0引脚配置成 AD1的通道10为例进行讲解 ...

  7. 【STM32】STM32CUBEMX + ADC(单通道,双通道DMA)

    STM32CUBEMX + ADC(单通道,双通道DMA) 案例应用 :使用ADC采集电压(单通道.单通道+DMA.双通道+DMA),并利用串口打印采集转换后的电压值 1.工具 IAR STM32CU ...

  8. STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    目录 一.ADC 模数转换器 1.1ADC简介 1.2 逐次逼近型ADC工作原理 1.3STM32中的ADC基本结构 1.4STM32中ADC的输入通道 1.5STM32中的ADC的四种转换模式 1. ...

  9. 【STM32多路温控—第六章】ADC单通道电流检测处理/晶振处理

    1. 时钟配置: 1.1 Crystal/Ceramic Resonator(晶体/陶瓷晶振) 1.2 BYPASS Clock Source(旁路时钟) YPASS Clock Source(旁路时 ...

最新文章

  1. c语言以空格分割字符串_C语言: 利用sscanf() 函数分割字符串
  2. 爬虫与浏览器的区别,爬虫产生(出自简书)
  3. C语言使用fopen的两点注意事项
  4. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)
  5. 测试接口python常用命令_用python实现接口测试(四、操作MySQL)-阿里云开发者社区...
  6. 学习笔记之进程管理的相关重要命令
  7. sql server 恢复数据库时提示有其他用户连接,怎么办?
  8. 数字频率系数测试软件,简易数字频率计电路图大全 - 全文
  9. 中兴服务器默认用户名密码是什么,中兴路由器登录地址默认用户名密码
  10. 【Java】代码加密
  11. 获取 Panabit Linux 版 root 密码
  12. 爬虫面试python
  13. Color Banding的个人记录
  14. (CRON) info (No MTA installed, discarding output
  15. iOS 中使用 Mobile Installation 安装 IPA(使用iTunes/AppStore一样的安装API)
  16. java断路器触发条件_断路器,AOP实现断路器模式 ------------Hystrix
  17. spotlight安装使用
  18. Layui 数据表格toolbar中使用模板引擎templet,当前系统时间比较问题
  19. 引入隔离率与潜伏人员的SIR模型附matlab代码
  20. WEB前端 网页设计 简介

热门文章

  1. Qt工作笔记-Qt文档阅读笔记-setMouseTracking(无需按下移动使得widget获取鼠标位置)
  2. Qt工作笔记-QHash与QMap查找速度粗略比较实战
  3. 增量式pid调节方式有何优点_PID控制算法
  4. wxpython是干嘛的_你都用 Python 来做什么?
  5. Java游戏触屏处理,非触屏java游戏转换为触屏游戏工具使用方法
  6. android opengl es 雾化效果实例
  7. (计算机组成原理)第二章数据的表示和运算-第二节4:定点数的加减运算和溢出判断
  8. Zookeeper C API 基本常量和结构体介绍
  9. 栈溢出笔记1.2 覆盖EIP
  10. LeetCode 77 组合