这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】沁恒CH579M-R1开发板ADC

共5条 1/1 1 跳转至

【换取手持数字示波器】沁恒CH579M-R1开发板ADC

助工
2024-10-04 15:44:45     打赏

#include "CH57x_common.h"


UINT16 abcBuff[40]; // 定义一个全局数组,用于存储ADC采样结果

volatile UINT8  adclen; // 定义一个全局变量,用于记录ADC采样次数


void DebugInit(void)

{

    GPIOA_SetBits(GPIO_Pin_9); // 设置GPIOA的第9位为高电平

    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // 配置GPIOA的第8位为上拉输入模式

    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // 配置GPIOA的第9位为推挽输出模式,输出电流为5mA

    UART1_DefInit(); // 初始化UART1

}


int main()

{

    UINT8 i;

    signed short  RoughCalib_Value=0; // ADC粗调偏差值

    

    /* 配置串口调试 */   

    DebugInit();

    PRINT( "Start @ChipID=%02X

", R8_CHIP_ID );


    /* 温度采样并输出, 包含数据粗校准 */ 

    PRINT( "

1.Temperature sampling...

");

    ADC_InterTSSampInit(); // 初始化内部温度传感器采样

    RoughCalib_Value = ADC_DataCalib_Rough();  // 计算ADC内部偏差,记录到变量 RoughCalib_Value中,注意这个变量需要定义为有符号变量

    for(i=0; i<20; i++)

    {

        abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value;      // 连续采样20次

    }

    for(i=0; i<20; i++)

    {

        PRINT("%d ", abcBuff[i]);

    }PRINT("

");

    

    /* 单通道采样:选择adc通道9做采样,对应 PA0引脚, 带数据校准功能 */   

    PRINT( "

2.Single channel sampling...

");

    GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_Floating); // 配置GPIOA的第0位为浮空输入模式

    ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 ); // 初始化外部单通道采样,采样频率为3.2MHz,增益为1倍

    

    /* 

    注意:数据校准包括 粗调和细调:

    ADC_DataCalib_Rough() 是粗调函数,调用前需保证PA5引脚配置浮空输入模式,外部没有电压信号,在ADC初始化之后调用,一般调用一次,除非更改了ADC模式(增益改变)

    ADC_DataCalib_Fine() 是细调函数,对于粗调过的数据进行拟合算法运算,得到更精确数据

    */    

    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating); // 配置GPIOA的第5位为浮空输入模式

    RoughCalib_Value = ADC_DataCalib_Rough();  // 计算ADC内部偏差,记录到全局变量 RoughCalib_Value中  

    PRINT("=%d 

", RoughCalib_Value);    

    

    ADC_ChannelCfg( 9 );        // 配置ADC通道为9

    for(i=0; i<20; i++)

    {

        abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value;      // 连续采样20次

        ADC_DataCalib_Fine( &abcBuff[i], ADC_PGA_0 ); // 对采样数据进行细调校准

    }

    for(i=0; i<20; i++)

    {

        PRINT("%d ", abcBuff[i]);

    }PRINT("

");

    

    /* 差分通道采样:选择adc通道0做采样,对应 PA4(AIN0)、PA12(AIN2) */  

    PRINT( "

3.Diff channel sampling...

");    

    GPIOA_ModeCfg(GPIO_Pin_4|GPIO_Pin_12, GPIO_ModeIN_Floating); // 配置GPIOA的第4位和第12位为浮空输入模式    

    ADC_ExtDiffChSampInit( SampleFreq_3_2, ADC_PGA_0 ); // 初始化外部差分通道采样,采样频率为3.2MHz,增益为1倍

    ADC_ChannelCfg( 0 ); // 配置ADC通道为0

    for(i=0; i<20; i++)

    {

        abcBuff[i] = ADC_ExcutSingleConver();      // 连续采样20次

    }

    for(i=0; i<20; i++)

    {

        PRINT("%d ", abcBuff[i]);

    }PRINT("

");

    

    /* TouchKey采样:选择adc通道 2 做采样,对应 PA12 */ 

    PRINT( "

4.TouchKey sampling...

");    

    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_Floating); // 配置GPIOA的第12位为浮空输入模式

    TouchKey_ChSampInit(); // 初始化触摸按键通道采样

    ADC_ChannelCfg( 2 ); // 配置ADC通道为2

    

    for(i=0; i<20; i++)

    {

        abcBuff[i] = TouchKey_ExcutSingleConver(0x20);      // 连续采样20次

    }

    for(i=0; i<20; i++)

    {

        PRINT("%d ", abcBuff[i]);

    }PRINT("

");

        

    

    /* 单通道采样:中断方式,选择adc通道1做采样,对应 PA5引脚, 不带数据校准功能 */

    PRINT( "

5.Single channel sampling in interrupt mode...

");    

    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating); // 配置GPIOA的第5位为浮空输入模式

    ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 ); // 初始化外部单通道采样,采样频率为3.2MHz,增益为1倍

    ADC_ChannelCfg( 1 ); // 配置ADC通道为1

    NVIC_EnableIRQ(ADC_IRQn); // 使能ADC中断

    adclen = 0; // 初始化adclen为0

    

    ADC_StartUp();  // 启动ADC采样

    while(adclen < 20); // 等待adclen达到20

    NVIC_DisableIRQ(ADC_IRQn); // 关闭ADC中断

    for(i=0; i<20; i++)

    {

        PRINT("%d ", abcBuff[i]); // 打印采样结果

    }PRINT("

");

    

    while(1); // 无限循环

}


void ADC_IRQHandler(void) //adc中断服务程序

{

    if(ADC_GetITStatus()) // 如果ADC中断标志位被置位

    {

        abcBuff[adclen] = ADC_ReadConverValue(); // 读取ADC转换结果并存入abcBuff数组中对应的位置

        ADC_StartUp(); // 清除中断标志并开启新一轮采样

        adclen ++; // adclen自增1

    }

}





关键词: 【换取手持数字示波器】     沁恒     CH579M-R1     

专家
2024-10-05 12:33:09     打赏
2楼

感谢楼主分享


专家
2024-10-05 12:41:53     打赏
3楼

感谢楼主分享


专家
2024-10-05 12:43:17     打赏
4楼

感谢楼主分享


专家
2024-10-10 08:55:49     打赏
5楼

代码可以使用格式化处理,这样看起来更简洁。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]