单片机
返回首页

stm32定时器实现PWM输出控制无源蜂鸣器(HAL)

2019-03-09 来源:eefocus

(一)PWM概念和原理


脉冲宽度调制(PWM),是英文“Pulse Width Modulation'的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。


PWM原理示意图

PWM原理示意图


上图是简单的PWM原理示意图。图中,我们假定定时器工作在向上计数PWM模式,且当CNT


(二)代码示例


环境:STM32F103C8  主频64MHz   TIM3


(1)GPIO初始化


 GPIO_InitStruct.Pin = GPIO_PIN_0;

 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  

 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

 GPIO_InitStruct.Pull = GPIO_PULLUP;

 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

(2)PWM相关函数


//---------------------------main.c---------------------------------------

// PWM 输出初始化

// arr:自动重装值  

static void TIM3_PWM_Init(UStoreData *pStoreData)

{

uint32_t liv_Var = Buzzer_Get_Buzzer_Volume(pStoreData->Buzzer_Volume);


if (liv_Var == BUZZER_VOLUME_ABNORMAL)

{

liv_Var = BUZZER_VOLUME_5;

}


TIM3_Handler.Instance = TIM3;

TIM3_Handler.Init.Prescaler = (HAL_RCC_GetPCLK1Freq() << 1) / 200000UL - 1; // 定时器分频:200K

TIM3_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;

TIM3_Handler.Init.Period = BUZZER_PWM_MAX_FRE; // 自动重装载值

TIM3_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

HAL_TIM_PWM_Init(&TIM3_Handler);


TIM3_CH3Handler.OCMode = TIM_OCMODE_PWM1;

TIM3_CH3Handler.Pulse = liv_Var; // 设置比较值,此值用来确定占空比,占空比为50%时,蜂鸣器最响

TIM3_CH3Handler.OCPolarity = TIM_OCPOLARITY_LOW; // 输出比较极性为低

HAL_TIM_PWM_ConfigChannel(&TIM3_Handler, &TIM3_CH3Handler, TIM_CHANNEL_3);

HAL_TIM_PWM_Start(&TIM3_Handler, TIM_CHANNEL_3);

}

 

// 设置TIM通道3的占空比

// compare:比较值

void TIM_SetTIM3Compare3(uint32_t compare)

{

TIM3->CCR3 = compare;

}

 

//---------------------------stm32f1xx_hal_msp.c------------------------------------

 

// 定时器底层驱动,时钟使能,引脚配置

// 此函数会被HAL_TIM_PWM_Init()调用

// htim:定时器句柄

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)

{

__HAL_RCC_TIM3_CLK_ENABLE();

}

 


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 基于IC555的可变PWM振荡器电路

  • 优化电路板布局的简单方法

  • 如何使用LED驱动器LM3915制作振动计

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章