用高级PWM捕获外部PWM高电平宽度
<p>我想捕获P1.0和P1.2两个引脚上的PWM高电平宽度,并打印出来。以下是我的部分代码。哪位大神帮忙看一下这样写行吗?看看有没有多余或缺少了哪些语句。因这我对高级PWM不熟悉。</p><p>//======================== 主函数 ========================<br />
void main(void)<br />
{<br />
P_SW2 |= 0x80;</p>
<pre><code>// P1.0 P1.2 高阻输入
P1M1 |= 0x05;
P1M0 &= ~0x05;
PWMA_Capture_Init();
Uart1_Init();
EA = 1;
while (1)
{
if (B_Capture1)
{
B_Capture1 = 0;
g_high_p10 = CCAP1_Time;// 单位:us
}
if (B_Capture2)
{
B_Capture2 = 0;
g_high_p12 = CCAP2_Time;
}
// 打印
Uart1_SendString("P1.0=");
u16_to_str(g_high_p10);
Uart1_SendString("us");
Uart1_SendString("P1.2=");
u16_to_str(g_high_p12);
Uart1_SendString("us\r\n");
delay_ms(200);
}
</code></pre>
<p>}</p>
<p>//======================== PWMA 捕获初始化 ========================<br />
void PWMA_Capture_Init(void)<br />
{<br />
P_SW2 |= 0x80;</p>
<pre><code>PWMA_CCER1 = 0;
PWMA_SR1 = 0;
PWMA_IER = 0;
PWMA_ENO = 0;
// 11.0592MHz 12分频 = 1us 精度
PWMA_PSCR = 11;
PWMA_ARR = 0xFFFF;
// ========= 通道1:P1.0 上升/下降沿都捕获 =========
PWMA_CCMR1 = (3 << 4) | 0x01; // 输入模式 + 滤波
PWMA_CCER1 |= 0x01; // 先上升沿
PWMA_CCER1 |= 0x03; // 双边沿捕获
// ========= 通道2:P1.2 上升/下降沿都捕获 =========
PWMA_CCMR2 = (3 << 4) | 0x01;
PWMA_CCER1 |= 0x10;
PWMA_CCER1 |= 0x30;
PWMA_PS = 0x00; // 必须00:P1.0 P1.2
PWMA_IER = 0x06; // 通道1 + 通道2 中断
PWMA_EGR = 0x01;
PWMA_CR1 |= 0x01;
</code></pre>
<p>}</p>
<p>//======================== PWMA 中断 ========================<br />
void PWMA_ISR(void) interrupt 26<br />
{<br />
u16 j;<br />
u8 sr;</p>
<pre><code>sr = PWMA_SR1;
PWMA_SR1 = 0;
// -------- P1.0 测高电平 --------
if (sr & 0x02)
{
j = PWMA_CCR1;
CCAP1_Time = j - CCAP1_tmp;
CCAP1_tmp = j;
B_Capture1 = 1;
}
// -------- P1.2 测高电平 --------
if (sr & 0x04)
{
j = PWMA_CCR2;
CCAP2_Time = j - CCAP2_tmp;
CCAP2_tmp = j;
B_Capture2 = 1;
}
</code></pre>
<p>}</p>
<p>打印出来的结果是这样的,感觉不对。</p>
<p><img src="data/attachment/forum/202604/16/093019jui3xvdnyiynzi9m.png" alt="image.png" title="image.png" /></p>
<p>实际波形是这个的。</p>
<p><img src="data/attachment/forum/202604/16/102806pbvcnjycpvnj80nc.jpg" alt="446d09173d0ddd8bded8d6cd503cdf45.jpg" title="446d09173d0ddd8bded8d6cd503cdf45.jpg" /></p>
CC1与CC2组合捕获高电平宽度,可以选择捕获PWM1P或者PWM2P引脚信号。
如果你需要捕获两路高电平信号,另外一路可选择CC3与CC4组合,通过PWM3P或者PWM4P引脚捕获。
附件例子供参考。
乘风飞扬 发表于 2026-4-16 12:06
CC1与CC2组合捕获高电平宽度,可以选择捕获PWM1P或者PWM2P引脚信号。
如果你需要捕获两路高电平信号,另外 ...
我刚学用高级PWM。你发来的例程我也看不懂呀,{:ganga:},我写的代码也是抄官方例程的。你帮我看看我的代码对不对?有哪里是错误的,谢谢!这个项目有点急{:baoquan:} 乘风飞扬 发表于 2026-4-16 12:06
CC1与CC2组合捕获高电平宽度,可以选择捕获PWM1P或者PWM2P引脚信号。
如果你需要捕获两路高电平信号,另外 ...
您好,您给的资料太多了,有没有只是捕获P1.0引脚的?代码太多,看得太乱了。{:fadai:} eiaydxyb 发表于 2026-4-16 15:17
您好,您给的资料太多了,有没有只是捕获P1.0引脚的?代码太多,看得太乱了。 ...
可以用一下AiCube的自动生成程序来进行捕获,会简单很多
或者可以看一下技术手册里面的例程,里面的例程比较简短,只有是来行,比较好看懂的
王昱顺 发表于 2026-4-16 15:18
可以用一下AiCube的自动生成程序来进行捕获,会简单很多
或者可以看一下技术手册里面的例程,里面的例程比 ...
AiCube在官网可以下载吗? eiaydxyb 发表于 2026-4-16 15:32
AiCube在官网可以下载吗?
ISP软件里就可以直接打开了
王昱顺 发表于 2026-4-16 15:48
ISP软件里就可以直接打开了
好的,谢谢!
页:
[1]