PWM 呼吸灯
1.使用PWM调节LED亮度
新名词:
OC 输出比较
IC 输入比较
CCR 捕获/比较寄存器
NVIC 嵌套向量中断控制器
原理
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)
//启动定时器
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);
}
}
}
扫描二维码,在手机上阅读
收到2条评论
Alan 2023-07-13 17:03
问:如何删除多余重复的评论
回复
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
有效电平加输出极性就等于什么时候输出高电平。
不知道是不是如果此时电平为有效,配置为输出高级性,那么实际输出的电平是高。默认电平和极性同步。
有效电平加输出极性就等于什么时候输出高电平。
不知道是不是如果此时电平为有效,配置为输出高级性,那么实际输出的电平是高。默认电平和极性同步。
回复