5.13 OPAMP 使用说明

本章说明 N32G033 标准外设库中 OPAMP 驱动的文件组成、10 个公开函数,以及 PGA 1 个示例。内部运算放大器的四种工作模式、增益档位与输入引脚映射请配合用户手册的“运算放大器(OPAMP)”章节阅读,芯片已知问题以勘误手册为准。

5.13.1 相关文件

相对路径 作用
firmware/n32g033_std_periph_driver/inc/n32g033_opamp.h 定义 OPAMP_InitType 结构体与工作模式、增益、VP/VM 输入选择、参考电压、锁定等宏,并按复位与初始化、内部缓冲与增益、输入选择与锁定、参考电压四个区段声明 10 个公开函数
firmware/n32g033_std_periph_driver/src/n32g033_opamp.c 实现上述 10 个函数:OPAMP 复位、结构体默认值与初始化、使能与内部缓冲、增益与输入选择、参考电压选择与锁定
projects/n32g033_EVAL/examples/OPAMP/ OPAMP 示例根目录,含 PGA 1 个示例
projects/n32g033_EVAL/examples/OPAMP/PGA/ 该示例的工程目录组成:MDK-ARM/、EWARM/、inc/、src/、readme.txt

5.13.2 API 参考

搜索 API共 10 个函数

以下 10 个公开函数按 n32g033_opamp.h 的声明顺序分为 4 组;每个条目给出功能摘要与 n32g033_opamp.c 中该函数正上方的注释原文。

复位与初始化

OPAMP_DeInit、OPAMP_StructInit、OPAMP_Init、OPAMP_Enable

内部缓冲与增益

OPAMP_EnableInterBufferMode、OPAMP_SetPgaGain

输入选择与锁定

OPAMP1_SetVpSel、OPAMP1_SetVmSel、OPAMP_SetLock

参考电压选择

OPAMP_VREFPSel

void OPAMP_DeInit(void)复位 OPAMP 寄存器。
源码注释
name    OPAMP_DeInit.
fun     Reset the OPAMP registers.
return  none
void OPAMP_StructInit(OPAMP_InitType* OPAMP_InitStruct)用默认值填充 OPAMP_InitStruct 的各个成员。
源码注释
name    OPAMP_StructInit.
fun     Fills each OPAMP_initstruct member with its default value.
param   OPAMP_initstruct :
          - Gain
          - Mode
          - OPAMP1_Vpsel
          - OPAMP1_Vmsel
return  none
void OPAMP_Init(OPAMPX OPAMPx, OPAMP_InitType* OPAMP_InitStruct)按 OPAMP_InitStruct 初始化指定的 OPAMP。
源码注释
name    OPAMP_Init.
fun     Initializes the OPAMP according to OPAMP_InitStruct.
param   OPAMPX :
          - OPAMP1
          - OPAMP2
          - OPAMP3
param   OPAMP_InitStruct :
          - Mode :just vailed For OPAMP1
            - OPAMP1_CS_MODE_EXT_OPA
            - OPAMP1_CS_MODE_DIFF_PGA
            - OPAMP1_CS_MODE_INTER_PGA
            - OPAMP1_CS_MODE_BUFF_EN
          - Mode :just vailed For OPAMP2/3
            - OPAMP23_CS_MODE_DISBALE
            - OPAMP23_CS_MODE_BUFF_EN
param     - VpSel : just vailed For OPA1
            - OPAMP1_CS_VPSEL_PF0
            - OPAMP1_CS_VPSEL_PA0
            - OPAMP1_CS_VPSEL_PA1
            - OPAMP1_CS_VPSEL_PA4
            - OPAMP1_CS_VPSEL_PA7
            - OPAMP1_CS_VPSEL_PB0
          - VmSel : just vailed For OPA1
            - OPAMP1_CS_VMSEL_PF1
            - OPAMP1_CS_VMSEL_PA2
            - OPAMP1_CS_VMSEL_PA5
            - OPAMP1_CS_VMSEL_PB1
            - OPAMP1_CS_VMSEL_PB2
          - Gain : just vailed For OPAMP1
            - OPAMP1_CS_PGA_GAIN_2_DIFF_1
            - OPAMP1_CS_PGA_GAIN_4_DIFF_2
            - OPAMP1_CS_PGA_GAIN_8_DIFF_4
            - OPAMP1_CS_PGA_GAIN_16_DIFF_8
            - OPAMP1_CS_PGA_GAIN_32_DIFF_16
            - OPAMP1_CS_PGA_GAIN_xx_DIFF_32
          - Gain : just vailed For OPAMP2/3
            - OPAMP23_CS_PGA_GAIN_DIFF_1
            - OPAMP23_CS_PGA_GAIN_DIFF_2
            - OPAMP23_CS_PGA_GAIN_DIFF_4
            - OPAMP23_CS_PGA_GAIN_DIFF_8
            - OPAMP23_CS_PGA_GAIN_DIFF_16
return  none
void OPAMP_Enable(OPAMPX OPAMPx, FunctionalState Cmd)使能或关闭指定的 OPAMP。
源码注释
name    OPAMP_Enable.
fun     Enable or disable opampx .
param   OPAMPX :
          - OPAMP1
          - OPAMP2
          - OPAMP3
param   Cmd :
          - ENABLE
          - DISABLE
return  none
void OPAMP_EnableInterBufferMode(OPAMPX OPAMPx, FunctionalState Cmd)使能或关闭 OPAMP2、OPAMP3 的内部缓冲模式。
源码注释
name    OPAMP_EnableInterBufferMode.
fun     Enable or disable opampx internal buffer mode .
param   OPAMPX :
          - OPAMP2
          - OPAMP3
param   Cmd :
          - ENABLE
          - DISABLE
return  none
note  OPA2 and OPA3 support this function.
void OPAMP_SetPgaGain(OPAMPX OPAMPx, uint32_t Gain)设置指定 OPAMP 的 PGA 增益档位。
源码注释
name    OPAMP_SetPgaGain.
fun     Set opampx gain value selection
param   OPAMPX :
          - OPAMP1
          - OPAMP2
          - OPAMP3
param   Gain :
        - OPAMP1
          - OPAMP1_CS_PGA_GAIN_2_DIFF_1
          - OPAMP1_CS_PGA_GAIN_4_DIFF_2
          - OPAMP1_CS_PGA_GAIN_8_DIFF_4
          - OPAMP1_CS_PGA_GAIN_16_DIFF_8
          - OPAMP1_CS_PGA_GAIN_32_DIFF_16
          - OPAMP1_CS_PGA_GAIN_xx_DIFF_32
        - OPAMP2/3
          - OPAMP23_CS_PGA_GAIN_DIFF_1
          - OPAMP23_CS_PGA_GAIN_DIFF_2
          - OPAMP23_CS_PGA_GAIN_DIFF_4
          - OPAMP23_CS_PGA_GAIN_DIFF_8
          - OPAMP23_CS_PGA_GAIN_DIFF_16
return  none
void OPAMP1_SetVpSel(uint32_t VpSel)选择 OPAMP1 的同相输入端(VP)。
源码注释
name    OPAMP1_SetVpSel.
fun     Set opamp1 VP selection
param   VpSel :
          - OPAMP1_CS_VPSEL_PF0
          - OPAMP1_CS_VPSEL_PA0
          - OPAMP1_CS_VPSEL_PA1
          - OPAMP1_CS_VPSEL_PA4
          - OPAMP1_CS_VPSEL_PA7
          - OPAMP1_CS_VPSEL_PB0
return  none
void OPAMP1_SetVmSel(uint32_t VmSel)选择 OPAMP1 的反相输入端(VM)。
源码注释
name    OPAMP1_SetVmSel.
fun     Set opamp1 Vm selection
param   VmSel :
          - OPAMP1_CS_VMSEL_PF1
          - OPAMP1_CS_VMSEL_PA2
          - OPAMP1_CS_VMSEL_PA5
          - OPAMP1_CS_VMSEL_PB1
          - OPAMP1_CS_VMSEL_PB2
return  none
void OPAMP_SetLock(uint32_t Lock)设置 OPAMP 写保护锁定。
源码注释
name    OPAMP_SetLock.
fun     Set opamp lock
param   Lock :
          - OPAMP_LOCK
return  none
void OPAMP_VREFPSel(OPAMPX OPAMPx, uint32_t VrefSel)设置指定 OPAMP 的参考电压 VREFP。
源码注释
name    OPAMP_VREFPSel.
fun     Set opampx vrefp selection
param   OPAMPX :
          - OPAMP1
          - OPAMP2
          - OPAMP3
param   VrefSel :
          - OPAMP_VREFP_SEL_0_9V
          - OPAMP_VREFP_SEL_1_8VDD
          - OPAMP_VREFP_SEL_1_4VDD
return  none

5.13.3 Demo 示例说明

本节说明 OPAMP 的 1 个示例:PGA 把 OPAMP1 配成内部 PGA 模式,对 PA0 的同相输入电压做 2 倍放大,放大结果由 PA6 输出。

5.13.3.1 PGA 内部 PGA 增益放大

工程目录: projects/n32g033_EVAL/examples/OPAMP/PGA/

使能 GPIO 与 OPA 时钟→配置 PA0、PA6 为模拟输入→用结构体把 OPAMP1 配成内部 PGA 模式并设 2 倍增益→使能 OPAMP1 后由 PA6 输出放大结果

项目 源码解读
功能 把 OPAMP1 配成内部 PGA 模式,以 PA0 为同相输入、PA6 为输出,对输入电压做 2 倍放大。
源码组成 src/main.c 含 RCC_Configuration、GPIO_Configuration、OPAMP_Configuration;
src/n32g033_it.c 与 inc/n32g033_it.h 为中断函数;
inc/main.h 给出声明;
readme.txt 给出配置与测试步骤;
工程文件在 MDK-ARM/ 与 EWARM/。
关键配置 引脚:PA0 为 OPA1 同相输入、PA6 为 OPA1 输出,均为模拟功能;
模式:OPAMP1_CS_MODE_INTER_PGA(内部 PGA);
增益:OPAMP1_CS_PGA_GAIN_2_DIFF_1(2 倍);
时钟:系统时钟 64 MHz。
程序与数据路径 main → RCC_Configuration 打开 GPIO 与 OPA 时钟 → GPIO_Configuration 把 PA0、PA6 设为模拟功能 → OPAMP_Configuration 取默认值后填模式、输入与增益,再调用 OPAMP_Init 并 OPAMP_Enable → 放大结果由 PA6 输出。
主要 API OPAMP_StructInit、OPAMP_Init、OPAMP_Enable
验证方法 编译后进入调试模式,用示波器观察 PA0 输入与 PA6 输出;
OPA1 输出约为输入电压的 2 倍。
使用提示 开发环境为 KEIL MDK-ARM V5.34.0.0 或 IAR EWARM 8.50.1,硬件基于评估板 N32G033K8Q7-1_STB V1.0;
内部 PGA 的增益由片内电阻反馈网络提供,输入不要超出供电范围。
核心代码解读与移植

示例把 OPAMP1 的输入、工作模式与增益一次写入结构体,初始化后使能即可输出。

数据路径: RCC_Configuration 开 GPIO 与 OPA 时钟 → GPIO_Configuration 写 PA0、PA6 模拟模式 → OPAMP_StructInit 取默认值 → OPAMP_Configuration 填输入与内部 PGA 增益 → OPAMP_Init 写控制寄存器 → OPAMP_Enable 使能输出

1. 先打开 GPIO 与 OPA 的 APB 时钟。 OPA 挂在 APB 上,两个时钟一次使能,之后才能配置引脚与运放。

src/main.csrc/main.c · RCC_Configuration
void RCC_Configuration(void)
{
    /* Enable peripheral clocks ------------------------------------------------*/

    /* Enable GPIO OPA clocks */
    RCC_EnableAPBPeriphClk(RCC_APB_PERIPH_GPIO | RCC_APB_PERIPH_OPA, ENABLE);
}

换到其他模块时按实际外设改 RCC_APB_PERIPH_xxx,同一条语句里的多个宏可以按位或一起打开。

2. 把输入与输出引脚配成模拟功能。 模拟模式下引脚不接数字通道,输入 PA0 与输出 PA6 共用一次配置。

src/main.csrc/main.c · GPIO_Configuration
    GPIO_InitStruct(&GPIO_InitStructure);
    /* Configure  INP PA0 OUT PA6 as analog input -----------------------*/
    GPIO_InitStructure.Pin       = GPIO_PIN_0 | GPIO_PIN_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_ANALOG;
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

换用其他输入或输出引脚时,这里要同步改 Pin,并保证引脚号符合用户手册的 OPA 输入输出映射。

3. 用结构体一次配好模式、输入与增益,再使能。 结构体成员分别对应工作模式、同相输入选择与增益;本例选内部 PGA 模式并把增益设为 2 倍,最后使能 OPAMP1。

src/main.csrc/main.c · OPAMP_Configuration
    OPAMP_InitType OPAMP_Initial;
    OPAMP_StructInit(&OPAMP_Initial);
    OPAMP_Initial.OPAMP1_Vpsel = OPAMP1_CS_VPSEL_PA0;
    OPAMP_Initial.Gain         = OPAMP1_CS_PGA_GAIN_2_DIFF_1;
    OPAMP_Initial.Mode         = OPAMP1_CS_MODE_INTER_PGA;
    /*configure opamp1*/
    OPAMP_Init(OPAMP1, &OPAMP_Initial);

    OPAMP_Enable(OPAMP1, ENABLE);

单端 PGA 模式下 VM 引脚需保持浮空,增益档位要与模式匹配;改用跟随或差分模式时,Mode 与 Gain 的宏都要按用户手册换成对应取值。

对应源码: src/main.c、firmware/n32g033_std_periph_driver/inc/n32g033_opamp.h

5.13.4 注意与排障

场景 检查与建议 来源
输入与输出范围 用户手册 OPAMP 章写明 OPAMP 输入范围为 0 V 到 VDDA,输出范围为 0.4 V 到 VDDA-0.4 V;
信号超出该范围时输出不可用。
用户手册
单端 PGA 的 VM 引脚 用户手册 OPAMP 章写明单端增益(PGA)模式(MOD=10)下 VMSEL 引脚必须设为浮空;
VP 引脚用于选择同相输入。
用户手册
跟随模式的 VM 引脚 用户手册 OPAMP 章写明跟随模式下 VMSEL 由芯片内部连接到输出端口;
未占用的 VM 引脚可作普通 GPIO。
用户手册
增益档位与模式匹配 用户手册 OPAMP 章写明 OPA1 单端 PGA 增益为 2/4/8/16/32 倍、差分 PGA 为 1/2/4/8/16/32 倍;
OPA2、OPA3 仅差分 PGA,增益为 1/2/4/8/16 倍,且无输出引脚。
用户手册
OPAMP 写保护 用户手册 OPAMP 章写明 OPAMP_LOCK 置位后 OPAMP1/2/3 控制寄存器变为只读;
只有芯片复位或 OPA 模块复位才能清除写保护。
用户手册

勘误手册 V1.0.0(2025.9.25)针对 A 版芯片,未列出 OPAMP 相关条目。

国民技术开发套件文档中心

按芯片系列在线查阅国民技术 MCU 开发套件的芯片资料、SDK、驱动 API 与 Demo 示例说明。

© 2026 国民技术股份有限公司 版权所有粤ICP备11069485号本站使用不含 Cookie 的匿名访问统计