各位好,由于项目要求我需要利用msp430f5438a产生这样的脉冲信号来控制电路:连续产生5个脉冲信号,每个脉冲信号的周期都是8us,其中高电平长度为3.5us,接着产生1960us的低电平,以此循环。在之前调试过程中我尝试直接用定时器定时,或者是利用定时器产生PWM波这两种方法来产生上述信号。在直接利用定时器定时的时候,只能做到产生高低电平均为4us的方波信号,要想产生高电平为3.5us且周期为8us的脉冲信号时,单片机开始跑飞,只能产生连续的波形而没有那1960us的低电平,且连续波形的周期也不再是8us。更改脉冲信号高电平部分的计数值时,时钟频率变得不可控。原先计数值为32时可定时4us,但是30的时候却不是3.75us而是3.5us。在尝试产生pwm波时,可以很好的产生高电平为3.5us,周期为8us的连续pwm波,但是在尝试结合中断来产生1960us的低电平时,单片机跑飞。这个是我初始化时钟的程序:void Init_Clk(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
P5SEL |= 0x0C; // 端口功能选择振荡器
UCSCTL6 &= ~XT2OFF; // 振荡器使能
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG;
}while(SFRIFG1&OFIFG); // 检测振荡器错误标志
UCSCTL6 |= XT2DRIVE0 + XT2DRIVE1; // XT2 驱动模式 24~32MHz
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK = MCLK = XT2
}使用定时器A,分频系数设为1 ,设定计数值为32的时候可以定时4us。我的问题是:1. 如果用定时器直接定时,怎样才能改变时钟频率不定的情况?2. 如果用pwm波的方式,怎样结合中断,在产生5个方波信号以后,重新给定时器写入计数值来产生1960us的低电平
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1定时器时钟选择的是ACLK还是SMCLK?
2既然是PWM模式,不是设置好周期和占空比就可以了嘛,为什么还要用中断
一个设置成你说的8US周期,3.5US高电平,
另一个设置成40US高电平,2000US周期
一周热门 更多>