登录/注册

stm32f103的pwm实验代码

stm32f103的pwm实验代码

更多

以下是一个基于STM32F103的PWM输出实验代码示例,使用标准库(Standard Peripheral Library)实现。以TIM3的通道1(PA6)和通道2(PA7)为例,生成PWM信号:

#include "stm32f10x.h"

void PWM_Init(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;

    // 开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    // 配置PA6、PA7为复用推挽输出(TIM3_CH1/CH2)
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 定时器基本配置
    TIM_TimeBaseStructure.TIM_Period = 999;         // 自动重装载值(决定PWM频率)
    TIM_TimeBaseStructure.TIM_Prescaler = 71;       // 预分频值(72MHz/(71+1)=1MHz)
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    // PWM模式配置(通道1)
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   // PWM模式1
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 500;                // 初始占空比50%(500/1000)
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 通道1初始化
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);  // 通道2初始化

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

int main(void) {
    PWM_Init();

    while(1) {
        // 可通过修改CCR值动态调整占空比
        // TIM_SetCompare1(TIM3, 300);  // 设置通道1占空比为30%
        // TIM_SetCompare2(TIM3, 700);  // 设置通道2占空比为70%
    }
}

关键配置说明:

  1. 频率计算
    PWM频率 = 定时器时钟 / (Prescaler + 1) / (Period + 1)
    本例:72MHz / 72 / 1000 = 1kHz

  2. 占空比控制
    占空比 = (TIM_Pulse / (TIM_Period + 1)) * 100%
    通过TIM_SetComparex()函数动态修改占空比

  3. 引脚对应关系

    • TIM3_CH1 → PA6
    • TIM3_CH2 → PA7
    • 其他通道可根据数据手册选择对应引脚

注意事项:

  1. 确保工程中包含标准库文件(如stm32f10x_tim.h
  2. 不同定时器最大频率不同(TIM1/8为高级定时器)
  3. 实际硬件连接需与代码中的GPIO配置一致
  4. 使用示波器或逻辑分析仪可观察实际波形

可根据需求调整TIM_PrescalerTIM_Period的值来改变PWM频率,通过修改TIM_Pulse或调用TIM_SetComparex()函数调整占空比。

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

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

2023-11-01 09:41:07

ARM系列STM32F103芯片的解密方法

破解STM32F103芯片的方法

2023-09-19 09:03:40

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

在GD32F103移植STM32F103代码

在GD32F103移植STM32F103代码使用相同FLASH和管脚数量相同的芯片,例如GDF

资料下载 王艳 2021-12-02 15:21:07

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

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

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

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

LMT70代码基于stm32f103

LMT70测温代码基于stm32f103免费下载。

资料下载 Clovin 2021-05-06 11:16:35

六足机器人三维模型和STM32F103控制代码免费下载

本文档的主要内容详细介绍的是六足机器人三维模型和STM32F103控制代码免费下载。

资料下载 佚名 2020-06-15 18:00:00

STM32F103 GPIO内部电路图讲解

STM32F103 GPIO内部电路图讲解

2023-02-01 16:32:14

基于STM32F103单片机的矩阵按键设计

本实验使用STM32F103单片机,主题代码通用的。

2022-12-09 17:18:46

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

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

2021-11-15 07:52:12

如何使用STM32F103输出PWM波?

如何使用STM32F103输出PWM波?

2021-11-15 06:45:05

STM32F103输出PWM波形

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

2021-08-17 09:01:27

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

基于STM32F103的三相变频器方案设计

成熟三相变频器方案,基于STM32F103设计开发: 原理图和PCB源文件(AD软件)。 BOM清单 基于STM32F103控制源代码工程文件(

2020-12-07 10:33:38

7天热门专题 换一换
相关标签