大家好、
我尝试通过 SPI 通信将 MSP430FR5994 LP 与 LIS3DSH 加速计连接 、因为这是我第一次尝试使用这组硬件。 我正在以1MHz 的频率成功传输数据。 我要做的就是从地址0x0F 中读取寄存器(WHO _AM_I)、该地址是只读器件 ID、应始终返回0x3F。 因此、在发送虚拟字节为0x00后、它始终返回0x00。 我尝试发送其他测试数据、但它总是以0回复。 我不确定会出现什么问题。 请提前提供帮助、谢谢。
/*
*文件:main.c
*作者:Anand
*/
//***** 包括*****
#include
#include
#include "msp430fr5994.h"
#include "spi.h"
//***** 定义了*****
#define SPI_TIMEOUT 1234
uint16_t WHO _AM_I;
//***** 私有函数原型*****
void main (void);
void clock_init (void);
//***** 私有函数定义*****
/*
*@简短 XT1设置
*@参数无
*@返回无
*/
void clock_init (void)
{
CSCTL0_H = CSKKEY_H; //解锁 CS 寄存器--- |
// |
CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz |
CSCTL1 &=~DCORSEL; // |
// |
CSCTL2 = SELA_LFXTCLK;// LFXTCLK (如果可用)、否则为 VLOCLK |
CSCTL2 |= SELs__DCOCLK;// DCOCLK |
CSCTL2 |= SELM_DCOCLK;// DCOCLK |
// |
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //设置所有分频器 |
// |
CSCTL4 &=~LFXTOFF; //如果选择 LFXT,则 LFXT 打开|
// |
操作 // |
{ // |
CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志 |
SFRIFG1 &=~OFIFG; //
|} // |
while (SFRIFG1和 OFIFG); //测试故障标志 |
// |
CSCTL0_H = 0; //锁定 CS 寄存器--- |
}//
*@brief 这是 main 函数
*@param None
*@Return None
*/
void main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//配置 GPIO
spi_b_gpio_init ();
//初始化时钟
clock_init();
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//初始化用于 SPI 操作的 USCI_B1
spi_b_init ();
P8DIR = 0xFF; //端口8作为输出
P8OUT = 0x00; //端口8为低输出
UCB1TXBUF = 0x0F | 0x80; //发送字符| R/W 位
uint16_t SPI_TIMEOUT = SPI_TIMEOUT;
while (((UCB1STATW && UCBUSY)&&(SPI_TIMEOUT > 0))
{
SPI_TIMEOUT--;
}
if (SPI_TIMEOUT = 0)
{
printf ("SPI 1发送失败\n");
}
UCB1TXBUF = 0x00; //发送字符
SPI_TIMEOUT = SPI_TIMEOUT;
while (((UCB1STATW && UCBUSY)&&(SPI_TIMEOUT > 0))
{
SPI_TIMEOUT--;
}
if (SPI_TIMEOUT = 0)
{
printf ("SPI 2发送失败\n");
}
其他
{
printf ("SPI 2发送时间:%u \n"、SPI_TIMEOUT);
}
WHO _AM_I = UCB1RXBUF;
printf ("正在退出 main \n");
返回;
}





