定时器TIM3每500MS产生一次更新,触发DMA进行一次存储器到存储器的传送
1、DMA通道3设置成存储器到存储器传送,开启DMA,但没有设置DMA_CCR寄存器中的MEM2MEM位
2、TIM3设置
void tim3_init(u16 arr,u16 psc)
{
NVIC_Init(TIM3_IRQn,1,3); //定时器3中断初始化,抢占为1,子优先级为3
NVIC_En(TIM3_IRQn); //使能定时器3的中断
RCC->APB1ENR|=1<<1; //开TIM3的时钟
TIM3->ARR=arr; //设置自动重载寄存器的值
TIM3->PSC=psc; //设置预分频器的值
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<8; //允许更新DMA请求(UDE置位)
//主要问题是下面这一句,用软件仿真时,如果把下面这一句注释掉了,定时器TIM3每次更新都不产生一次DMA的存储器到存储器的传送,但如果不注释的话,定时器每次更新都能产生一次DMA的传送。问题是DIER寄存器的UDE位和CR2的CCDS有什么关系呢?我见其它人的用库函数编写这样的程序时只用了一句“TIM_DMACmd(TIM7, TIM_DMA_Update, ENABLE);”(这个库函数里面也只是设置了UDE位,都没有设置CCDS位的)。
// TIM3->CR2|=1<<0; //CR2的CCDS置位
TIM3->CR1|=1<<0; //使能TIM3
}
请大家帮忙解决下这个问题(红色字的),PS:如果把DMA_CCR的MEM2MEM位置位的话,可以立刻传送完的
|