单片机/MCU论坛
直播中

青sky

9年用户 1323经验值
擅长:模拟技术
私信 关注
[问答]

MSP430F149通过SPI读取ADXL362,一片选MSP430F149的SIMO口电压就被拉高是为什么?

现在的问题是当我要去读ADXL362时,先片选,但是一片选,430的SIMO口的电压就被拉高,但是它能在SMCLK时钟下发送正确的信号。程序如下,新生请谅解。我还附件了时钟与主机输出信号图,还有一张是片选和主机输出信号图。
#include
#define CPU_F ((double)8000000)
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
void Init_CLK(void)
{
   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
   unsigned int i;
   BCSCTL1  =~XT2OFF;
   do
   {
   IFG1  =~OFIFG;
   for(i=0xFF;i>0;i--);
   }
   while((IFG1   OFIFG));
   BCSCTL2 |=0x8B;
}
void UCB0_SPI(void)   //UCB0 SPI配置
{
   P5SEL |=0x0E;      //选择口5.1,5.2,5.3
    U1CTL |= SWRST;
    U1CTL |= CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
    U1TCTL |= CKPH + SSEL1 + STC;              // Polarity, SMCLK, 3-wire
    U1BR0 = 0x02;                             // SPICLK = SMCLK/2
    U1BR1 = 0x00;
    U1MCTL = 0x00;
    ME2 |= USPIE1;                            // Enable USART1 SPI mode
    U1CTL  = ~SWRST;
}
unsigned char ADXL_SPI_read()
{
   unsigned char k;
   P2DIR |=0x08;
   P2OUT  =~0x08;
   TXBUF1=0x0B;
   while (!(IFG2   UTXIFG1));
   TXBUF1=0x00;
   while (!(IFG2   UTXIFG1));
   TXBUF1=0xFF;
   while (!(IFG2   UTXIFG1));
   k=RXBUF1;
   P2OUT|=0x08;
   return k;
}
void main(void)
{
   P5SEL |=BIT5;
   P5DIR |=BIT5;
   Init_CLK();
   UCB0_SPI();
   while(1)
   {
   P2DIR |=0X10;
   P2OUT ^=0X10;
   ADXL_SPI_read();
     delay_ms(5);

回帖(1)

孙成红

2024-1-12 16:33:47
这个问题可能是由于片选引脚的问题导致的。当你片选ADXL362时,可能会有一个电平转换的问题,导致MSP430F149的SIMO口电压被拉高。

要解决这个问题,你可以尝试下面的步骤:

1. 确保ADXL362和MSP430F149之间的电平兼容性。检查ADXL362的数据手册,确认其数据输入电平的最小接收电压是多少,然后确认MSP430F149的SIMO口输出电平是否达到要求。

2. 检查片选引脚的电平转换电路。确认引脚连接正确,电平转换电路工作正常。如果有必要,可以使用逻辑电平转换器来实现正确的电平转换。

3. 检查片选拉高之前的代码逻辑。确认在片选之前没有其他代码或函数会修改或影响SIMO口的电平。

4. 使用示波器或逻辑分析仪检测片选引脚的电平变化。观察电平转换的细节,以确定是什么导致了SIMO口电压被拉高。

根据你附带的代码和时钟图,暂时无法判断具体原因。希望以上的步骤能对你的问题有所帮助。如果问题还存在,请提供更多详细信息,以便我们进一步调查。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分