STM32G474xx HAL用户手册
stm32g4xx_hal_opamp.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_opamp.c
00004   * @author  MCD Application Team
00005   * @brief   OPAMP HAL模块驱动程序。
00006   *          本文件提供固件功能,用于管理运算放大器外设的以下功能:
00007   *           + 初始化/反初始化功能
00008   *           + I/O操作功能
00009   *           + 外设控制功能
00010   *           + 外设状态功能
00011   *
00012   ******************************************************************************
00013   * @attention
00014   *
00015   * Copyright (c) 2019 STMicroelectronics.
00016   * All rights reserved.
00017   *
00018   * This software is licensed under terms that can be found in the LICENSE file
00019   * in the root directory of this software component.
00020   * If no LICENSE file comes with this software, it is provided AS-IS.
00021   *
00022   ******************************************************************************
00023   @verbatim
00024 ================================================================================
00025           ##### OPAMP外设特性 #####
00026 ================================================================================
00027 
00028   [..] 该器件集成了多达6个运算放大器OPAMP1、OPAMP2、
00029        OPAMP3、OPAMP4、OPAMP5和OPAMP6:
00030 
00031        (#) OPAMP提供多种独占运行模式。
00032        (++) 独立模式
00033        (++) 可编程增益放大器(PGA)模式(电阻反馈输出)
00034        (++) 跟随器模式
00035 
00036        (#) OPAMP提供校准功能。
00037        (++) 校准旨在校正某些运行模式的偏移。
00038        (++) OPAMP使用工厂校准设置或用户定义的
00039            校准(微调)设置(即微调模式)。
00040        (++) 用户定义的设置可以通过HAL_OPAMP_SelfCalibrate、
00041             HAL_OPAMPEx_SelfCalibrateAll处理的自校准来确定
00042        (++) HAL_OPAMP_SelfCalibrate:
00043        (++) 自动运行2步校准。
00044             (对于NMOS晶体管为VDDA的90%,对于PMOS晶体管为VDDA的10%)。
00045             (由于OPAMP是轨到轨输入/输出,这2步校准在大多数情况下
00046             是合适且足够的)。
00047        (++) 启用用户微调模式
00048        (++) 使用新的校准结果更新初始化结构中的微调值
00049 
00050             用户可以存储校准结果以供更大
00051             (例如监控微调值随温度的变化
00052             )使用
00053        (++) 对于具有6个OPAMP的STM32G4器件
00054             HAL_OPAMPEx_SelfCalibrateAll
00055             并行运行6个OPAMP的校准。
00056 
00057        (#) 对于任何运行模式,可以在顶层设置额外的定时器控制多路复用器
00058            模式。
00059        (++) 定时器控制多路复用器模式允许自动切换输入
00060            配置(反相和非反相)。
00061        (++) 因此,除了默认的(主)反相和非反相输入外,
00062             用户应选择次级反相和非反相输入。
00063        (++) TIM1 OC6、TIM8 OC6和TIM20 OC6提供备用切换
00064             时序在默认(主)输入和次级输入之间。
00065        (++) 这3个定时器(TIM1、TIM8和TIM20)可以组合设计
00066             更复杂的切换方案。任何选中的通道都可以发起
00067             配置切换。
00068 
00069        (#) 运行模式:独立模式
00070        (++) 增益由外部设置(增益取决于外部负载)。
00071        (++) 也可以通过连接反相输入到输出来实现外部跟随器模式。
00072 
00073 
00074        (#) 运行模式:跟随器模式
00075        (++) 反相输入未连接。
00076 
00077        (#) 运行模式:可编程增益放大器(PGA)模式
00078            (电阻反馈输出)
00079        (++) OPAMP输出可以内部连接到电阻反馈
00080             输出。
00081        (++) OPAMP反相输入可以“不”连接,待放大信号
00082             连接到非反相输入,增益为正(2、4、8、16、32或64)
00083        (++) OPAMP反相输入可以连接到VINM0:
00084            如果信号施加到非反相输入,增益为正(2、4、8、16、32或64)。
00085            如果信号施加到反相输入,增益为负(-1、-3、-7、-15、-31或-63)。
00086            在这两种情况下,另一个输入可用作偏置。
00087 
00088 
00089 
00090             ##### 如何使用此驱动程序 #####
00091 ================================================================================
00092   [..]
00093 
00094     *** 高速/正常功耗模式 ***
00095     ============================================
00096     [..]  要运行在高速模式:
00097 
00098       (#) 使用HAL_OPAMP_Init()函数配置OPAMP:
00099       (++) 选择OPAMP_POWERMODE_HIGHSPEED
00100       (++) 否则选择OPAMP_POWERMODE_NORMALSPEED
00101 
00102     *** 校准 ***
00103     ============================================
00104     [..]  要运行OPAMP校准自校准:
00105 
00106       (#) 使用HAL_OPAMP_SelfCalibrate开始校准。
00107            存储校准结果。
00108 
00109     *** 运行模式 ***
00110     ============================================
00111     [..]  要使用OPAMP,请执行以下步骤:
00112 
00113       (#) 填写HAL_OPAMP_MspInit()以
00114       (++) 使用HAL_GPIO_Init()将OPAMP输入和输出配置为模拟模式,
00115            将OPAMP输出映射到GPIO引脚。
00116 
00117       (#) 注册回调
00118       (++) 编译定义USE_HAL_OPAMP_REGISTER_CALLBACKS设置为1时
00119            允许用户动态配置驱动程序回调。
00120 
00121       (++) 使用函数HAL_OPAMP_RegisterCallback()注册用户回调,
00122            它允许注册以下回调:
00123       (+++) MspInitCallback         : OPAMP MspInit。
00124       (+++) MspDeInitCallback       : OPAMP MspDeInit。
00125            此函数需要HAL外设句柄、回调ID
00126            和用户回调函数指针作为参数。
00127 
00128       (++) 使用函数HAL_OPAMP_UnRegisterCallback()将回调重置为默认
00129            弱(重载)函数。它允许重置以下回调:
00130       (+++) MspInitCallback         : OPAMP MspInit。
00131       (+++) MspDeInitCallback       : OPAMP MspDeInit。
00132       (++) 所有回调
00133 
00134       (#) 使用HAL_OPAMP_Init()函数配置OPAMP:
00135       (++) 选择模式
00136       (++) 选择反相输入
00137       (++) 选择非反相输入
00138       (++) 选择是否启用/禁用内部输出(如果启用,常规I/O输出被禁用)
00139       (++) 选择定时器控制多路复用器是禁用还是启用并由指定定时器控制
00140       (++) 如果启用了定时器控制多路复用器模式,选择次级反相输入
00141       (++) 如果启用了定时器控制多路复用器模式,选择次级非反相输入
00142       (++) 如果启用了PGA模式,选择是否连接反相输入。
00143       (++) 如果启用了PGA模式,选择要使用的PGA增益。
00144       (++) 选择工厂或用户定义的微调模式。
00145       (++) 如果启用了用户定义的微调模式,选择PMOS和NMOS微调值
00146           (典型设置为HAL_OPAMP_SelfCalibrate函数返回的设置)。
00147 
00148       (#) 使用HAL_OPAMP_Start()函数启用OPAMP。
00149 
00150       (#) 使用HAL_OPAMP_Stop()函数禁用OPAMP。
00151 
00152       (#) 使用HAL_OPAMP_Lock和HAL_OPAMP_TimerMuxLock函数锁定运行模式中的OPAMP。
00153           从那时起,配置只能被修改
00154       (++) 硬件复位后
00155       (++) 或者通过HAL_OPAMP_DeInit中调用的HAL_OPAMP_MspDeInit(用户定义)。
00156 
00157     *** 运行模式:OPAMP开启时重新配置 ***
00158     ============================================
00159     [..]    要在OPAMP开启时重新配置OPAMP(动态切换)
00160       (#) 如有需要,填写HAL_OPAMP_MspInit()
00161       (++) 例如,如果您想使用新的OPAMP I/O,则是这种情况
00162 
00163       (#) 使用HAL_OPAMP_Init()函数配置OPAMP:
00164       (++) 如同配置情况,首先选择您希望修改的参数。
00165       (++) 如果OPAMP控制寄存器已锁定,则无法动态修改任何值
00166           (即使是定时器控制多路复用器参数)。
00167       (++) 如果OPAMP定时器控制多路复用器模式寄存器已锁定,可以修改控制寄存器的任何值
00168           但不能修改定时器控制多路复用器模式的值。
00169 
00170       (#) 从高速模式切换到正常功耗模式(反之亦然)需要
00171           首先调用HAL_OPAMP_DeInit()(强制关闭OPAMP)然后再调用HAL_OPAMP_Init()。
00172           换句话说,如果OPAMP开启,HAL_OPAMP_Init不能单独更改功耗
00173           模式。
00174 
00175   @endverbatim
00176   ******************************************************************************
00177   */
00178 

00179 /*
00180   Additional Tables:
00181     The OPAMPs non inverting input (both default and secondary) can be
00182     selected among the list shown by table below.
00183 
00184     The OPAMPs non inverting input (both default and secondary) can be
00185     selected among the list shown by table below.
00186 
00187     Table 1.  OPAMPs inverting/non-inverting inputs for the STM32G4 devices:
00188     +-----------------------------------------------------------------------------------------------+
00189     |                 |        | OPAMP1   | OPAMP2   | OPAMP3      | OPAMP4   | OPAMP5   | OPAMP6   |
00190     |-----------------|--------|----------|----------|-------------|----------|----------|----------|
00191     |                 | No conn|  X       |  X       |  X          |  X       |  X       |  X       |
00192     | Inverting Input | VM0    | PA3      | PA5      | PB2         | PB10     | PB15     | PA1      |
00193     | (1)             | VM1    | PC5      | PC5      | PB10        | PD8      | PA3      | PB1      |
00194     |-----------------|--------|----------|----------|-------------|----------|----------|----------|
00195     |                 | VP0    | PA1      | PA7      | PB0         | PB13     | PB14     | PB12     |
00196     |  Non Inverting  | VP1    | PA3      | PB14     | PB13        | PD11     | PD12     | PD9      |
00197     |    Input        | VP2    | PA7      | PB0      | PA1         | PB11     | PC3      | PB13     |
00198     |                 | VP3    | DAC3_CH1 | PD14     | DAC3_CH2(2) | DAC4_CH1 | DAC3_CH2 | DAC3_CH1 |
00199     +-----------------------------------------------------------------------------------------------+  
00200     (1): No connection in follower mode.
00201     (2): Available for STM32G47x/ STM32G48x devices only
00202 
00203     Table 2.  OPAMPs outputs for the STM32G4 devices:
00204     +------------------------------------------------------------------------------------+
00205     |                 |        | OPAMP1 | OPAMP2 | OPAMP3   | OPAMP4 | OPAMP5 | OPAMP6   |
00206     |-----------------|--------|--------|--------|----------|--------|--------|----------|
00207     | Output          |        |  PA2   |  PA6   |  PB1     |  PB12  |  PA8   |  PB11    |
00208     |-----------------|--------|--------|--------|----------|--------|--------|----------+
00209     | Internal output |        |  ADC1  |  ADC2  |  ADC2    |  ADC5  |  ADC5  |  ADC4    |
00210     | to ADCs         |        |  CH13  |  CH16  |  CH18    |  CH5   |  CH3   |  CH17(2) |
00211     | (1)             |        |        |        |  ADC3    |        |        |  ADC3    |
00212     |                 |        |        |        |  CH13(2) |        |        |  CH17(3) |
00213     |-----------------|--------|--------|--------|----------|------ -|--------|----------|
00214     | Internal output |        |  ADC1  |  ADC2  |  ADC3    |  ADC4  |  ADC5  |  ADC1    |
00215     | to ADCs input   |        |  CH3   |  CH3   |  CH1(2)  |  CH3   |  CH1   |  CH14    |
00216     | on GPIO         |        |        |        |  ADC1    |  ADC1  |        |  ADC2    |
00217     |                 |        |        |        |  CH12    |  CH11  |        |  CH14    |
00218     +------------------------------------------------------------------------------------+
00219     (1): This ADC channel is connected internally to the OPAMPx_VOUT when OPAINTOEN 
00220          bit is set.
00221          In this case, the I/O on which the OPAMPx_VOUT is available, can be used for
00222          another purpose.
00223     (2): Available for STM32G47x/ STM32G48x devices only.