搜索
查看: 1915|回复: 4

[求助] 求助帖:DMA传输控制PWM的输出占空比遇到了问题

[复制链接]

该用户从未签到

1

主题

2

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-27
发表于 2018-9-5 21:59:51 | 显示全部楼层 |阅读模式
问题是这样的:
定义了一个数组,内容为PWM波的占空比对应的脉冲数,本人利用DMA通道将数组传输至TIM1的CCR,TIM1设置为PWM输出,从而改变PWM波的脉冲比,发现传输至TIM1的CCR,TIM1的CH1一直输出高电平,而不是占空比变化的PWM波。而传输至TIM2或TIM3等通用定时器的CH口,PWM波的输出及占空比均正常。
下面是传输至TIM1的代码:
#include "stm32f10x.h"

u16 buf1[20] = {5,14,22,30,37,44,49,53,56,57,57,56,53,49,44,37,30,22,14,5};

void DMA_Configuration(void)
{
  DMA_InitTypeDef D;

  //????????90???
  DMA_DeInit(DMA1_Channel2); //DMA1_3?????
  D.DMA_PeripheralBaseAddr = (u32)0x40000034;      //DMA???? TIM3_CCR1_Address  TIM3-1£º40000434  TIM1-1£º40012C34 TIM1-2£º40012C38
  D.DMA_MemoryBaseAddr = (u32)buf1;                 //DMA????  TIM2-1£º40000034 TIM3-2:40000438
  D.DMA_DIR = DMA_DIR_PeripheralDST;               //DST????????????,SRC??????
  D.DMA_BufferSize = 20;                                   //DMA????
  D.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //??????????
  D.DMA_MemoryInc = DMA_MemoryInc_Enable;          //??????????
  D.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //????16bit
  D.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;              //????16bit
  D.DMA_Mode = DMA_Mode_Circular;          //???????
  D.DMA_Priority = DMA_Priority_High; //DMA??????
  D.DMA_M2M = DMA_M2M_Disable;                  //??????????
  DMA_Init(DMA1_Channel2, &D);                  //???DMA1
  DMA_Cmd(DMA1_Channel2, ENABLE);     //DMA1_3??

}

static void GPIO_Config(void)
{                                                         
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE);         //TIM3??
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);  //PA?PB??
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

  //GPIOA ??: TIM3 channel 1 ? 2 ????
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  // ??????
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_0 | GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}


int main(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  SystemInit();//???????72MHz
  GPIO_Config(); //????
  DMA_Configuration(); //??DMA

  //?????
  TIM_TimeBaseStructure.TIM_Period = 71;       //?????0???999,??1000?,???????
  TIM_TimeBaseStructure.TIM_Prescaler = 0;            //?????:????,??36MHz
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;        //????????:???
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //??????
  //TIM_TimeBaseStructure.TIM_RepetitionCounter = 2;

  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  //PWM??1????
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            //???PWM??1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        
  TIM_OCInitStructure.TIM_Pulse = buf1[0];           //?????,???????????,??????
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //?????????CCR1_Val?????
  TIM_OC1Init(TIM2, &TIM_OCInitStructure); //????1

  TIM_DMACmd(TIM2, TIM_DMA_Update, ENABLE); //TIM3 DMA????,?:TIM3_Update????DMA???DMA1_chanel3
//  TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);    //TIM3 DMA????,?:TIM3_CC1????DMA???DMA1_chanel6
  TIM_Cmd(TIM2, ENABLE); //TIM3??
  //TIM_CtrlPWMOutputs(TIM3, ENABLE); //PWM??

  while (1)
{}
}


回复

使用道具 举报

该用户从未签到

91

主题

4756

帖子

4

蝴蝶豆

论坛元老

最后登录
2021-2-27
发表于 2018-9-5 23:23:40 | 显示全部楼层
示波器上检测下捕获脉冲宽度
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2018-9-6 07:19:46 | 显示全部楼层
TIM_OCInitStructure.TIM_Pulse大于TIM_TimeBaseStructure.TIM_Period就没有PWM输出了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

2

帖子

0

蝴蝶豆

新手上路

最后登录
2020-10-27
 楼主| 发表于 2018-9-6 09:32:21 | 显示全部楼层
wenyangzeng 发表于 2018-9-6 07:19
TIM_OCInitStructure.TIM_Pulse大于TIM_TimeBaseStructure.TIM_Period就没有PWM输出了。

没有大于它
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

30

帖子

0

蝴蝶豆

初级会员

最后登录
2020-7-27
发表于 2018-9-29 15:08:45 | 显示全部楼层
attribute
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-20 08:31 , Processed in 0.155949 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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