你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8L ADC+DMA,DMA不产生中断

[复制链接]
郁工 提问时间:2017-5-10 17:07 /
如题,stm8L051单片机,多通道采样DMA传输,DMA不产生中断,没有采样到数据。初始化函数如下:
volatile  u16 ADC_ConvertedValue[3];
#define  ADC_DRH_ADRESS     0x5344

void DMA_ADC_Initial(void)
{
    GPIO_Init(GPIOB , GPIO_Pin_0 , GPIO_Mode_In_FL_No_IT);  //AD通道18 , 设置PB0 为悬空输入,并中断禁止
    GPIO_Init(GPIOD , GPIO_Pin_0 , GPIO_Mode_In_FL_No_IT);  //AD通道22 , 设置PD0 为悬空输入,并中断禁止

    /* Enable ADC1 clock */
    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
    Delay2(100);
    /* Enable DMA1 clock */
    CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
    Delay2(100);
    DMA_GlobalDeInit();
    DMA_DeInit(DMA1_Channel0);
    ADC_DeInit(ADC1);
    /* Initialize and configure ADC1 */
    ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
    ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
    ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);
    /* Enable ADC1 Channels 1 */
    ADC_ChannelCmd(ADC1, ADC_Channel_18, ENABLE); /* connected to Potentiometer RV */
    /* Enable ADC1 Channels 2 */
    ADC_ChannelCmd(ADC1, ADC_Channel_22, ENABLE); /* connected to Potentiometer RV */

    // Vref
    ADC_VrefintCmd(ENABLE);
    ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);
    ADC_SchmittTriggerConfig(ADC1, ADC_Channel_Vrefint, DISABLE);
    /* Connect ADC to DMA channel 0 */
    SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
    DMA_Init(DMA1_Channel0, (uint32_t)ADC_ConvertedValue,
            ADC_DRH_ADRESS,
            3,
            DMA_DIR_PeripheralToMemory,
            DMA_Mode_Circular,
            DMA_MemoryIncMode_Inc,
            DMA_Priority_High,
            DMA_MemoryDataSize_HalfWord);
    /* DMA Channel0 enable */
    DMA_Cmd(DMA1_Channel0, ENABLE);
    /* Enable DMA1 channel0 Transfer complete interrupt */
    DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);
    /* DMA enable */
    DMA_GlobalCmd(ENABLE);
    /* Enable ADC1 DMA requests*/
    ADC_DMACmd(ADC1, ENABLE);
    Delay2(1000);
    /* start ADC convertion by software */
    ADC_SoftwareStartConv(ADC1);
}

收藏 2 评论2 发布时间:2017-5-10 17:07

举报

2个回答
稀饭放姜 回答时间:2017-5-13 21:21:09
没有采集到数据,当然不会有DMA中断。

ADC输入要配置模拟输入通道。先搞定ADC的非DMA采样,再搞DMA吧
郁工 回答时间:2017-5-17 09:47:18
代码是OK的

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版