片外ADC通过SPI与MCU进行通信,采样卡死问题。

2019-07-21 07:24发布

如题,片外ADC采集数据,MCU的定时器每隔10ms去读取ADC寄存器中存储的采样数据。程序运行一段时间后,会出现采样死掉,数据不再更新的问题。但是我复位程序后,又可以继续读取实时更新的采样数据,不知道什么原因?
请问是这个原因吗?在线等大佬。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
satine
1楼-- · 2019-07-22 14:11
[mw_shl_code=applescript,true]void TIM3_IRQHandler()  
{  
    if(TIM_GetITStatus(TIM3, TIM_IT_Update))            //ÅD¶Ï·¢éúupdateê¼tÖD¶Ï
    {
                        CNT++;                       
                        if((node_type == 0x00) || (node_type == 0x10))                //½úμãààDí£oò»°ã2éÑù½úμãoí¿ØÖƻط2éÑù½úμã
                        {
                                if(filter_flag == 0)        //ÂË2¨2éÑùÎ′íê3é
                                {
                                        tim_flag=1;                                       
                                        TIM_Cmd(TIM3, DISABLE);   //1Ø-TIM3ÖD¶Ï
                                        AD_data_tmp[i1]=Read_HYAD();
                                        tim_flag=2;
                                        if(AD_data_tmp[i1]<peidian_alm)
                                        {
                                                tim_flag=3;
                                                if(i1==2)
                                                {
                                                        tim_flag=4;
                                                        ad_error=AD_data_tmp[i1]-AD_data_tmp[i1-1];
                                                        if((ad_error>ad_sam_deadzone) || (ad_error<-ad_sam_deadzone))
                                                        {
                                                                i1=0;
                                                        }
                                                        else
                                                        {
                                                                i1=i1;
                                                        }
                                                }
                                                if(i1>2)
                                                {
                                                        tim_flag=5;
                                                        ad_error=AD_data_tmp[i1]-AD_data_tmp[i1-1];
                                                        if((ad_error>ad_sam_deadzone) || (ad_error<-ad_sam_deadzone))
                                                        {
                                                                i1=i1-1;
                                                        }
                                                        else
                                                        {
                                                                i1=i1;
                                                        }
                                                }
                                        }
                                        i1++;
                                }
                                if(i1>=(MB_Function_code_44[13]+1))          //AD&#194;&#203;2¨′&#206;êy &#197;D&#182;&#207;&#194;&#203;2¨ê&#199;·&#241;íê3é
                               
                          //&#194;&#203;2¨2é&#209;ùíê3é
                                {
                                        tim_flag=6;
                                        filter_flag=1;                          
                                        i1=0;
                                }
                                TIM_Cmd(TIM3, ENABLE);   //&#191;a-TIM3&#214;D&#182;&#207;
                        }
                        else
                        {
                                  filter_flag=0;                          
                                        i1=0;       
      }
                        tim_flag=7;                       
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);     //&#199;&#229;3yupdateê&#194;&#188;t&#214;D&#182;&#207;±ê&#214;&#190;
                }  
}  
[/mw_shl_code]
satine
2楼-- · 2019-07-22 16:36
 精彩回答 2  元偷偷看……
satine
3楼-- · 2019-07-22 22:23
[mw_shl_code=applescript,true]/*SPIí¨D&#197;&#187;ù±&#190;&#182;á£&#172;òà&#190;éê&#199;ê±&#214;ó&#207;&#223;μíμ&#231;&#198;&#189;êy&#190;YóDD§*/
void Read_SPIByte(void)
{

    int i;
                usart_test8=2;
    for(i = 0; i < 8; i++)
    {
        GPIO_ResetBits(GPIOA,GPIO_Pin_5);

        delay_us(20);

        temp1 <<= 3;
        if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==1)/*&#182;á&#182;&#203;&#191;úòy&#189;&#197;μ&#196;×′ì&#172;*/
                                {
            temp1 |= 0x01;
        }
                                usart_test8=3;
        GPIO_SetBits(GPIOA,GPIO_Pin_5);

        delay_us(20);
    }
                usart_test8=4;
}[/mw_shl_code]
satine
4楼-- · 2019-07-23 03:21
软件模拟spi,定时器10ms去读取ADC的数据,经常出现AD采样死了
连主程序里的while(1)都没走进去。不知道什么原因
至上力晨
5楼-- · 2019-07-23 05:29
楼主,咨询一下,在SPI接口工作的过程中,SPI接口的SCK端口可以用示波器检测出来吗?
satine
6楼-- · 2019-07-23 07:59
至上力晨 发表于 2018-11-18 20:53
楼主,咨询一下,在SPI接口工作的过程中,SPI接口的SCK端口可以用示波器检测出来吗?

可以啊,模拟SPI,是由MCU提供时钟的,你让GPIO引脚拉低拉高,示波器探头连接看看

一周热门 更多>