ADC基本结构配置

1、开启RCC时钟,包括ADC 和GPIO的时钟

2、配置ADCCLK的分频器

3、配置多路开关,这里配置成规则组

4、配置ADC转换器

5、开启ADC

6、进行校准

#include "stm32f10x.h"                  // Device header

void AD_Init(void)
{
    //开启RCC时钟,包括ADC 和GPIO的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    //配置ADCCLK的分频器
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    //GPIO配置成模拟输入
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    //配置多路开关,这里配置成规则组
    ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
    //配置ADC转换器
    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode= ADC_Mode_Independent;
    ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ContinuousConvMode=DISABLE ; 
    ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_NbrOfChannel= 1;
    ADC_InitStructure.ADC_ScanConvMode=DISABLE ;
    ADC_Init(ADC1,&ADC_InitStructure);
    //开启ADC
    ADC_Cmd(ADC1,ENABLE);
    //复位校准
    ADC_ResetCalibration(ADC1);
    //等待复位校准完成
    while(ADC_GetResetCalibrationStatus(ADC1)==SET);
    //开始校准
    ADC_StartCalibration(ADC1);
    //等待校准完成
    while(ADC_GetCalibrationStatus(ADC1)==SET);
    
}

uint16_t AD_GetValue(void)
{
    //软件触发转换
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);
    //获取状态标志位
    while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
    //获取转换值
    return ADC_GetConversionValue(ADC1);
}
 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"
uint16_t Value;
float Voltage;
int main(void)
{
    OLED_Init();
    AD_Init();
    OLED_ShowString(1,1,"Value:");
    OLED_ShowString(2,1,"Voltage:0.00V");
    while (1)
    {    
        Value=AD_GetValue();
        Voltage=(float)Value/4095*3.3;
        OLED_ShowNum(1,7,Value,4);
        OLED_ShowNum(2,9,Voltage,1);
        OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用FPGA接收ADC数据的基本步骤如下: 1. 首先,将ADC模块与FPGA板连接。在连接中,确保电源和接地引线正确连接,并将ADC输出信号引线连接到FPGA开发板上的对应引脚。 2. 在FPGA开发板上,使用硬件描述语言(如Verilog或VHDL)编写代码,以配置FPGA内部逻辑电路和外部引脚,以便接收和处理ADC数据。 3. 在代码中,定义FPGA的输入引脚,以接收从ADC输出的模拟信号。这些引脚应与ADC的输出引脚相对应,并按照正确的电气特性进行定义。 4. 根据ADC的规格和要求,配置FPGA的时钟信号和时序。这将确保FPGA在正确的时机上读取ADC数据,以避免数据丢失或损坏。 5. 在代码中,配置ADC通信所需的串行接口协议(如SPI或I2C)。这些协议将用于从ADC中读取数据,并将其传输到FPGA。 6. 在FPGA的逻辑电路中,使用适当的模块或流水线结构来处理从ADC中读取的数据。这可能涉及数据解码、滤波、放大或其他信号处理算法,以获得最终的数字结果。 7. 在需要时,将FPGA的输出接口连接到其他外部设备或处理器,以实现更高级别的数据处理或显示。这可能涉及串行通信接口(如UART或Ethernet)或并行接口(如GPIO)。 总之,通过在FPGA中定义适当的输入引脚和时序,并配置串行接口协议,可以实现与ADC之间的数据通信和接收。使用适当的逻辑电路和数据处理算法,FPGA能够处理来自ADC的数据,并将结果传递给其他外部设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值