梁工
发表于 2024-1-14 23:02:34
flashlix 发表于 2024-1-14 20:31
楼主,请问两个问题:
1、在使用高速高级PWM进行捕获时,捕获数值的寄存器的时钟源是按系统时钟计时还是按 ...
1、在使用高速高级PWM进行捕获时,捕获数值的寄存器的时钟源是按PLL时钟。
2、PWMA、PWMB是两组相互独立的PWM,各自操作互不干涉,PWM7/8属于PWMB,PWM1P疏于PWMA,各自为政。
flashlix
发表于 2024-1-15 16:19:30
本帖最后由 flashlix 于 2024-1-15 16:23 编辑
收到,谢谢大师解惑。另外,请问下梁工,STC32G12K128用外部12M无源晶振 ±10ppm作为时钟源,PLL后时钟的精度咋样?有这方面的数据没有呢?
咫尺天涯
发表于 2024-2-25 22:10:59
学习了
sjh007
发表于 2024-11-12 16:44:21
我想问下 stc32能输出20mhz左右的方波信号吗,有实现过的大佬吗。
要求频率可调
神农鼎
发表于 2024-11-12 16:56:55
sjh007 发表于 2024-11-12 16:44
我想问下 stc32能输出20mhz左右的方波信号吗,有实现过的大佬吗。
要求频率可调
...
可以,要工作在 5V, STC32G8K64, 直接工作在 40MHz, 2分频输出时钟
sjh007
发表于 2024-11-12 18:58:41
神农鼎 发表于 2024-11-12 16:56
可以,要工作在 5V, STC32G8K64, 直接工作在 40MHz, 2分频输出时钟
哦,我想问下能不能输出可调占空比的pwm,比如输出20mhz,占空比可以改变寄存器值来控制的
zuodazuo
发表于 2025-6-17 09:44:43
梁工 发表于 2024-1-14 23:02
1、在使用高速高级PWM进行捕获时,捕获数值的寄存器的时钟源是按PLL时钟。
2、PWMA、PWMB是两组相互独立 ...
楼主,请教一下,我用的你的参考程序的配置,测出来的频率,用的还是系统时钟频率来计数的,不是pll的频率来计数的,请问怎么才能用pll的时钟给计数器计数呢?
梁工
发表于 2025-6-17 10:15:05
zuodazuo 发表于 2025-6-17 09:44
楼主,请教一下,我用的你的参考程序的配置,测出来的频率,用的还是系统时钟频率来计数的,不是pll的频率 ...
PLL个PWM时钟,请参考“板凳”楼层的程序。
zuodazuo
发表于 2025-6-17 13:29:12
zhp 发表于 2023-3-14 17:41
STC32G系列单片机的高速PWM可以和CPU工作在不同频率
STC32G12K128系列CPU最高工作频率可达35MHz
STC32G8K64 ...
楼主刚才的问题应该是解决了,144MHz作为计数器的基频,现在问题是,测量低一点的频率,计数器溢出,那么计数器溢出中断怎么配置的?WritePWMA((char)&PWMA_CR1, 0x03); //开始计时,允许计时器溢出更新中断这个配置对吗?中断里面 sta = ReadPWMA((char)&PWMA_SR1);
if(sta & 0X01)//计时器溢出事件中断
{
jishiyichunum++;
}这样检测对吗?实测没有效果
我是捕获cc1的周期的,中断程序如下:
/*捕获中断、事件更新中断*/
void PWMA_ISR() interrupt 26
{
u32 cnt;
u8 sta;
sta = ReadPWMA((char)&PWMA_SR1);
if(sta & 0X01)//计时器溢出事件中断
{
jishiyichunum++;
}
if(sta & 0X02)//CC1捕获中断
{
P07 = ~P07;
// PWMA_SR1 &=~0X02;
cnt = ReadPWMA((char)&PWMA_CCR1H);
cnt = (cnt<<8)+ReadPWMA((char)&PWMA_CCR1L)+jishiyichunum*0xffff;//CC1捕获周期宽度
zhuce_time_interval =cnt;
jishiyichunum = 0;
// TIM1CH1_CAPTURE_VAL= cnt;
// TIM1CH1_CAPTURE_num++;
}
WritePWMA((char)&PWMA_SR1, 0x00); //清除完成标志
}