PWM输出控制LED亮度(通用定时器TIMx)

作者:希文      发布时间:2021-04-22      浏览量:0
PWM,即脉宽调试,通过调整周期中高低电

PWM,即脉宽调试,通过调整周期中高低电平的时间长度(占空比)来调整GPIO的输出。

的输出需要一个定时器。

1.配置步骤:

1,启用计时器时钟、GPIO时钟、重用时钟(如果使用);RCC_APBxperiphClockCmd();2,初始化GPIO GPIO_Init();3,映射定时器以重用GPIO_PinRemapConfig();4,初始化计时器Tim_TimeBaseInit();5,初始化计时器通道Tim_OCxInit()6。预加载TimOCxPreConConit();7,启用TimTimeCmd();8,不断更改OCRX值以实现任务周期Tim_Comparex();

定时器初始化需要配置重新加载值和预分频系数,以控制PWM输出的周期。

周期计算公式:Tout=(周期+1)(预分频器+1)/tclkthe结构成员变量和他们的功能那需要到成配置什么时候这个定时器是初始化:

类型结构{Uint 16_联合:清华简25,2007年3:三十三下午//预频除法(主)系数钟分部)UINT 16_Ttim反模式;//数数模式(向上,倒下,中)Uint 16_联合:清华简25,2007年3:三十三下午//再装价值(价值)的定时器UINT 16_Ttim_Clock分部;//钟频率除法因数(再除法)的定时器时钟一般集到提姆_CKD_DIV 1)Uint 8_Ttim_ResigntionCounter;//数的重复(否)配置)提姆_关键词TimeBaseInitTypeDef;这个结构成员变量和功能那需要到成配置什么时候这个

定时器通道是初始化:

类型结构{UINT 16_Ttim_OC极性;//输出量极性(高)或低层输出量什么时候有效)UINT 16_土提_OCMode;//定时器通道模式(脉宽调制)模式或比较UINT 16模式_Ttim_OutputState;//是它可能到启用//这个以下脉宽调制输出量是吗?不需要到成配置Uint 16_Ttim_OutputNState;//是它启用(TIM1)(只)及TIM8有效)UINT 16_Ttim脉冲;//直接操作寄存器控制输出量波形UINT 16_Ttim_OCN极性;//输出量极性(高)或低层输出量什么时候有效)(TIM1)只有TIM8有效)Uint 16_Ttim_OCIdleState;//集这个价值什么时候闲散(TIM1)(只)及TIM8有效)UINT 16_Ttim_OCNIdleState;//集这个价值什么时候闲散(TIM1)(只)及TIM8))_OCInitTypeDef;

变化这个CRR 2价值到调整这个赋税循环

TimSetComparex(TIMx)Val);

参照系代码:英坦德(空){U8I=1;U16led0pwmval;GPIO_InitStrue;Tim-TimeBaseInitStrue;RCC_APB 1周期Cmd(RCC_APB 1周期_TIM3,//使能TIM3和相关GPIOClocksRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,///启用GPIO再利用ClockRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,///启用GPIOB时钟GPIO_InitStrue。GPIO_Pin=GPIO_Pin_1;//Tim_CH4 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽GPIO_InitStrue.GPIO_FAST=GPIO_Speed10 MHz;//设置输出速度GPIO_Init(GPIOB&GPIO_InitStrue);//GPIO端口初始化设置GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,Enable);//溢出时间tout=(周期+1)(预分频器+1)/tclk 500 ms Tim_TimeBaseInitStru.TIM_周期=4999;//设置自动重新加载值(改变测试灯的亮度^^)Tim_TimeBaseInitStrue.TIM_Prescaler=7199;//预频分频系数(时钟72 MHz)TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;//计数器溢出TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1上行/时钟分频因子Tim_TimeBaseInit(TIM3,&TimTimeBaseInitStrue);//TIM3初始化设置(设置PWM周期)TimOCInitStrue.TIM_OCMode=Tim_OCMode_PWM 2;//PWM模式2:CNT输出有效的Tim_OCInitStrue。当2:CNT大于CCRTIM_OCPolity=Tim_OCPolity_High;//SET极性-有效地使TimOC4Init(TIM3&TimOCInitStrue)用于高水平TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable;//输出;//SET TimOC4PreloadConfig(TIM3,TimOCPreload_Enable)用于//TIM3的2PWM模式;//启用预加载寄存器TimCmd(TIM3,Enable)//EnableTIM3,同时(1){(1){if(I)分类帐0pwmval++;//从亮到暗if(led0pwmval==0)i≤1;//当达到最亮值时,开始调光if(led0pwmval>50)//try^^i≤0以将50更改为其他值//已达到其最暗值//已开始亮化Tim_SetCompare 4(TIM3,0 pwmval);//更改比较值TIM3->CCR 2以调整任务周期}

计时器TIM3 reImage关系表(其他计时器映射表尝试检查TIM3关系表^_^)。

尝试在不设置重用模式的情况下配置GPIOB 1以PWM输出

2,最后软件仿真的波形

--华丽分段--

一些合作伙伴说,软件仿真的波形不能传递500 ms。经过一些操作,M军发现,可能是时钟晶体振荡器的大小设定在项目成立时不是8兆赫。

您最好在这里修改它,然后再看一遍。