登录/注册

STM32 F103 PWM

STM32 F103 PWM

更多

在STM32F103系列微控制器中配置PWM(脉冲宽度调制)功能,通常需要通过定时器(Timer)的外设模块实现。以下是基于标准外设库(Standard Peripheral Library)的PWM配置步骤总结:


1. 选择定时器和通道

STM32F103的PWM由定时器的输出比较模式实现,支持的定时器包括:


2. 配置步骤

(1) 使能时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  // 例如使用TIM3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIO时钟(假设使用PA6或PA7)

(2) 配置GPIO为复用推挽输出

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;         // 例如PA6对应TIM3_CH1
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

(3) 配置定时器基本参数

TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStruct.TIM_Prescaler = 71;          // 预分频值(72MHz / (71+1) = 1MHz)
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数
TIM_TimeBaseStruct.TIM_Period = 999;            // 自动重装载值(ARR),决定PWM频率
TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

(4) 配置PWM模式

TIM_OCInitTypeDef TIM_OCStruct;
TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;      // PWM模式1(CNT < CCRx时输出有效电平)
TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; // 使能输出
TIM_OCStruct.TIM_Pulse = 500;                   // 初始占空比(CCR值,范围0-ARR)
TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; // 有效电平为高
TIM_OC1Init(TIM3, &TIM_OCStruct);               // 初始化通道1

(5) 启动定时器和PWM输出

TIM_Cmd(TIM3, ENABLE);         // 启动定时器
TIM_CtrlPWMOutputs(TIM3, ENABLE); // 对于高级定时器(如TIM1)需调用此函数

3. 关键参数计算


4. 动态调整占空比

通过修改通道的CCR寄存器值实时调整占空比:

TIM_SetCompare1(TIM3, 300);  // 修改TIM3通道1的CCR值为300

5. 常见问题


示例代码(TIM3通道1输出PWM)

#include "stm32f10x.h"

void PWM_Init(void) {
    // 1. 使能时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 2. 配置PA6为复用推挽输出
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 3. 配置定时器时基
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
    TIM_TimeBaseStruct.TIM_Prescaler = 71;      // 1MHz
    TIM_TimeBaseStruct.TIM_Period = 999;        // 1kHz频率
    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

    // 4. 配置PWM模式
    TIM_OCInitTypeDef TIM_OCStruct;
    TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCStruct.TIM_Pulse = 500;               // 初始占空比50%
    TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCStruct);

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

通过以上步骤,您可以在STM32F103上实现PWM输出。如需进一步优化或使用高级功能(如互补输出、死区控制),请参考STM32参考手册的定时器章节。

STM32F103VET6

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

请问STM32 F103串口同时收发出现死锁现象怎么解决?

请问STM32 F103串口同时收发出现死锁现象怎么解决?

2022-02-18 07:56:15

零死角玩转STM32—基于野火F103开发板

本书着重讲解 F103 的外设以及外设的应用,力争全面分析每个外设的功能框图和外设 的使用方法,让读者可以零死角的玩转 STM32—F103

资料下载 xylu001 2022-05-23 15:39:27

F103最小系统的拓展板

F103c8t6的拓展版 引出了很多引脚适用于宽度为8miu的F103最小系统板 当然也可以在我的基础上做改进啦!

资料下载 ah此生不换 2022-04-21 16:10:58

STM32 F103之点亮LED流水灯 (STM32入门学习)

STM32 F103之点亮LED流水灯一、STM32初识二、寄存器使用工具:stm32

资料下载 duke刘 2021-12-06 21:06:09

蓝桥杯STM32学习之G431、F103基础知识(一)

第十二届蓝桥杯嵌入式设计与开发将竞赛平台由原来的CT107D更新为CT117E-M4,MCU也是将STM32F103RBT6更换为了STM32G431RBT6。为了明年的比赛做准备,所以

资料下载 杨平 2021-12-05 20:06:09

《零死角玩转STM32F103指南者

《零死角玩转STM32—F103指南者说明。

资料下载 于卯兔 2021-04-19 09:38:45

STM32CubeMX的HAL库对F103F411的GPIO配置和使用方法

411RE文章目录STM32CubeMX第一章GPIO前言一、GPIO的工作模式二、使用步骤1.引入库2.读入数据总结前言  本文使用STM32CubeMX的HAL库对

2022-01-26 06:28:06

STM32 F103系列控制器的主系统结构

系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理目录STM32 F103系列控制器的主系统结构STM32

2021-12-20 07:45:13

基于stm32 f103pwm呼吸灯程序代码分享

基于stm32 f103的pwm呼吸灯程序代码分享

2021-12-14 07:52:18

芯片短缺如何用HK32F103换掉STM32F103

本篇笔记主要记录因为芯片短缺,使用HK32F103换掉了STM32F103的过程和注意事项。 准备工作 准备之前的STM32F103工程。 测试

2021-11-01 14:14:48

F103替换的三大主方案

1. 摘要 因F103系列用量比较大,而国际形势的影响,导致目前价格飞涨,而且货期不定,大量客户已经无法忍受核心芯片的暴涨,导致利润空间急速下滑,出货量大的产品,急需找到替代方案,因也有几个产品用过

2021-03-21 09:40:37

零死角玩转STM32F103

零死角玩转STM32—F103

2020-04-21 09:44:20

f103 封装库

f103 封装库

2019-12-12 17:06:00
7天热门专题 换一换
相关标签