> 文章列表 > STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

文章目录

    • 一、基础知识点
    • 二、开发环境
    • 三、STM32CubeMX相关配置
    • 四、Vscode代码讲解
    • 五、结果演示

一、基础知识点

本实验通过STM32F103 的通用定时器 PWN功能,实现对无源蜂鸣器控制。
本实验内容知识点:
1、通用定时器 PWN 详解
2、有源蜂鸣器和无源蜂鸣器 解析

准备好了吗?开始实战show time。


二、开发环境

1、硬件开发准备
主控:STM32F103ZET6
无源蜂鸣器
STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

2、软件开发准备
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。
该部分可参考:软件开发环境构建软件开发环境构建


三、STM32CubeMX相关配置

1、STM32CubeMX基本配置
本实验基于CubeMX详解构建基本框架 进行开发。

2、STM32CubeMX SPI相关配置
(1)定时器配置
STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

(2)PWM配置
STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解


四、Vscode代码讲解

1、蜂鸣器相关的结构体定义以及初始化

typedef struct
{uint8_t (*Read_Deep)(void);                     void (*Deep_Enable)(void);                     void (*Deep_Disable)(void);                     
} Deep_t;
extern Deep_t Deep;Deep_t Deep ={Read_Deep,Deep_Enable,Deep_Disable
};

2、deep使能(PWM)具体函数实现

static void Deep_Enable(void)
{HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
} static void Deep_Disable(void)
{HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
}     

3、在使能PWM后可直接调整ARR和CCR1来控制频率和占空比,使蜂鸣器发出不同音调

// 时钟:1MHz
// PWM频率:1MHz/ARR
// 占空比:CRR1
static uint32_t CNT=0;
if(CNT++ > 3)
{CNT=0;TIM1->ARR -= 10;if( TIM1->ARR <= 250 )TIM1->ARR = 2000;TIM1->CCR1 = TIM1->ARR/2;
}

五、结果演示

实验效果:PWM频率从500Hz到4KHz变化,占空比为对应的一半。
STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解