OpenEdv-开源电子网

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

定时器触发DMA传输

[复制链接]

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
发表于 2019-1-25 15:34:23 | 显示全部楼层 |阅读模式
4金钱
我想通过定时器溢出中断将数组里的16位数据送到GPIO上,但是好像没有工作。把代码贴出来,请教各位大神帮我看一下。

DMA初始化
void CH1_DMA_Init_()
{
   DMA_InitTypeDef  DMA_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1时钟使能
       
  DMA_DeInit(DMA1_Stream2);
       
  while (DMA_GetCmdStatus(DMA1_Stream2) != DISABLE){}//等待DMA可配置
       
  DMA_InitStructure.DMA_Channel = DMA_Channel_5;  //通道选择
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&GPIOD->ODR;//DMA外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Wave1_Buffer;//DMA 存储器0地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//存储器到外设模式
  DMA_InitStructure.DMA_BufferSize = 100;//数据传输量
  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_Medium;//中等优先级
  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_PeripheralBurst_Single;//外设突发单次传输
  DMA_Init(DMA1_Stream2, &DMA_InitStructure);//初始化DMA Stream
}


开启DMA传输
void CH1_DMA_Enable(u16 ndtr)
{
        DMA_Cmd(DMA1_Stream2, DISABLE);
        while (DMA_GetCmdStatus(DMA1_Stream2) != DISABLE){}//等待DMA可配置
        DMA_SetCurrDataCounter(DMA1_Stream2,ndtr);          //数据传输量  
        DMA_Cmd(DMA1_Stream2, ENABLE);                      //开启DMA传输
}



定时器3溢出中断触发DMA传输
TIM_DMACmd(TIM3,TIM_DMA_Update,ENABLE);

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

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-11-14
在线时间
34 小时
发表于 2019-1-25 18:39:24 | 显示全部楼层
本帖最后由 cjsyrzy 于 2019-1-25 18:47 编辑

不熟悉你这个单片机,tim3怎么配置的
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-1-26 10:04:17 | 显示全部楼层
这个也是定时触发DMA,参考看下http://www.openedv.com/forum.php ... d=281340&extra=
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
 楼主| 发表于 2019-1-26 11:25:33 | 显示全部楼层
cjsyrzy 发表于 2019-1-25 18:39
不熟悉你这个单片机,tim3怎么配置的

void Timer3_Init(u16 arr,u16 psc)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  ///使能TIM3时钟
       
  TIM_TimeBaseInitStructure.TIM_Period = arr-1;         //自动重装载值
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1;  //定时器分频
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
       
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
        TIM_Cmd(TIM3,ENABLE); //使能定时器3
       
        NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x2; //抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x0; //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
定时器3的配置
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
 楼主| 发表于 2019-1-26 11:28:34 | 显示全部楼层
1208 发表于 2019-1-26 10:04
这个也是定时触发DMA,参考看下http://www.openedv.com/forum.php?mod=viewthread&tid=281340&extra=

你这个是通过定时器的溢出中断来触发DMA传输,然后再到溢出中断服务函数里清除溢出中断标志位,
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-1-26 14:56:29 | 显示全部楼层
PhinexZhang 发表于 2019-1-26 11:28
你这个是通过定时器的溢出中断来触发DMA传输,然后再到溢出中断服务函数里清除溢出中断标志位,

也有定时器触发DMA
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
 楼主| 发表于 2019-1-26 15:09:56 | 显示全部楼层
1208 发表于 2019-1-26 14:56
也有定时器触发DMA

能帮我看一下我发的代码配置的对吗,一开启DMA,CPU就跑飞了,而且数据也没有传输
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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