亚博智能论坛  
  
查看: 812|回复: 1

stm32f103 tim3用dma修改占空比,第一个脉冲出错

[复制链接]

该用户从未签到

23

主题

54

帖子

149

积分

菜鸟程序猿

Rank: 2

积分
149
发表于 2017-6-20 14:54:06 | 显示全部楼层 |阅读模式
主控stm32f103rbt6  tim3用dma修改占空比,第一个脉冲是TIM_OCInitStruct.TIM_Pulse 初始化时的占空比,第二个占空比才是dma传输的占空比

代码如下
  1. GPIO_InitTypeDef            GPIO_InitStructure;
  2.     DMA_InitTypeDef             DMA_InitStructure;
  3.     TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStruct;
  4.     TIM_OCInitTypeDef           TIM_OCInitStruct;

  5.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  6.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  7.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  8.     /* GPIOA Configuration: Channel 3 as alternate function push-pull */
  9.     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOA, &GPIO_InitStructure);


  13.     /* DMA1 Channel5 Config */
  14.     DMA_DeInit(DMA1_Channel3);

  15.     DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&TIM3->CCR1);
  16.     DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ccr_buf;
  17.     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  18.     DMA_InitStructure.DMA_BufferSize = 10;
  19.     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  20.     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  21.     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  22.     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  23.     DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  24.     DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  25.     DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

  26.     DMA_Init(DMA1_Channel3, &DMA_InitStructure);

  27. //    /* DMA1 Channel5 enable */
  28.     DMA_Cmd(DMA1_Channel3, ENABLE);
  29.     TIM_Cmd(TIM3, DISABLE);
  30.     TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;
  31.     TIM_TimeBaseInitStruct.TIM_Period = 100 - 1;
  32.     TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;
  33.     TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  34.     TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
  35.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);     
  36. //   

  37. //    TIM_DMAConfig(TIM3, TIM_DMABase_CCR1, TIM_DMABurstLength_10Bytes);


  38.     TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
  39.     TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
  40.     TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  41.     /* TIM_Pulse =  TIM_Period + 12?ê?100%*/
  42. //    TIM_OCInitStruct.TIM_Pulse = 0;
  43.     TIM_OC1Init(TIM3, &TIM_OCInitStruct);

  44.     /* ê1?ü?áê13?ê??ˉ????±è3?2′? */
  45.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);


  46.     TIM_Cmd(TIM3, ENABLE);
  47.     TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE);
复制代码


回复

使用道具 举报

该用户从未签到

11

主题

26

帖子

59

积分

新手上路

Rank: 1

积分
59
发表于 2017-6-23 16:52:30 | 显示全部楼层
顶一下.
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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