«

PWM 呼吸灯

Sweetiey 发布于 阅读:364 课程笔记


1.使用PWM调节LED亮度

新名词:
OC 输出比较
IC 输入比较
CCR 捕获/比较寄存器
NVIC 嵌套向量中断控制器

原理

PWM 呼吸灯

void PWM_Init(void)
{

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//TIM2是APB1的外设,开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置时钟

   // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO时钟
    //GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);//引脚重映射设置(部分重映射,ENABLE)
    //上面把PA0换到PA15
    //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//解除/关掉AP15的JTAG调试端口

    GPIO_InitTypeDef A1;
    A1.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
    A1.GPIO_Pin = GPIO_Pin_0;//GPIO_Pin_15
    A1.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&A1);//初始化GPIO

    TIM_InternalClockConfig(TIM2);//选择时基单元的时钟为内部时钟

    TIM_TimeBaseInitTypeDef A;
    A.TIM_ClockDivision = TIM_CKD_DIV1;
    A.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
    A.TIM_Period = 100-1;//0~65535 周期  ARR(AutoReloadResistor)自动重装器
    A.TIM_Prescaler = 720-1;//TIM_Prescaler PSC预分频器的值

    A.TIM_RepetitionCounter =0 ;//不用
    TIM_TimeBaseInit(TIM2,&A);//配置时基单元初始化

    TIM_OCInitTypeDef TS;
    TIM_OCStructInit(&TS);
    TS.TIM_OCMode =TIM_OCMode_PWM1 ;
    TS.TIM_OCPolarity= TIM_OCPolarity_High;
    TS.TIM_OutputState = TIM_OutputState_Enable;//输出使能
    //TS.TIM_Pulse = 90;//设置CCR值    在运行中设置
    /*
    PWM频率F=CK_PSC/(PSC+1)/(ARR+1)   CK_PSC=72M
    占空比Puty=CCR/(ARR+1)
    PWM分辨率Reso=1/(ARR+1)
    */
    TIM_OC1Init(TIM2,&TS);//初始化输出比较OutputCompare(OC)

PWM 呼吸灯

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

}

void PWM_SetCompare(uint16_t Compare)
{
    TIM_SetCompare1(TIM2,Compare);//在运行中设置CCR值
}

有一个疑问,为什么没有配置极性选择输出使能电路
Main函数

int main(void)
{

    OLED_Clear(); 
    OLED_Init();
    OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
    PWM_Init();

while(1)
{   

    OLED_ShowString(1,5,"Sweetiey.com",12,1);
    OLED_ShowNum(1,25,i,3,8,1);
    OLED_Refresh();
    for(i=0;i<=100;i++)
    {
        PWM_SetCompare(i);
        delay_ms(15);
    }
    for(i=0;i<=100;i++)
    {
        PWM_SetCompare(100-i);
        delay_ms(15);
    }

}

}

STM32


扫描二维码,在手机上阅读
收到2条评论
avatar
Alan 2023-07-13 17:03
问:如何删除多余重复的评论
回复
avatar
Alan 2023-07-13 17:02
对于为什么没有配置极性选择输出使能电路,实际输出的电平是由输出极性和电平是否有效共同决定的。https://blog.csdn.net/m0_38005870/article/details/72629721?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-72629721-blog-112907294.235^v38^pc_relevant_anti_t3_base&spm=1001.2101.3001.4242.1&utm_relevant_index=1
有效电平加输出极性就等于什么时候输出高电平。
不知道是不是如果此时电平为有效,配置为输出高级性,那么实际输出的电平是高。默认电平和极性同步。
回复