要求 被抓捕的 PWM 信号的高电平时间宽度 应该
小于 定时器 65535自我溢出周期的一半比较好。。
本例 使用 48MHz 无缝切换的 主时钟,定时器48分频
最小时基为1us ,65535us 的一半 32767微秒,一般
的遥控信号 单路最大宽度 2200us 完全 满足 条件。
——这 应该是 多路抓捕 最精简的 代码咯——
extern u32 MyTemp_1,MyTemp_2,MyTemp_3;
extern u16 MyCap1,MyCap2,MyCap3,MyCap4,MyCH1_Up,MyCH2_Up,MyCH3_Up,MyCH4_Up;
void TIM4_IRQHandler(void)
{
// —————下面是捕捉1————
if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
if (BitTIM4_CCER(CC1P) == 0) // 俺喜欢 位带区 操作。
{
MyCH1_Up = TIM4->CCR1; // 记录上升沿时刻的 CNT 数值。
BitTIM4_CCER(CC1P) = 1; // 改变CC1捕捉为:下降沿=1
}
else // 下降沿 才需要计算 宽度。
{
MyCap1 = TIM4->CCR1 - MyCH1_Up; // 当前数值 减去 上升沿数值 = 高电平宽度
if ((MyCap1-1200)>3) // 测试才用这代码 担心捕捉 有误差:宽限 3个点。
{
PB(3) = 0; // 给逻辑分析仪 提供 触发信号 用。
MyTemp_2 ++; // 全速 断点 在这里 抓捕 错误。。
}
else PB(3) = 1;
BitTIM4_CCER(CC1P) = 0; // 改变CC1捕捉为:上升沿=0
}
}
// —————下面是捕捉2————照抄。。。
|