OpenEdv-开源电子网

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

stm32f407的dma更新pwm占空比更新不了,打开dma中断发现中断也不进好像没使能似的

[复制链接]

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-4-25
在线时间
27 小时
发表于 2018-1-17 14:18:03 | 显示全部楼层 |阅读模式

#define TIM1_CCR1_Address    ((uint32_t)0x40010034)




        DMA_InitTypeDef    DMA_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
        /**************DMAÅäÖÃ*****************/
        DMA_DeInit(DMA1_Stream5);
        //while (DMA_GetCmdStatus(DMA1_Stream5) != DISABLE){}
               
        TIM_DMAConfig(TIM1, TIM_DMABase_CCR1, TIM_DMABurstLength_2Bytes );  
        TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
        DMA_InitStructure.DMA_Channel=DMA_Channel_5;
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_CCR1_Address;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&SPWM[0];// SRC1_Buffer;
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  DMA_InitStructure.DMA_BufferSize =512;//DMA»o′æ′óD¡
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//16
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //16
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority =DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_MemoryBurst_Single;       
  DMA_Init(DMA1_Stream5, &DMA_InitStructure);
        DMA_ClearFlag( DMA1_Stream5,DMA_IT_TCIF5);
  DMA_ITConfig(DMA1_Stream5 , DMA_IT_TC|DMA_IT_HT , ENABLE);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel=DMA1_Stream5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);               
  DMA_Cmd(DMA1_Stream5, ENABLE);       



波形已经输出想通过DMA改变波形就不行了,








正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-4-25
在线时间
27 小时
 楼主| 发表于 2018-1-18 11:13:14 | 显示全部楼层
少了些东西,而且DMA通道也配置错了改成以下就好了
这里只贴一路其他的有需要和我联系

TIM_DMACmd(TIM1,TIM_DMA_CC1|TIM_DMA_CC2|TIM_DMA_CC3,ENABLE);//在定时器初始化添加
tim1_dma_CH1();//在定时器初始化添加

void tim1_dma_CH1(void)
{
        DMA_InitTypeDef    DMA_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;       
       
        /**************DMAÅäÖÃ*****************/
        DMA_DeInit(DMA2_Stream1);
        while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//μè′yDMA¿éÅäÖÃ
               
        DMA_ClearITPendingBit(DMA2_Stream1,DMA_IT_FEIF1|DMA_IT_DMEIF1|DMA_IT_TEIF1|DMA_IT_HTIF1|DMA_IT_TCIF1);//Çå¿ÕDMA2_Stream1éÏËùóDÖD¶Ï±êÖ¾
               
        DMA_InitStructure.DMA_Channel=DMA_Channel_6;
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_CCR1_Address;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&sp[0];// SRC1_Buffer;
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//Äú′æμ½íaéè
  DMA_InitStructure.DMA_BufferSize =512;//DMA»o′æ′óD¡
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·2»±ä
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·×ÔÔö
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//16
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //16
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//Ñ-»·Ä£ê½
  DMA_InitStructure.DMA_Priority =DMA_Priority_High; //DMA1ZóÅÏè¼¶
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//′æ′¢Æ÷í»·¢μ¥′Î′«êä
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//íaéèí»·¢μ¥′Î′«êä       
  DMA_Init(DMA2_Stream1, &DMA_InitStructure);
       
        DMA_DoubleBufferModeConfig(DMA2_Stream1,(uint32_t)&SPWM[0],DMA_Memory_0);//Ë«»o3åÄ£ê½ÅäÖÃ
  DMA_DoubleBufferModeCmd(DMA2_Stream1,ENABLE);//Ë«»o3åÄ£꽿aÆô

  DMA_ITConfig(DMA2_Stream1 , DMA_IT_TC , ENABLE);

        NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream1_IRQn; //¶¨ê±Æ÷2ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //ÇàÕ¼óÅÏè¼¶1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02; //×óóÅÏè¼¶2
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
  DMA_Cmd(DMA2_Stream1, ENABLE);                       
}
//DMA2CH1ÖD¶Ï·tÎñoˉêy
void DMA2_Stream1_IRQHandler(void)
{
        int i;
        if(DMA_GetFlagStatus(DMA2_Stream1,DMA_IT_TCIF1)==SET) //òç3öÖD¶Ï
        {
                for(i=0;i<512;i++)SPWM[i]=sp[i];
                DMA_ClearITPendingBit(DMA2_Stream1,DMA_IT_TCIF1);  //&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
        }
}

回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-3-21
在线时间
3 小时
发表于 2018-5-26 11:54:49 | 显示全部楼层

回帖奖励 +5 金钱

你好,能发我一份完整代码给我吗  605877125@qq.com
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-4-25
在线时间
27 小时
 楼主| 发表于 2018-7-11 20:39:12 | 显示全部楼层
specily 发表于 2018-5-26 11:54
你好,能发我一份完整代码给我吗

ok了,很久没上。刚看见
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 19:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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