VSCode+CubeMX开发STM32笔记-PWM输出与舵机控制
使用VSCode+CubeMx开发STM32,这里介绍使用PWM控制舵机SG90;
1.建立工程
1.1 创建项目文件
从已有的仓库中创建一个工程:
1 | git clone https://github.com/makerinchina-iot/vscode_stm32cubemx_hello.git motor |
使用VSCode打开工程后,需要更改如下名字:
- 文件夹根目录下CMakeLists.txt 文件中修改工程名字为motor:
1 | set(CMAKE_PROJECT_NAME motor) |
- stm32cubemx配置文件更改为 motor.ioc ,并更改以下文件名:
1 | ... |
1.2 引脚配置
使用STM32CubeMx打开ioc配置文件,然后配置对应的PWM引脚;

这里定时器根据SG90舵机需要的PWM频率确定,SG90需要PWM频率为50Hz,因此设置定时器分频为640,计数值为2000,即可达到要求: 64MHz/640/2000 = 50Hz;
2. 编写代码
2.1 PWM控制舵机角度
舵机角度控制与占空比关系为:占空比为 2.5%12.5% 代表 0°180°
- 舵机角度控制与占空比按照如下表格计算:
角度 | 占空比 | 脉冲周期(50Hz) | 脉冲高电平时间 | 定时器比较值 |
---|---|---|---|---|
0 | 2.5% | 20ms | 0.5ms | 2000 * 2.50% = 50 |
90 | 7.5% | 20ms | 1.5ms | 2000 * 7.50% = 150 |
180 | 12.5% | 20ms | 2.5ms | 2000 * 12.5% = 250 |
- 以下代码为控制舵机分别运行到0度、90度、180度:
1 | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); |
3.编译并烧录代码
3.1 编译和烧录
点击生成按键即可编译工程;
在VSCode中执行task:openocd-flash烧录;
3.2 硬件连接与结果
- 按照如下方式连接硬件:

STM32 | 舵机 |
---|---|
5V | 红(+) |
PA6 | 黄(S) |
GND | 棕(-) |
- 代码运行后可以看到舵机正确的按角度运行:

著作权归本网站(https://makerinchina.cn)所有,转载请注明来自 MakerInChina.