STM32/PWM占空比配置

PWM(脉冲宽度调制),利用数字信号的输出来实现模拟模拟信号的技术。通过调节脉冲信号的占空比实现模拟量的控制。占空比就是在一个固定周期内改变高电平所占时间的比例。

PWM模式(模式1和模式2):

PWM模式1和模式2是STM32定时器在输出比较通道中的两种工作行为的约定,它们决定了计数器CNT与比较寄存器CCR之间的关系,也就是当CNT < CCR时,输出有效电平还是无效电平。模式1:CNT < CCR,输出有效电平;CNT≥CCR,输出无效电平。模式2:CNT < CCR,输出无效电平;CNT≥CCR,输出有效电平。

占空比计算公式:

占空比配置:示例选择通用定时器TIM3通道1,对应I/O资源GPIOA6。

cpp 复制代码
void PWM_Init(void)
{
    //使能时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    //配置GPIO
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   // 复用推挽
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //配置时基(ARR, PSC)
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     
	TIM_TimeBaseInitStructure.TIM_Period = 1000 - 1;		//ARR: 0~999 → 1000步
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;		//PSC: 72MHz / 72 = 1MHz
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);             
	
    //配置 PWM 通道 (CCR,模式,极性)
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;        // PWM 模式1
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;                       // 初始 CCR = 0
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);

    //使能预装载(ARR/CCR影子)
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM3, ENABLE);

    //启动定时器
    TIM_Cmd(TIM3, ENABLE);
}

/*
主函数调用"TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)"可改变占空比

例:设置占空比为50%,那么根据公式反推当CCR=500时占空比为50%
调用"TIM_SetCompare1(TIM3, 500)"即可
*/

注:以上内容仅个人理解,不具备唯一性和绝对正确性,仅供参考。

相关推荐
朝发如雪8 小时前
快速掌握单片机基础(3)(PWM)(通信协议基础)(串口通信时序与参数)(电气特性与电平标准)(51单片机UART寄存器配置)(串口应用层协议)
单片机
天空'之城11 小时前
单片机基础核心知识点汇总(四十)
单片机·嵌入式硬件
嵌入式阿蔡11 小时前
智能家居互联2026:Matter、Thread与嵌入式开发的新范式
嵌入式
smartpi_ai11 小时前
离线语音模块误识别问题全面解决方案:命令词设计、防误触与灵敏度调优指南
人工智能·单片机·语音识别
LCG元11 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
花 满 楼11 小时前
HSM自学之路——阶段 1 密码学算法分类与原理
嵌入式·hsm
染予11 小时前
代码中相关C语言知识点总结
stm32
优信电子12 小时前
STM32 驱动 DHT30 测量环境温湿度(兼容SHT30):从时序解析到完整代码实战
stm32·嵌入式·传感器·sht30·温湿度·环境测量·dht30
小李不想当小白13 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
朝发如雪14 小时前
快速掌握单片机基础(6)(数据处理与传送指令)(跳转与分支指令)(栈操作与混合编程)(程序状态寄存器操作指令)(内存映射)
单片机·arm