STM32/STM8技术william hill官网
直播中

李云生

7年用户 245经验值
私信 关注
[问答]

STM32F103C8 TIM4 PWM CH4不能输出PWM

STM32F103C8写了一个 tiM4 PWM输出 输出通道为CH4,但不出PWM,不知寄存器哪里设置不对,求高手指点,


系统时钟为72MHz
TIM4_PWMOut_Init(999,71);
void TIM4_PWMOut_Init(u16 arr,u16 psc)
{
        RCC->APB1ENR|=1<<2;        //TIM4时钟使能
        RCC->APB2ENR|=1<<3;//使能B端口时钟
        TIM4->PSC=psc;          //72000000/72=1Mh
        TIM4->ARR=arr;          //1000000/1000=1000  PWM频率为1K
        TIM4->CCR4=500;
        
        TIM4->CCMR2|=(6<<12);//PWM模式样
        TIM4->CCMR2|=(1<<11);//开启预装载功能
        TIM4->CCER|=(1<<12);//CH4 开启输出对应管脚
        TIM4->CCER|=0<<13;//高电平有效
        
        TIM4->CR1|=0<<4;//向上计数
        TIM4->CR1|=(1<<7);//自动重装允许
        TIM4->SR=0X00;
        TIM4->DIER|=1<<0;//允许更新
        TIM4->DIER|=1<<4;//允许CH4中断
        TIM4->EGR|=1<<4;
        TIM4->CR1|=0x01;    //使能计数器
        MY_NVIC_Init(1,3,TIM4_IRQn,2);//中断        

}

void TIM4_IRQHandler(void)
{                                                                  
        
        if(TIM4->SR&0X0010)
        {
                TIM4->SR&=~(1<<4);
        }        
        
}

回帖(23)

李云生

2019-2-18 04:25:36
没有人回贴呀
举报

卓侨汉

2019-2-18 04:48:13
打开tim4时钟,配置time4 pwm配置,配置好tim4 映射的GPIO初始化,打开计数器,开总中断。

看你好像没有配置映射gpio引脚,如果还不行用库的试试,寄存器的要一个一个试,有点麻烦。
举报

李桂芳

2019-2-18 05:06:57
输出PWM的GPIO管脚及其时钟未配置。
举报

康振清

2019-2-18 05:31:31
首先要配置PWM时钟,PWM是复用管脚,这个也得配置.
举报

易里更

2019-2-18 05:50:44
TIM4有一个MOE位,控制了TIM4的输出
举报

陈敏

2019-2-18 06:08:14
帮顶!@~~
举报

李衍安

2019-2-18 06:21:16
用习惯了库,再看寄存器操作,反应慢呀
举报

陈霞

2019-2-18 06:26:46
举报

张舒婷

2019-2-18 06:32:57
GOIO 时钟
举报

李云生

2019-2-18 06:45:56
引用: hnui2002 发表于 2019-2-18 20:28
打开tim4时钟,配置time4 pwm配置,配置好tim4 映射的GPIO初始化,打开计数器,开总中断。

看你好像没有配置映射gpio引脚,如果还不行用库的试试,寄存器的要一个一个试,有点麻烦。

手册上没有提IO要映射,见图片

举报

李云生

2019-2-18 06:59:01
有TIM4         
举报

李云生

2019-2-18 07:04:01
引用: JSDGS 发表于 2019-2-18 21:11
首先要配置PWM时钟,PWM是复用管脚,这个也得配置.

缺省就是TIM4_CH3,手册没有提要管脚映射
举报

李云生

2019-2-18 07:19:26

RCC->APB2ENR|=1<<3;//使能B端口时钟
这不是打开了GPIO时钟
举报

卓侨汉

2019-2-18 07:39:21
手册是原理说明而已,当然不会教你怎么做,该怎样做,自己百度吧
举报

李培珠

2019-2-18 07:46:06
我的使用HAL库,可以正常工作:
main.c:
        MX_TIM2_Init(200,1000);
        HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);


config:

/* TIM2 init function */
void MX_TIM2_Init(int pulse,int period)
{
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = period;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = pulse;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }

  HAL_TIM_MspPostInit(&htim2);

}
举报

张桂芝

2019-2-18 08:04:53
打开tim4时钟,配置time4 pwm配置,配置好tim4 映射的GPIO初始化,打开计数器,开总中断
举报

马龙

2019-2-18 08:14:35
举报

汪芳

2019-2-18 08:20:50
1、GPIO引脚要配置
2、TIM4要配置
3、PWM功能在TIM4的基础上再设置
4、为什么要寄存器呢?是不是时间太多了,网上有太多的库函数做的成功例子。
1 举报
  • 谁在开车: 相比于函数库,操作寄存器可以使得代码运行效率更高,在大部分企业中,对代码运行都是有要求的,都是用的寄存器

乔亚楠

2019-2-18 08:29:12
有一个位叫做MOE,不知道有没有联系~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分