[AT32F407] 定时器使能更新DMA不正常

[复制链接]
 楼主| 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)不支持你描述的使用方式,请知悉”。
 楼主| fuquan19801117 发表于 2021-12-7 13:02 | 显示全部楼层
好的,有明确回复就好。
 楼主| fuquan19801117 发表于 2021-12-9 09:52 | 显示全部楼层
TMR6与TMR7的基本定时器是否和通用定时器的溢出更新DMA一样呢?更新触发一次,DMA发送一次呢?还是有更新就一次性发送出去指定的数据量呢?

评论

TMR6、7和通用定时器不会有该限制。只有高级定时器有此限制。  发表于 2021-12-9 12:58
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

72

帖子

1

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