你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103C8 TIM4 PWM CH4输不出PWM

[复制链接]
wdshuang09 提问时间:2016-10-17 23:25 /
用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);
        }        
        
}


收藏 1 评论27 发布时间:2016-10-17 23:25

举报

27个回答
wdshuang09 最优答案 回答时间:2016-10-23 08:14:37
anywill 发表于 2016-10-20 11:05
TIM4有一个MOE位,控制了TIM4的输出

问题找到了,是GPIO输出模式没有配对,要配成复用功能输出,之前配成通用输出功能,PWM就出不来;所以不是GPIO映射问题,手册缺省是TIM4 CH4输出,如果需要映射的话,手册会写在RAMAP那一栏在;可以结贴了,谢谢各位网友的帮助,
pwm .jpg

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xhzheng 回答时间:2016-10-21 09:00:34
我的使用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);

}

wdshuang09 回答时间:2016-10-23 08:39:17
本帖最后由 wdshuang09 于 2016-10-23 08:43 编辑
liu553824989 发表于 2016-10-23 08:17
楼主是否为自己说过的话负责!!!

是你理解手册有问题吧,这个TIM4 CH4没有重映射,如果要重映射需要开启AFIO,重映射手册上会写在REMAP栏中,现在我实现了;你一直说是映射问题,所以你说的不对,呵呵~,
学习过程总会遇到问题,别自己懂一点,说话就那种盛气凌人,你的原话"手册是原理说明而已,当然不会教你怎么做,该怎样做,自己百度吧",况且你又没有说对,
感谢这两位网友,andrewz  anywill提醒让我找到问题的根源,同时也谢谢其他网友热心回答
wdshuang09 回答时间:2016-10-18 20:25:19
没有人回贴呀
z258121131 回答时间:2016-10-20 08:44:45
TIM4使能了吗?
仙景 回答时间:2016-10-20 08:57:10
打开tim4时钟,配置time4 pwm配置,配置好tim4 映射的GPIO初始化,打开计数器,开总中断。

看你好像没有配置映射gpio引脚,如果还不行用库的试试,寄存器的要一个一个试,有点麻烦。
胤幻1988 回答时间:2016-10-20 09:14:31
输出PWM的GPIO管脚及其时钟未配置。
无薪税绵 回答时间:2016-10-20 09:51:39
STM32F103C8,没有TIM4吧。
liping 回答时间:2016-10-20 09:53:45
首先要配置PWM时钟,PWM是复用管脚,这个也得配置.
anywill 回答时间:2016-10-20 11:05:55
TIM4有一个MOE位,控制了TIM4的输出
benlarden 回答时间:2016-10-20 12:20:25
帮顶!@~~
johnson_gong 回答时间:2016-10-20 17:24:15
用习惯了库,再看寄存器操作,反应慢呀
assssdz 回答时间:2016-10-20 20:55:37
原田夜舞love 回答时间:2016-10-20 23:26:23
GOIO 时钟
wdshuang09 回答时间:2016-10-21 08:03:17
liu553824989 发表于 2016-10-20 08:57
打开tim4时钟,配置time4 pwm配置,配置好tim4 映射的GPIO初始化,打开计数器,开总中断。

看你好像没有配 ...

手册上没有提IO要映射,见图片
aaa.jpg
wdshuang09 回答时间:2016-10-21 08:03:59
无薪税绵 发表于 2016-10-20 09:51
STM32F103C8,没有TIM4吧。

有TIM4         
wdshuang09 回答时间:2016-10-21 08:05:15
annysky 发表于 2016-10-20 09:53
首先要配置PWM时钟,PWM是复用管脚,这个也得配置.

缺省就是TIM4_CH3,手册没有提要管脚映射
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版