登录/注册

stm32f103pwm输出

更多

在STM32F103微控制器上配置PWM输出的步骤如下(以标准外设库为例):

1. 开启外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIO时钟(以PA7为例)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  // 开启TIM3时钟

2. 配置GPIO为复用推挽输出

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;          // PWM引脚(如PA7对应TIM3_CH2)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

3. 配置定时器基础参数

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 7199;          // 自动重装载值(ARR),决定PWM频率
TIM_TimeBaseStructure.TIM_Prescaler = 0;           // 预分频系数(PSC)
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

频率计算
PWM频率 = 定时器时钟 / (ARR + 1) / (PSC + 1)
例:72MHz时钟下,设置ARR=7199, PSC=0 → 频率 = 72MHz / 7200 = 10kHz

4. 配置PWM通道模式

TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   // PWM模式1
TIM_OCInitStructure.TIM_OutputState = ENABLE;       // 使能输出
TIM_OCInitStructure.TIM_Pulse = 3600;               // 占空比脉冲值(CCR),需小于ARR
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 高电平有效
TIM_OC2Init(TIM3, &TIM_OCInitStructure);            // 初始化通道2(对应PA7)

5. 启动PWM输出

TIM_Cmd(TIM3, ENABLE);         // 启动定时器
TIM_CtrlPWMOutputs(TIM3, ENABLE); // 主输出使能(高级定时器需要)

6. 动态调整占空比

TIM_SetCompare2(TIM3, 1800);  // 修改TIM3通道2的占空比为25%(CCR=1800 @ ARR=7199)

⚠️ 关键点

  1. 引脚映射关系
    • TIM3_CH1 → PA6
    • TIM3_CH2 → PA7
    • TIM2_CH1 → PA0/PA15(需重映射)
  2. 高级定时器(TIM1/TIM8):需额外调用 TIM_CtrlPWMOutputs(TIMx, ENABLE)
  3. 占空比计算
    • 占空比 = CCR / (ARR + 1)
  4. 重映射功能:使用 GPIO_PinRemapConfig() 可将PWM映射到其他引脚(如TIM3_CH1重映射到PB4)。

完整代码示例

#include "stm32f10x.h"

void PWM_Init(void) {
    // 1. 开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    // 2. 配置PA7为TIM3_CH2
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 3. 配置TIM3基础参数(10kHz PWM)
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_Period = 7199;      // ARR
    TIM_InitStruct.TIM_Prescaler = 0;       // PSC
    TIM_InitStruct.TIM_ClockDivision = 0;
    TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_InitStruct);

    // 4. 配置PWM模式(50%占空比)
    TIM_OCInitTypeDef PWM_InitStruct;
    PWM_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    PWM_InitStruct.TIM_OutputState = ENABLE;
    PWM_InitStruct.TIM_Pulse = 3600;       // CCR值(50%占空比)
    PWM_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC2Init(TIM3, &PWM_InitStruct);     // TIM3通道2

    // 5. 启动定时器
    TIM_Cmd(TIM3, ENABLE);
}

将此代码添加到工程中,调用 PWM_Init() 即可在PA7输出10kHz、50%占空比的PWM信号。

STM32F103VET6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

STM32F103RCT6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

STM32CubeIDE下配置STM32F103输出带死区的互补PWM

STM32F103的TIM1和TIM8是高级定时器,可以产生嵌入死区时间的互补PWM波,使用STM32CubeIDE完成相关配置,可以直接生成代

2023-11-01 09:41:07

基于STM32F103PWM控制H桥驱动电路

通过stm32f103单片机io口引脚输出pwm信号控制两个桥电路驱动电机

资料下载 下雨天_266 2022-10-24 11:25:45

STM32F103C8T6定时器TIM4通道1、2输出PWM

STM32F103C8T6定时器TIM4通道1、2输出PWM这美妙的波形,真好,我他喵的终于把你弄出来了。

资料下载 吴湛 2021-12-02 18:21:10

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于ARM的32位MCU芯片STM32F103x4/103x6

基于ARM的32位MCU芯片STM32F103x4/103x6

资料下载 jf_42320578 2021-05-21 15:32:12

使用STM32F103RCT6和RBT6核心板实现PWM输出实验的程序和工程文件

本文档的主要内容详细介绍的是使用STM32F103RCT6和RBT6核心板实现PWM输出实验的程序和工程文件免费下载。

资料下载 1796295377 2019-08-01 08:00:00

STM32CUBEIDE(11)----输出PWM及修改PWM频率与占空比

本章STM32CUBEMX配置STM32F103输出PWM,并在示波器中

2022-11-30 14:12:45

怎么利用STM32F103输出PWM波形?

怎么利用STM32F103输出PWM波形?

2021-11-22 06:17:04

STM32F103 PWM输出配置有哪些步骤呢

PWM是什么?STM32F103 PWM输出比较模式有哪几种?

2021-11-15 07:52:12

如何使用STM32F103输出PWM波?

如何使用STM32F103输出PWM波?

2021-11-15 06:45:05

STM32F103输出PWM波形

STM32的PWM和DAC练习STM32F103输出一路

2021-08-17 09:01:27

STM32F103输出PWM波形

STM32的PWM和DAC练习一、 用STM32F103输出一路

2021-08-17 06:29:16

使用STM32F103pwm控制电机

使用STM32F103pwm控制电机上一期我们讲了STM32F103pwm控制电机 ,这一期我教大家如何接线传送门:资源概述开发板:正点原子STM32F103

2021-08-11 07:22:05
7天热门专题 换一换
相关标签