楼主的理解看上去好像是对,但是其它人用库函数编写时,不用设置CCDS哪一位的,直接设置UDE就可以了TIM_DMACmd(TIM7, TIM_DMA_Update, ENABLE);”
没有权限发链接,截他一部分代码吧
void Timer_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* TIM7 Peripheral Configuration --------------------------------------------*/
/* Time Base configuration */
/* 目标:定时1秒
计算:1000(ms)/65535(CNT)≈0.0153ms/CNT
24M时钟,分频: 15.3(us)/(1/(24(M)))≈368 */
TIM_DeInit(TIM7);
/* 368/24≈15.33us/CNT */
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
/* 1000(ms)/0.01533(ms)≈65232CNT */
TIM_TimeBaseStructure.TIM_Period = 65232; //ARR的值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //采样分频
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);
//定时器使用内部时钟即CK_INT,AHB为24M,APB1为24M,CK_INT为24M.
//时钟分频系数368,所以定时器时钟为65.2KHz
TIM_PrescalerConfig(TIM7,368,TIM_PSCReloadMode_Immediate);
TIM_ARRPreloadConfig(TIM7, ENABLE);//使能ARR预装载缓冲器
/* DMA/中断使能寄存器(TIMx_DIER)
UDE:更新DMA请求使能 (Update DMA request enable) */
TIM_DMACmd(TIM7, TIM_DMA_Update, ENABLE);
/* TIM enable counter */
TIM_Cmd(TIM7, ENABLE);
}
(STM32 USART+DMA+TIMER 定时器1秒触发一次DMA用串口发送一个字符)
他也是用UpdateDME的,但只是设置了UDE,没有设置CCDS
|