OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6476|回复: 11

STM32F767 TIM1 产生PWM输出

[复制链接]

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
发表于 2017-9-25 16:22:33 | 显示全部楼层 |阅读模式
5金钱
啊啊啊啊~想用STM32F76 定时器产生PWM输出,例程是用TIM3的通道4来产生的,在管脚处产生PWM输出信号,然后我想换成TIM1的通道1产生,但是死活不对……好几天真的是不知道什么原因……求大家帮忙……

#include "tim.h"

TIM_HandleTypeDef htim1;

/* TIM1 init function */
void MX_TIM1_Init(void)
{

  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 107;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 124;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
HAL_TIM_PWM_DeInit(&htim1);
  HAL_TIM_PWM_Init(&htim1);


  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);


  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 63;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
}



void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_TIM1_CLK_ENABLE();                     
__HAL_RCC_GPIOA_CLK_ENABLE();  

    /**TIM1 GPIO Configuration   
    PE9     ------> TIM1_CH1
               
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}


最佳答案

查看完整内容[请看2#楼]

我这边用示波器看了,可以用。你自己看看,里面的备注没有修改。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

163

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2762
金钱
2762
注册时间
2017-5-17
在线时间
430 小时
发表于 2017-9-25 16:22:34 | 显示全部楼层
本帖最后由 39035605 于 2017-9-26 23:30 编辑
gaoqianqian 发表于 2017-9-26 22:02
谢谢谢谢,我下午的的时候也意识到这个问题了,我就改成使能PE时钟了,但是还是不行的样子,您看我别的配 ...

我这边用示波器看了,可以用。你自己看看,里面的备注没有修改。

实验8 PWM输出实验.rar

992.13 KB, 下载次数: 490

回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2017-9-26 12:29:58 | 显示全部楼层
_HAL_RCC_GPIOA_CLK_ENABLE();  
回复

使用道具 举报

7

主题

163

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2762
金钱
2762
注册时间
2017-5-17
在线时间
430 小时
发表于 2017-9-26 13:08:35 | 显示全部楼层
你程序中的IO口初始化这里  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);  有问题。。。仔细参考例程中的初始化,慢慢来。
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
 楼主| 发表于 2017-9-26 15:20:10 | 显示全部楼层
本帖最后由 gaoqianqian 于 2017-9-26 15:29 编辑
龙之谷 发表于 2017-9-26 12:29
_HAL_RCC_GPIOA_CLK_ENABLE();

???这句话有什么问题吗?是不是要改成_HAL_RCC_GPIOE_CLK_ENABLE();
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
 楼主| 发表于 2017-9-26 15:28:45 | 显示全部楼层
39035605 发表于 2017-9-26 13:08
你程序中的IO口初始化这里  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);  有问题。。。仔细参考例程中的初始 ...

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM3_CLK_ENABLE();                       
    __HAL_RCC_GPIOB_CLK_ENABLE();                       
       
    GPIO_Initure.Pin=GPIO_PIN_1;                  
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;         
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;   
   GPIO_Initure.Alternate=GPIO_AF2_TIM3;       
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
这个是例程的初始化部分,我的程序这里是想用PE9作为管脚输出的,哪里不对呢
回复

使用道具 举报

84

主题

555

帖子

0

精华

高级会员

Rank: 4

积分
794
金钱
794
注册时间
2014-9-30
在线时间
135 小时
发表于 2017-9-26 17:15:30 | 显示全部楼层
gaoqianqian 发表于 2017-9-26 15:28
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;

莫非 是 你的 【复用】时钟 、功能 没打开 !?
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
 楼主| 发表于 2017-9-26 17:19:20 | 显示全部楼层
caosix 发表于 2017-9-26 17:15
莫非 是 你的 【复用】时钟 、功能 没打开 !?

额……感觉打开了啊……
回复

使用道具 举报

7

主题

163

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2762
金钱
2762
注册时间
2017-5-17
在线时间
430 小时
发表于 2017-9-26 21:03:30 | 显示全部楼层
本帖最后由 39035605 于 2017-9-26 21:04 编辑
gaoqianqian 发表于 2017-9-26 15:28
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;

我没看具体的PWM那个通道对应那个IO口,但你使能PA时钟__HAL_RCC_GPIOA_CLK_ENABLE();     初始化PE 口是有问题,HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);        你想用哪个IO口就初始化哪个时钟。
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
 楼主| 发表于 2017-9-26 22:02:13 | 显示全部楼层
39035605 发表于 2017-9-26 21:03
我没看具体的PWM那个通道对应那个IO口,但你使能PA时钟__HAL_RCC_GPIOA_CLK_ENABLE();     初始化PE 口是 ...

谢谢谢谢,我下午的的时候也意识到这个问题了,我就改成使能PE时钟了,但是还是不行的样子,您看我别的配置还有问题吗?感觉一直找不到问题在哪,麻烦您啦
回复

使用道具 举报

4

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2017-3-11
在线时间
78 小时
发表于 2017-9-27 10:41:47 | 显示全部楼层
很简单的
回复

使用道具 举报

17

主题

142

帖子

0

精华

高级会员

Rank: 4

积分
897
金钱
897
注册时间
2016-2-16
在线时间
162 小时
发表于 2017-10-7 08:50:24 | 显示全部楼层
TIM1定时器有个寄存器的MOE位要使能,才可以输出PWM,其他时钟使能,定时器配置没问题就该可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 17:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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