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

文章目录

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


一、基础知识点

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

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


二、开发环境

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

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


三、STM32CubeMX相关配置

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

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

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


四、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 无源蜂鸣器 详解_第4张图片

你可能感兴趣的:(STM32开发,stm32,单片机,嵌入式硬件,pwm,蜂鸣器)