PWM输出实验——呼吸灯
发布日期:2021-05-10 23:35:51 浏览次数:26 分类:精选文章

本文共 1471 字,大约阅读时间需要 4 分钟。

实验原理及实现过程

通过调节占空比,改变输出电压大小,从而实现对小灯亮度的控制。在本实验中,使用正点原子精英版开发板,并通过复用重映射将PA7(时钟3的通道2:TIM3_CH2)映射到PB5(LED0)上。接下来将详细介绍实验的配置步骤和实现方法。

实验配置步骤

第一步,开启TIM3时钟,配置PB5为复用输出

  • 通过RCC->APB1ENR设置开启TIM3时钟
  • 通过GPIOB->CRL将PB5设置为复用推挽输出
  • 使能GPIOB时钟(因为使用了TIM3_CH2,因此需要使能B端口时钟)
  • 第二步,设置TIM3_CH2重映射到PB5上

  • 通过AFIO->MAPR将PA7部分重映射到PB5
  • 通过RCC->APB2ENR开启辅助时钟 因为使用了AFIO重映射和外部中断(EXTI)控制寄存器,所以需要开启辅助时钟。
  • 第三步,设置TIM3的ARR和PSC

  • 通过TIM3->ARR配置重装载值
  • 通过TIM3->PSC配置预分频系数 重装载值和预分频系数的使用方法:例如,ARR=9999,PSC=7199;实际计数次数为9999+1=10000次,预分频系数为7200。计算分频时钟频率为(10000)/(7200)=约1.389kHz。
  • 第四步,设置TIM3_CH2的PWM模式

  • 通过TIM3->CCMR1设置为PWM模式
  • 通过TIM3->CCER设置输入/捕获输出极性 注意:通过配置CCMR1和CCER,可以控制TIM3_CH2的输出电平和极性。
  • 第五步,设置 TIM3_CCR2 用于控制占空比 通过修改TIM3_CCR2的值,可以调节CH2输出的占空比,从而控制灯的亮度。

    配置代码

    头文件 #ifndef _PWM_DSO #define _PWM_DSO //通过改变占空比来改变亮度 #define Pwm_value TIM3->CCR2 #endif

    初始化函数 #include "pwm_dso.h" #include "sys.h" void Pwm_Dso_Init(void) { //设置相关寄存器值 RCC->APB1ENR |= (1 << 1); //开启TIM3时钟 RCC->APB2ENR = (1 << 3); //开启B端口时钟 GPIOB->CRL = 0xFFFFF00F; //设置PB5为复用推挽输出 AFIO->MAPR |= (1 << 10) | (1 << 11); //进行复用重映射配置 //配置其他相关寄存器参数 }

    主函数 #include "pwm_dso.h" #include "sys.h"

    int main(void) { u8 flag = 1; u16 value = 0; Stm32_Clock_Init(9); //系统时钟初始化 UART_Init(72, 115200); //串口初始化 Led_Init(); //LED初始化 Pwm_Dso_Init(); //启动PWM控制 while(1) { if(flag) value++; else value--; if(value > 100) flag = 0; if(value == 0) flag = 1; Pwm_value = value; } }

    注:以上代码仅为示例,需根据实际开发需求进行调整。

    各寄存器解释 PWM:即脉宽调制 TIMx_ARR:自动重装载寄存器 TIMx_CR1:控制寄存器1 TIMx_CCER:捕获/比较使能寄存器 TIMx_CCMR1:捕获/比较模式寄存器

    上一篇:顺序表实现与测试
    下一篇:负数取模怎么算(转)

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月14日 15时50分54秒