OpenEdv-开源电子网

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

关于PWM初始化的灵异事件,初始化后没有波形输出

[复制链接]

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
发表于 2019-7-29 09:37:25 | 显示全部楼层 |阅读模式
1金钱
根据手册上的教程写了一个PWM初始化的代码,直接烧到板子上,结果电机没有在驱动的驱动下驱动起来,于是软仿,发现没有电平变化,于是就用例程初始化发现波形出来了,于是检查代码,并没有发现问题,除了声明的名字不一样,其他都一样,开始怀疑自己ing。

void TIM1_init(unsigned short arr,unsigned short psc)//arr 周期,psc 预分频
{
GPIO_InitTypeDef GPIO_ITD;
TIM_TimeBaseInitTypeDef TIM_TBITD;     //定时器基本初始化
TIM_OCInitTypeDef TIM_OCITD;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_ITD.GPIO_Pin=GPIO_Pin_8;        //TIM1_CH1
GPIO_ITD.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_ITD.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_ITD);
GPIO_ITD.GPIO_Pin=GPIO_Pin_11;       //TIM1_CH4
GPIO_Init(GPIOA,&GPIO_ITD);     
//定时器基本初始化
TIM_TBITD.TIM_Prescaler=arr;
TIM_TBITD.TIM_Prescaler=psc;
TIM_TBITD.TIM_ClockDivision=0;         //CKD 0--Tdts=Tck_int
                         //    1--Tdts=2xTck_int
TIM_TBITD.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TBITD);

TIM_OCITD.TIM_OCMode=TIM_OCMode_PWM2;       //PWM模式2有效极性配合高符合逻辑思考
TIM_OCITD.TIM_OutputState=TIM_OutputState_Enable; //输出状态使能
TIM_OCITD.TIM_Pulse=0;              //设置待装入CCR的值
TIM_OCITD.TIM_OCPolarity=TIM_OCPolarity_High;   //设置有效极性

TIM_OC1Init(TIM1,&TIM_OCITD);
TIM_OC4Init(TIM1,&TIM_OCITD);


TIM_CtrlPWMOutputs(TIM1,ENABLE);         //配置BDTR的MOE位

TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //CCR预装载使能
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1,ENABLE);        //ARR PreloadEnable
TIM_Cmd(TIM1,ENABLE);


}

void TIM1_init(unsigned short arr,unsigned short psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
                                                                       
   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_Init(GPIOA,&GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  80K
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
  TIM_OC4Init(TIM1, &TIM_OCInitStructure);
  TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器

TIM_Cmd(TIM1, ENABLE);  //使能TIM1
}

最佳答案

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

TIM_TBITD.TIM_Prescaler=arr; TIM_TBITD.TIM_Prescaler=psc; 这里错了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2019-7-29 09:37:26 | 显示全部楼层
TIM_TBITD.TIM_Prescaler=arr;
TIM_TBITD.TIM_Prescaler=psc;
这里错了
回复

使用道具 举报

10

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2016-8-15
在线时间
413 小时
发表于 2019-7-29 09:58:13 | 显示全部楼层
顶一个
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-29 11:21:28 | 显示全部楼层
软件仿真输出没有问题,但是烧到硬件上就出问题了
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2017-8-3
在线时间
29 小时
发表于 2019-7-29 15:34:24 | 显示全部楼层
你看一下MDK选择的芯片,是否跟你自己的板子芯片是一样的。
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-29 20:38:14 | 显示全部楼层
DNF557 发表于 2019-7-29 15:34
你看一下MDK选择的芯片,是否跟你自己的板子芯片是一样的。

看了一下是一样的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-7-30 02:24:16 | 显示全部楼层
仿真,对比看寄存器内容,就知道问题了
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-7-4
在线时间
8 小时
发表于 2019-7-30 08:48:30 | 显示全部楼层
unsigned short arr,unsigned short psc  定时器的参数类型太小,赋值时可能溢出,导致数值错误
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-30 11:09:21 | 显示全部楼层
宫本无三四 发表于 2019-7-29 09:37
TIM_TBITD.TIM_Prescaler=arr;
TIM_TBITD.TIM_Prescaler=psc;
这里错了

这里是我当时写错了,现以改正,感谢排错。但是遇到最致命的问题是STM32F103C8T6的TIM1 CH1用库函数写软件仿真可以输出波形,但是烧到开发板上不出波形,之后使能通道4之后(因为需要用到这两个通道)发现通道4运行正常。不知道您有没有遇到相同的问题
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-30 11:10:31 | 显示全部楼层
正点原子 发表于 2019-7-30 02:24
仿真,对比看寄存器内容,就知道问题了

软仿如果输出波形没问题,寄存器是不是也就没问题?
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-30 11:11:28 | 显示全部楼层
舒志远 发表于 2019-7-30 11:09
这里是我当时写错了,现以改正,感谢排错。但是遇到最致命的问题是STM32F103C8T6的TIM1 CH1用库函数写软 ...

找到用寄存器写的初始化函数发现可以正常运行
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2019-7-30 15:18:10 | 显示全部楼层
舒志远 发表于 2019-7-30 11:09
这里是我当时写错了,现以改正,感谢排错。但是遇到最致命的问题是STM32F103C8T6的TIM1 CH1用库函数写软 ...

“烧到开发板上不出波形”,你是用示波器看了还是从电机不转判断的?说不定是你电机驱动电路有问题或者是占空比不够大呢
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-6-13
在线时间
11 小时
 楼主| 发表于 2019-7-30 16:16:19 | 显示全部楼层
宫本无三四 发表于 2019-7-30 15:18
“烧到开发板上不出波形”,你是用示波器看了还是从电机不转判断的?说不定是你电机驱动电路有问题或者是 ...

波形我是用的示波器看的,后来我用103RC的初始化代码,进行初始化发现还是不行,我就索性换了103C8的最小系统板发现也还是不行,但是软仿没问题。我看到网上有人和我遇到相同问题,索性直接换定时器,换通道。上午我用了一个用寄存器写的初始化发现可以输出波形,软仿比了比TIM1的定时器只有CR2的几个位有不同
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-11-12
在线时间
12 小时
发表于 2019-7-30 18:41:22 来自手机 | 显示全部楼层
初始化gpio时,是不是AF设置有问题。不同通道用的不同af模式不一样
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 07:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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