查看: 3413|回复: 0

fm33le0温度传感器,DMA读取异常

[复制链接]

0

主题

0

帖子

22

积分

初级工程师

Rank: 1

积分
22
发表于 2024-9-8 15:25:58 | 显示全部楼层 |阅读模式
本帖最后由 w2024 于 2024-9-8 15:34 编辑

您好,fm33le0单片机,使用片上温度传感器,用查询方式获取adc值进行计算,可以得到实际温度,如果用dma方式进行adc采集,FL_ADC_INTERNAL_TS通道获取的值跳变非常大,500-900,几乎不能用,麻烦帮忙看看问题原因。还有一个问题就是adc校准的问题

    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    FL_ADC_InitTypeDef    defaultInitStruct;
        FL_ADC_CommonInitTypeDef    CommonInitStruct;


        CommonInitStruct.clockSource = FL_RCC_ADC_CLK_SOURCE_RCHF;
    CommonInitStruct.clockPrescaler = FL_RCC_ADC_PSC_DIV8;
    FL_ADC_CommonInit(&CommonInitStruct);


    defaultInitStruct.conversionMode = FL_ADC_CONV_MODE_CONTINUOUS;
    defaultInitStruct.autoMode = FL_ADC_SINGLE_CONV_MODE_AUTO;
    defaultInitStruct.waitMode = FL_ENABLE;
    defaultInitStruct.overrunMode = FL_ENABLE;
    defaultInitStruct.scanDirection = FL_ADC_SEQ_SCAN_DIR_FORWARD;
    defaultInitStruct.externalTrigConv = FL_ADC_TRIGGER_EDGE_NONE;
    defaultInitStruct.triggerSource = FL_ADC_TRGI_RTC;
    defaultInitStruct.fastChannelTime = FL_ADC_FAST_CH_SAMPLING_TIME_4_ADCCLK;
    defaultInitStruct.lowChannelTime = FL_ADC_SLOW_CH_SAMPLING_TIME_192_ADCCLK;
    defaultInitStruct.oversamplingMode = FL_ENABLE;
    defaultInitStruct.overSampingMultiplier = FL_ADC_OVERSAMPLING_MUL_16X;
    defaultInitStruct.oversamplingShift = FL_ADC_OVERSAMPLING_SHIFT_4B;
    FL_ADC_Init(ADC, &defaultInitStruct);


        //FL_ADC_EnableCalibration(ADC);
        //while(FL_ADC_IsActiveFlag_EndOfCalibration(ADC) == 0);//这样写会卡死在这里
        
        FL_ADC_DisableSequencerChannel(ADC, FL_ADC_ALL_CHANNEL);      //清空打开的通道
   
        FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_TS);
        FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_AVREF);


    FL_ADC_EnableDMAReq(ADC);



回复

使用道具 举报

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

本版积分规则

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