/****************************************************/

// 程序用途:用来测试通过内部基准电压计算外部VDDA的值

// 程序作者:孟瑞生

// 微信公众号:科技老顽童

/****************************************************/

#include "stm32f0xx.h"

#include "stdio.h"

__IO uint16_t VREFINT_CAL;

__IO uint16_t VREFINT_DATA;

__IO float VDDA_VAL;

// 下面三个延时函数,是用示波器试出来的,非精确延时(48MHz)

void delay_1us(void)

{

volatile uint16_t i=1;

while(i--);

}

void delay_us(uint16_t us)

{

while(us--)

{

delay_1us();

}

}

void delay_ms(uint16_t ms)

{

while(ms--)

{

delay_us(995);

}

}

/**

* @brief  ADC Configuration

* @param  None

* @retval None

*/

static void ADC_Config(void)

{

ADC_InitTypeDef     ADC_InitStructure;

GPIO_InitTypeDef    GPIO_InitStructure;

/* GPIOC Periph clock enable */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

/* ADC1 Periph clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

/* Configure ADC Channel 0 as analog input */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* ADCs DeInit */

ADC_DeInit(ADC1);

/* Initialize ADC structure */

ADC_StructInit(&ADC_InitStructure);

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

ADC_Init(ADC1, &ADC_InitStructure);

/* Convert the ADC1 Channel 0 with 239.5 Cycles as sampling time */

ADC_ChannelConfig(ADC1, ADC_Channel_Vrefint , ADC_SampleTime_239_5Cycles);

ADC_VrefintCmd(ENABLE);

/* 得到基准电压校准值 */

VREFINT_CAL = *(__IO uint16_t *)(0X1FFFF7BA);

/* ADC Calibration */

ADC_GetCalibrationFactor(ADC1);

/* Enable the ADC peripheral */

ADC_Cmd(ADC1, ENABLE);

/* Wait the ADRDY flag */

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));

/* ADC1 regular Software Start Conv */

ADC_StartOfConversion(ADC1);

}

/**

* @brief  UART1 Configuration

* @param  None

* @retval None

*/

void UART1_Init()

{

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

USART_InitTypeDef USART_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

/* Enable USART1 Clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

/* USART1 Pins configuration ************************************************/

/* Connect pin to Periph */

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

/* Configure pins as AF pushpull */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 IRQ Channel configuration */

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/* USART1  configured as follow:

- BaudRate = 9600 baud

- Word Length = 8 Bits

- One Stop Bit

- No parity

- Hardware flow control disabled (RTS and CTS signals)

- Receive and transmit enabled

*/

USART_InitStructure.USART_BaudRate = 115200;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

/* Enable the USART1 */

USART_Cmd(USART1, ENABLE);

}

int fputc(int ch, FILE *f)

{

/* Place your implementation of fputc here */

/* e.g. write a character to the USART */

USART_SendData(USART1, (uint8_t) ch);

/* Loop until transmit data register is empty */

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

return ch;

}

// 主函数

int main(void)

{

delay_ms(200);

ADC_Config();

UART1_Init();

while(1)

{

VREFINT_DATA =ADC_GetConversionValue(ADC1);

VDDA_VAL = (3.3*VREFINT_CAL)/VREFINT_DATA;

printf("\n\rVDDA:%.3fV\n\r",VDDA_VAL);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

delay_ms(1000);

}

}

stm32f429vref怎么接_STM32如何通过内部VREF得到实际的VDDA值相关推荐

  1. stm32f429vref怎么接_STM32开发笔记58: STM32F407特殊引脚连接电路

    单片机型号:STM32F407VGT6 本文介绍STM32F407特殊引脚连接电路,见下图: 引脚:49.73 VCAP_1和VCAP_2,按照下列电路设计方法进行设计.这里应该着重看最后1句话,其表 ...

  2. 全局变量-函数内部不允许修改局部变量的值

    # 全局变量 num = 10def demo1():# 希望修改全局变量的值# 在 python 中,是不允许直接修改全局变量的值# 如果使用赋值语句,会在函数内部,定义一个局部变量num = 99 ...

  3. STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压

    问题   今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚).当我们使用 ...

  4. STM32 ADC采样使用内部参考电压

    整理也能进步!写得清楚才能理解更深. [问题背景] 在使用ADC时,通常的用法是Vref+接电源VDD3.3V,然后计算时直接用3.3V做参考电压,但是这种方法忽略了一些情况如供电电压有可能随外部一些 ...

  5. stm32定时2通道3映射_stm32学习笔记之问题总结

    1. SYSCLK时钟源有三个来源:HSI RC.HSE OSC.PLL; 2. MCO[2:0]可以提供4源不同的时钟同步信号; 3. GPIO口貌似有两个反向串联的二极管用作钳位二极管; 4. 总 ...

  6. MCU内部参考电压几种妙用你都知道嘛

    近期接触到STM32L0系列MCU,为了发挥超低功耗特性使用的也是干电池供电,想要获取当前干电池组的电量. 起初的方案设计是在MCU的IO口找一路ADC,使用分压方式直接让MCU采集电量,之后在查找资 ...

  7. 基于STM32HAL库ADC+DMA模式,高精度采集电池电量与芯片内部温度方法 (48脚 使用内部参考电压方案)

    目录 概述 1.原理图 2.在这先普及一下概念 3.通过查看STM32L0中文数据手册中301页,第14.10 小节 ,DataSheet 4.ADC通道转换模式的理解 5.STM32CubeMx工具 ...

  8. STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压,内部参照电压的具体方法,只有在STM32F0x芯片的参考手册中才能找到,其他MCU的参考手册都是很简单的说明

    STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压 ZCShouEXP 2018-12-21 10:50:33  16404  收藏 32 展开 问题   今天在使用 ...

  9. STM32 之 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压和ADC校准

    STM32 之 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压 发布时间:2018-12-21 10:50, 浏览次数:1553 , 标签: STM VREFINT ADC < ...

最新文章

  1. android Adapter
  2. java 接口 静态方法_Java 8 接口静态方法
  3. boost::hana::tuple_t用法的测试程序
  4. C/C++中宏使用总结
  5. ssl1746-商务旅行【tarjan,LCA】
  6. MyEclipse生成Javadoc帮助文档
  7. 对口升学计算机知识重点,对口升学信息技术(计算机)类2017年专业课考试大纲...
  8. 天梯赛 L2-011. (二叉树) 玩转二叉树
  9. k8s学习: Ingress Nginx
  10. 机器学习入门——MINST
  11. COMSOL案例内容,有需要的了解下!
  12. HTML+CSS静态页面网页设计作业:我的家乡网站设计——我的家乡-莆仙(6页)
  13. 多重心法选址matlab,重心法选址问题.ppt
  14. 计算机主机关不了,电脑无法关机怎么办_电脑正常关机关不了如何解决
  15. [教程分享]锐族MP3刷固件教程
  16. 安卓手机免root权限恢复微信聊天记录(以vivo手机为例)
  17. 视频显著性检测----《Flow Guided Recurrent Neural Encoder for Video Salient Object Detection》
  18. interview for chinaPay
  19. 为什么戏说php,戏说PHP——1.1切的开始
  20. 微信投票服务器在哪做,微信的投票功能在哪里?怎么制作微信投票活动?

热门文章

  1. Java DataOutputStream writeInt()方法及示例
  2. Java File类boolean delete()方法(带示例)
  3. covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践
  4. freemarker的测试结果框架_java必背综合知识点总结(框架篇)
  5. java上传kafka的方法_哪种方法是将所有数据从Kafka主题复制到接收器(文件或Hive表)的最佳方法?...
  6. java enummap_Java EnumMap values()方法与示例
  7. 关于二维数组取地址加以或减一解引用问题
  8. 史上最全 yum 入门使用教程和常见错误解决办法
  9. python制作一个计时器_如何在python中创建一个反应计时器作为GUI?
  10. 西安理工大学计算机研究生名单,西安理工大学2019年硕士研究生拟录取名单