文章目录
- 一、基础知识点
- 二、开发环境
- 三、STM32CubeMX相关配置
- 四、Vscode代码讲解
- 五、结果演示
一、基础知识点
本实验通过STM32F103 的通用定时器 PWN功能,实现对无源蜂鸣器控制。
本实验内容知识点:
1、通用定时器 PWN 详解
2、有源蜂鸣器和无源蜂鸣器 解析
准备好了吗?开始实战show time。
二、开发环境
1、硬件开发准备
主控:STM32F103ZET6
无源蜂鸣器
2、软件开发准备
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。
该部分可参考:软件开发环境构建软件开发环境构建
三、STM32CubeMX相关配置
1、STM32CubeMX基本配置
本实验基于CubeMX详解构建基本框架 进行开发。
2、STM32CubeMX SPI相关配置
(1)定时器配置
(2)PWM配置
四、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变化,占空比为对应的一半。