打印
[STM32F1]

adc配置出现问题

[复制链接]
331|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2022-4-11 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
移植了ucosii之后,adc配置出现了问题

使用特权

评论回复
沙发
llljh| | 2022-4-11 22:32 | 只看该作者
操作系统移植有问题吧

使用特权

评论回复
板凳
renyaq|  楼主 | 2022-4-11 22:35 | 只看该作者
还是adc本身有问题?

使用特权

评论回复
地板
xxrs| | 2022-4-11 22:38 | 只看该作者

ADC本身无此问题

使用特权

评论回复
5
zhanghqi| | 2022-4-11 22:40 | 只看该作者
在ucosii中,每个任务都是死循环,楼主考虑一下是否受影响。

使用特权

评论回复
6
chuxh| | 2022-4-11 22:43 | 只看该作者
代码结构如下,试试。
Task_ADC
{
        ADC_Init();

        for( ; ;)
        {
        }
}

使用特权

评论回复
7
renyaq|  楼主 | 2022-4-11 22:45 | 只看该作者
我是通过DMA来获得ADC数据的,贴上我的代码,请大家看看有什么问题

int  main (void)
{
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
    ADC_Configuration();//在这个位置ADC可以工作正常
    OSInit();
    OSTaskCreate(AppTaskStart,(void *)0,(OS_STK *)&AppTaskStartStk[128-1],16);
    OSStart();
}
void  AppTaskStart (void *pdata)
{
    BSP_Init();
    NVIC_Configuration();
    //ADC_Configuration();//放到这里ADC无法工作
    GPIO_Config();
    OSStatInit();
    USBD_Init(&USB_OTG_dev,USB_OTG_FS_CORE_ID,&USR_desc, &USBD_CDC_cb, &USR_cb);
    CAN_Config();   
    while(1)
    {
        AppTaskCreate();
        OSTaskSuspend(OS_PRIO_SELF);
        OSTimeDly(4);
    }
}
void ADC_Configuration(void)
{
    ADC_InitTypeDef       ADC_InitStructure;
    ADC_CommonInitTypeDef ADC_CommonInitStructure;
    DMA_InitTypeDef       DMA_InitStructure;
   
    /* Enable ADC3, DMA2 and GPIO clocks ****************************************/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
   
    /* DMA2 Stream0 channel2 configuration **************************************/
    DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&AD_Value;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    DMA_InitStructure.DMA_BufferSize = 64;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;         
    DMA_Init(DMA2_Stream0, &DMA_InitStructure);
    DMA_Cmd(DMA2_Stream0, ENABLE);
   
    /* ADC Common Init **********************************************************/
    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
    ADC_CommonInit(&ADC_CommonInitStructure);
   
    /* ADC3 Init ****************************************************************/
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfConversion = 4;
    ADC_Init(ADC1, &ADC_InitStructure);
   
    /* ADC3 regular channel6 configuration *************************************/
    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_144Cycles);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 2, ADC_SampleTime_144Cycles);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_144Cycles);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 4, ADC_SampleTime_144Cycles);
    /* Enable DMA request after last transfer (Single-ADC mode) */
    ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
   
    /* Enable ADC3 DMA */
    ADC_DMACmd(ADC1, ENABLE);
   
    /* Enable ADC3 */
    ADC_Cmd(ADC1, ENABLE);
               
   ADC_SoftwareStartConv(ADC1);
}

使用特权

评论回复
8
supernan| | 2022-4-11 22:46 | 只看该作者
容易混淆吧

使用特权

评论回复
9
juventus9554| | 2022-4-11 22:49 | 只看该作者
你这样配置,在你打开ADC之后好像ADC和DMA都是一直在运行,这样CPU的负载太重了吧。

使用特权

评论回复
10
ousj| | 2022-4-11 22:51 | 只看该作者
试试关闭ADC连续转换,保留扫描模式,然后在任务中每隔一段时间触发一次转换,看看效果如何

使用特权

评论回复
11
heweibig| | 2022-4-11 22:53 | 只看该作者

遇到和楼主同样的,放在osinit函数之前就OK了!不晓得什么原因!
知道原因的出来分享一下!

使用特权

评论回复
12
renyaq|  楼主 | 2022-4-11 22:56 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝