STM32PWM程序实例
以下是一个基于STM32 HAL库的PWM输出示例代码(以TIM3通道1为例,PA6引脚):
#include "main.h"
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim3;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM3_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
// 启动PWM输出
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
uint16_t duty = 0;
while (1)
{
// 呼吸灯效果:改变占空比
while(duty < 1000)
{
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty++);
HAL_Delay(1);
}
while(duty > 0)
{
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty--);
HAL_Delay(1);
}
}
}
// TIM3初始化配置
void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = 72-1; // 预分频72,72MHz/72=1MHz
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 1000-1; // 自动重载值ARR,PWM周期=1MHz/1000=1KHz
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim3);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 初始占空比50%(500/1000)
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronize(&htim3, &sMasterConfig);
}
// GPIO初始化
void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
// PA6配置为TIM3_CH1
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 系统时钟配置(72MHz)
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
关键配置说明:
-
定时器参数:
- Prescaler: 预分频值,决定计数器时钟频率
- Period: 自动重载值ARR,决定PWM周期
- Pulse: 初始占空比(CCR寄存器值)
-
PWM频率计算公式:
PWM频率 = 定时器时钟 / (Prescaler + 1) / (Period + 1) 本例:72MHz / 72 / 1000 = 1KHz -
占空比计算:
占空比 = (Pulse / (Period + 1)) * 100% 示例中500对应50%占空比
使用说明:
- 本示例基于STM32F103系列,使用TIM3通道1(PA6引脚)
- 实现呼吸灯效果,PWM频率1KHz
- 通过
__HAL_TIM_SET_COMPARE()函数动态修改占空比 - 实际使用需根据具体硬件修改引脚和定时器配置
注意事项:
- 不同型号STM32的定时器通道对应引脚可能不同
- 使用前务必使能相关时钟(GPIO、TIM)
- 高精度PWM需考虑预分频和ARR值的合理搭配
- 可通过STM32CubeMX工具生成初始化代码
可根据具体需求修改定时器、通道、引脚和PWM参数来适配不同的应用场景。
进行STM32 PWM输入捕获遇到的疑问求解
我在进行STM32PWM输入捕获的时候一直有一个疑问,希望各位大神能给我解决一下。 100:复位模式 – 选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存器的信号。 PWM
STM32读取光敏AD值自动调节屏幕亮度PWM
前提:STM32PWM配置完成(这里是通道4),PWM设置越大,屏幕背光越亮PWM调节函数:__HAL_TIM_SetCompare(&
资料下载
佚名
2022-01-14 13:07:21
STM32实现PWM呼吸灯的程序合集免费下载
本文档的主要内容详细介绍的是STM32实现PWM呼吸灯的程序合集免费下载。
资料下载
h1654155285.3128
2020-03-19 08:00:00
STM32 PWM配置完成
前提:STM32PWM配置完成(这里是通道4),PWM设置越大,屏幕背光越亮PWM调节函数:__HAL_TIM_SetCompare(&
stm32pwm和dac 精选资料分享
stm32pwm和dac一、PWM练习Keil软件仿真二、输出周期为2kHz的正炫波形三、数字音频转换为模拟音频一、PWM练习
stm32PWM DAC原理
stm32PWM DAC原理简而言之:改变PWM占空比,利用DAC和ADC显示电压PWM本质上其实就是是一种周期一定,而高低电平占空比可调的方波
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览