打印
[AT32F407]

定时器使能更新DMA不正常

[复制链接]
1900|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fuquan19801117|  楼主 | 2021-12-3 20:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
配置定时器TMR8的DMA更新与对应DMA2__Channel1->TCNT为0xFFFF,然后启动定时器使能后TCNT的值立刻变为0。而不是按每更新一次递减。 配置同样配置方式TMR4与DMA1__Channel7却能正常工作,奇怪。

使用特权

评论回复
沙发
fuquan19801117|  楼主 | 2021-12-4 15:32 | 只看该作者
void DMA_ConfigPluse(DMA_Channel_Type* DMAy_Channelx, uint32_t AuixDxxx)
{
  DMA_InitType DMA_InitStructure = {0};
        //
  DMA_Reset(DMAy_Channelx);
        //³õʼDMA
  DMA_DefaultInitParaConfig(&DMA_InitStructure);
  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)AuixDxxx;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AuixDxxx;
  DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALSRC;
  DMA_InitStructure.DMA_BufferSize = maxPlus;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_DISABLE;
  DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;
  DMA_InitStructure.DMA_Priority = DMA_PRIORITY_VERYHIGH;
  DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
  
  DMA_Init(DMAy_Channelx, &DMA_InitStructure);
}

使用特权

评论回复
板凳
fuquan19801117|  楼主 | 2021-12-6 10:42 | 只看该作者
官方技术呢?

使用特权

评论回复
地板
muyichuan2012| | 2021-12-7 11:45 | 只看该作者
你好,相同问题请不要重复发帖。
以下是来自官方的回复,
“高级定时器(TMR1/TMR8)不支持你描述的使用方式,请知悉”。

使用特权

评论回复
5
fuquan19801117|  楼主 | 2021-12-7 13:02 | 只看该作者
好的,有明确回复就好。

使用特权

评论回复
6
fuquan19801117|  楼主 | 2021-12-9 09:52 | 只看该作者
TMR6与TMR7的基本定时器是否和通用定时器的溢出更新DMA一样呢?更新触发一次,DMA发送一次呢?还是有更新就一次性发送出去指定的数据量呢?

使用特权

评论回复
评论
muyichuan2012 2021-12-9 12:58 回复TA
TMR6、7和通用定时器不会有该限制。只有高级定时器有此限制。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

70

帖子

1

粉丝