OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8199|回复: 3

STM32F4模拟SPI驱动AD7606外部中断读取数据有误

[复制链接]

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2020-7-11
在线时间
23 小时
发表于 2021-8-1 18:29:28 | 显示全部楼层 |阅读模式
8金钱
STM32F4模拟SPI驱动AD7606外部中断读取数据有误,下面是关键代码,大家看看有没有错误
1、主函数
int main(void)
{        
        SystemInit();
        delay_init(168);   
        LED_Init();                    
        AD7606_ConfigGPIO();  配置模拟IO
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级
        uart_init(115200);        //串口波特率115200

        AD7606_RESET();   硬件复位
        AD7606_STARTCONV();        开启转换
        EXTIX_Init();       //中断初始化                                                   
       // AD7606_SETOS(0);OS接地
        while(1)
        {
        LED0=!LED0;  //提示系统在运行
        }
}

2、外部中断
void EXTIX_Init(void)    中断初始化
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        EXTI_InitTypeDef   EXTI_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource5);    外部中断BUSY,PA5
       
       EXTI_InitStructure.EXTI_Line = EXTI_Line0;
       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
       EXTI_InitStructure.EXTI_LineCmd = ENABLE;
       EXTI_Init(&EXTI_InitStructure);
       
       NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
       NVIC_Init(&NVIC_InitStructure);                  
}

3、中断服务函数
void EXTI0_IRQHandler(void)
{
        int16_t adc;
        LED1=!LED1;        提示进入中断
        AD7606_Scan();扫描读取
        AD7606_Mak();处理
         AD7606_Disp();显示
         EXTI_ClearITPendingBit(EXTI_Line0);//清楚中断标志位       
}

4、读取函数
void AD7606_Scan(void)                
{
        uint8_t i;                       
        if (AD7606_BUSY == 0)          
    {
                AD7606_CS_L;
                for (i = 0; i < 8; i++)
                {
                        s_adc_now = spiRead1();       
                        s_adc_now = s_adc_now * 256 + spiRead1();
                }
       
                AD7606_CS_H;
          AD7606_STARTCONV();        开启转换       

        }
}         

5、读取AD转换数据
int16_t spiRead1(void)
{       
   uint8_t i,j;
   int16_t read = 0;

    for (i = 0; i < 8; i++)
    {
        AD7606_SCLK_L;
        for(j=0; j<2; j++);
        read = read << 1;
        if (AD7606_DOUTA )
        {
            read++;
        }
        AD7606_SCLK_H;
        for(j=0; j<2; j++);
    }
    return read;
}

6、处理数据
void AD7606_Mak(void)
{
        uint8_t i;
        int16_t adc;
        for (i = 0;i < 8; i++)
        {       
                s_dat = s_adc_now;;
                adc = s_dat;
                s_volt = (adc * 10000) / 32767;
        }
}

7、显示
void AD7606_Disp(void)
{
        int16_t i;       
        int16_t iTemp;
        for (i = 0; i < 8; i++)
        {               
                   iTemp = s_volt;        /* uV  */
               
                if (s_dat < 0)
                {
                        iTemp = -iTemp;
          printf(" CH%d = %6d,0x%04X (-%d.%d%d%d V) \r\n", i+1, s_dat, (uint16_t)s_dat, iTemp /1000, (iTemp%1000)/100, (iTemp%100)/10,iTemp%10);
                }
                else
                {
                 printf(" CH%d = %6d,0x%04X ( %d.%d%d%d V) \r\n", i+1, s_dat, s_dat , iTemp /1000, (iTemp%1000)/100, (iTemp%100)/10,iTemp%10);                    
                }
        }

}


程序在Xcom上采样结果

用的AD7606模块为矩阵科技的,3.3V供电
查阅资料,得知正确空载情况下,8路采样结果如下:
CH1 =   6611,0x19D3 ( 2.017 V)
CH2=   6629,0x19E5 ( 2.023 V)
CH3=   6630,0x19E6 ( 2.023 V)
CH4=   6629,0x19E5 ( 2.023 V)
CH5=   6630,0x19E6 ( 2.023 V)
CH6=   6622,0x19DE ( 2.020 V)
CH7=   6619,0x19DB ( 2.020 V)
CH8=   6624,0x19E0 ( 2.021 V)
各位大佬帮忙看看,感谢


最佳答案

查看完整内容[请看2#楼]

已解决,是模块问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2020-7-11
在线时间
23 小时
 楼主| 发表于 2021-8-1 18:29:29 | 显示全部楼层
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2021-1-7
在线时间
31 小时
发表于 2021-9-9 16:31:38 | 显示全部楼层
模块问题是什么意思 模块坏了吗
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-10-19
在线时间
18 小时
发表于 2022-4-18 14:05:57 | 显示全部楼层
前辈您好,我最近也在做AD7606的项目,方不方便加个联系方式请教您几个问题qq:1530039503
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 20:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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