硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4716|回复: 4
收起左侧

[ADC] STM32H7自带的电压基准设置函数,主要是供自带ADC和DAC使用。

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2018-9-8 02:21:02 | 显示全部楼层 |阅读模式
1、函数void HAL_SYSCFG_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling)
(1)此函数用于配置内部电压基准大小配置。
(2)当形参VoltageScaling = SYSCFG_VREFBUF_VOLTAGE_SCALE0时
        输出基准是2.048 V,条件是VDDA >= 2.4V。

        当形参VoltageScaling = SYSCFG_VREFBUF_VOLTAGE_SCALE1时
        输出基准是2.5 V,条件是VDDA >= 2.8V。

        当形参VoltageScaling = SYSCFG_VREFBUF_VOLTAGE_SCALE2时
        输出基准是1.5 V,条件是VDDA >= 1.8V。

        当形参VoltageScaling = SYSCFG_VREFBUF_VOLTAGE_SCALE3时
        输出基准是1.8 V,条件是VDDA >= 2.1V。
  1. void HAL_SYSCFG_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_SYSCFG_VREFBUF_VOLTAGE_SCALE(VoltageScaling));
  5.   
  6.   MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_VRS, VoltageScaling);
  7. }
复制代码


2、函数void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
(1)此函数用于配置内部电压基准是否在芯片内部分VREF+引脚接通。
(2)形参为SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE时,表示导通。
        形参为SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE时,表示高阻,即不导通。
  1. void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(Mode));
  5.   
  6.   MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_HIZ, Mode);
  7. }
复制代码


3、函数void HAL_SYSCFG_VREFBUF_TrimmingConfig(uint32_t TrimmingValue)
(1)此函数用于内部电压基准的的校准调节。
  1. void HAL_SYSCFG_VREFBUF_TrimmingConfig(uint32_t TrimmingValue)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_SYSCFG_VREFBUF_TRIMMING(TrimmingValue));
  5.   
  6.   MODIFY_REG(VREFBUF->CCR, VREFBUF_CCR_TRIM, TrimmingValue);
  7. }
复制代码


4、函数HAL_StatusTypeDef HAL_SYSCFG_EnableVREFBUF(void)和void HAL_SYSCFG_DisableVREFBUF(void)
(1)分别用于内部电压参考基准的禁止和使能。
  1. HAL_StatusTypeDef HAL_SYSCFG_EnableVREFBUF(void)
  2. {
  3.   uint32_t  tickstart = 0;
  4.   
  5.   SET_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
  6.   
  7.   /* Get Start Tick*/
  8.   tickstart = HAL_GetTick();

  9.   /* Wait for VRR bit  */
  10.   while(READ_BIT(VREFBUF->CSR, VREFBUF_CSR_VRR) == RESET)
  11.   {
  12.     if((HAL_GetTick() - tickstart) > VREFBUF_TIMEOUT_VALUE)
  13.     {
  14.       return HAL_TIMEOUT;
  15.     }
  16.   }
  17.   
  18.   return HAL_OK;
  19. }
  20. void HAL_SYSCFG_DisableVREFBUF(void)
  21. {
  22.   CLEAR_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
  23. }
复制代码
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2018-9-8 08:41:52 | 显示全部楼层
顶贴支持。外围物料、电源芯片的误差随机组合,熟悉基准方便查漏补缺。
Releasing your creativity
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
 楼主| 发表于 2018-9-8 10:39:53 | 显示全部楼层
开启使用内部电压基准,基准电压2.5V:
HAL_SYSCFG_VREFBUF_VoltageScalingConfig(SYSCFG_VREFBUF_VOLTAGE_SCALE1);
HAL_SYSCFG_EnableVREFBUF();
HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE);
使用外部参考电压:
HAL_SYSCFG_DisableVREFBUF();
HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE);


回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2018-10-17 17:14:52 | 显示全部楼层
我测试了一下STM32H750的这个功能,不好用
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2018-10-18 08:28:21 | 显示全部楼层
无论怎么配置,寄存器都会来一直为0,也不起作用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 06:59 , Processed in 0.157749 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表