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

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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版