文章目录(急得朋友直接看最后就好)

1. 问题的起因

出现这个问题是因为我想使用使用STM32F103C8T6来做小车,然后我就稍微规划了一下引脚和定时器的使用分布,第一个就是拿TIM1来做通用定时器输出PWM,结果就配了好几天都没有波形,这个过程遇到了一些小坑,希望大家能避开,节省时间,我是一直找不到帖子说过这最后一个地方,就找了好久,结果也是投机取巧找到了错误。
当时的接线布局表


2. 问题状况

一般这里初始化出现问题的话,系统就不会报错,但是用示波器或者逻辑分析仪看的话就会发现没有波形出来(我是用keil在Debug里自带的波形窗口)。
在这里插入图片描述

像上图的左边1那样没有波形,右边的2是我后来调好的正常波形。


3. 原因分析:

下面我总结有几点原因:
1. 以前最常见就是这个没使能TIM_CtrlPWMOutputs(TIM1,ENABLE);//设置TIMx的PWM主输出为使能,高级定时器不使用从模式的话都要加这一句;
2. 第二个就是一个结构体存在有的参数没配置或者TIM_OCStructInit(&TIM_OCInitStructure);放的位置不对的问题;
3. 最后一个我认为坑的地方就是时钟配置,明明参数列表里面的元素没有,但是居然不会报错。


4. 解决方案:

上面三点有以下解决方案:
1.像第一个问题就在配置的时候加上这一句代码就好了,放在TIM_Cmd();这一句上面下面都可以

TIM_CtrlPWMOutputs(TIM1,ENABLE);//设置TIMx的PWM主输出为使能

在这里插入图片描述

2.第二个问题也简单,两种方法;
一、第一种是把结构体所有的成员初始化一遍就好;
二、第二种也比较推荐的,就是使用库函数TIM_OCStructInit(&TIM_OCInitStructure);

在这里插入图片描述

在stm32f10x.tim.h&&.c里可以快速找到,它可以帮我们把所有成员初始化一遍
有几点最好注意一下(也可能只有我会放错地方吧)

放在上图高亮那个位置是不行的哦
在这里插入图片描述
放在箭头那两个位置都可以。

  1. 最后一个地方,我觉得比较隐蔽吧,要是弄错了也不好找
    在这里插入图片描述

大家看上图是不是感觉没什么问题,也没报错
但是我们点开这个函数的定义RCC_APB1PeriphClockCmd();
在这里插入图片描述
我的代码这句话居然不会报错

RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

我找了好久,最后拿着两份几乎一样的代码用VScode代码比较功能才找到。
在这里插入图片描述
改成右边的那样就好了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐