目录
1、普通PWM
2、捕获
3、RTC
4、ADC
5、比较PWM
一、PWM
1、找到文件夹:TIM --> PWM_Output 打开main.c
2、摘抄步骤:





3、修改GPIO口和定时器以及频率配置。
PWM重要知识点(频率配置):
*** 此配置方法频率可以低到 20 HZ 高到 50 KHZ***
period = 1 000 000 / free - 1 ;
TIM_Prescaler = 72 -1 ;
两个数值相乘为72 000 000 那么 free 就是频率
TIM_Pulse = 10000 * duty / fre - 1 ;
二、捕获
1、找到文件夹: TIM/InputCapture/main.c
2、主要部分:
首先要加上时基的初始化。然后就是仔细捕获的初始化。。


2为捕获的中断函数函数计算了放波频率,我们要把它改为可以计算出的占空比和频率的程序。
TIM3->CCER |= TIM_CCER_CC2P; //捕获下降沿配置
TIM3->CCER &=~ TIM_CCER_CC2P; //捕获上升沿配置
难点是自己编写捕获占空比:
首先第一次进入中断是因为上升沿触发的,这时候进入中断后就要开始计时,计到下降沿触发时停止,并读取。为了方便下降沿触发时读取H的计数值,我们在第一次上升沿触发后的中断函数中清零CNT(尤其注意如果两个通道同时使用一个定时器,那么操做CNT会影响另一个通道的正常运行)。得到H后,开始等待下一次的上升沿触发,读取HL的值。
if(CaptureNumberq == 0) //上升沿触发进入 进入后读取下当前值,并准备下降沿触发后读取H
{
CaptureNumberq = 1;
CH3_ = TIM_GetCapture3(TIM2);
TIM2->CCER |= TIM_CCER_CC3P;
}
else if(CaptureNumberq == 1) //下降沿已触发,可以读出H了,在准备下下一次上升沿触发来读HL
{
CaptureNumberq = 2;
CH3_H = TIM_GetCapture3(TIM2);
if(CH3_ < CH3_H) CH3_H = CH3_H - CH3_;
else CH3_H = 0xffff + CH3_H - CH3_ ;
TIM2->CCER &=~ TIM_CCER_CC3P;
}else if(CaptureNumberq == 2)
{
CH3_HL = TIM_GetCapture3(TIM2);
if(CH3_ < CH3_HL) CH3_HL = CH3_HL - CH3_;
else CH3_H = 0xffff + CH3_HL - CH3_ ;
CaptureNumberq = 0;
DUTY = CH3_H *100/CH3_HL;
TIM2Freqq = 1000000/CH3_HL;
}
三、RTC
1、找到文件:RTC/LSI_Calib/main.c
2、删去最后两句,前面夹上NVIC初始化


四、ADC
1、文件:ADC/ADC1_DMA/main.c
2、



五、比较PWM
1、打开 TIM/OCToggle/main.c
copy所有的初始化,和中断服务函数,并修改初始化中的一些参数。目前的中断服务函数是生成一个占空比为50%的不同频率的PWM,需要自己改为输出一定频率和占空比的PWM。
修改的关键是认为给定频率和占空比,计算得到PWM高、低电平的计数值。
u16 H,L; //高、低电平的计数值
u16 free,duty; //频率 和 占空比(由人为设定)
u16 ALL_count; //PWM一个周期的计数值
ALL_count = (SystemCoreClock / div)/ free;
H = ALL_count * duty /100;
L = ALL_count - H ;
六、串口收发




网友评论