是否有人可以帮助我如何将 MSP430G2553与 Winbond SPI (W25Q80BV)连接? 我正在尝试使用 USCI。 我自己尝试过、也尝试在线参考示例、但每当我在调试模式下运行时、我定义了用于存储来自 SPI 的值的变量、只读 255 "xff"。 是否有任何人拥有可以提供帮助的工作代码?
这是我目前使用的代码(请记住、它实际上并未进行优化、因为我只是想让某个代码正常工作):
#include "msp430g2553.h";
unsigned char address sValue;
/*
* main.c
*
int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
initspi();
address 值=读取(0x00);
while (1);
返回0;
}
//为 SPI 配置 MSP430
/**
*使用 UCA0
*
* MSP_PIN 1.1 = SPI_PIN 2 (数据输出)
* MSP_PIN 1.2 = SPI_PIN 5 (数据输入)
* MSP_PIN 1.4 = SPI_PIN 6 (CLK)
* MSP_PIN 1.5 = SPI_PIN 1 (CS)
*
*
void initSPI(){
// PIN 设置
P1OUT |= BIT5;
P1DIR |= BIT5;
P1SEL = BIT1 | BIT2 | BIT4;
P1SEL2 = BIT1 | BIT2 | BIT4;
/**
*设置 UCACTL (UCA 控制)寄存器
*这会将微控制器设置为使用 SPI 接口
*
UCA0CTL1 = UCSWRST;//复位模式
UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;// 3引脚8位 SPI 主器件(MOST SIG 位优先)
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x02;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制
UCA0CTL1 &=~UCSWRST;//初始化 USCI 状态机
}
unsigned char read (unsigned char regAddress){
// CS High
//P1OUT |= BIT5;
// CS Low
P1OUT &=~BIT4;
/**
*向 SPI 发送读取命令
*
while (!(IFG2 & UCA0TXIFG));// TX 缓冲区准备就绪?
UCA0TXBUF = 0x03;//告知 SPI 我们要执行读取(03h)
/**
*发送要在其中获取数据的地址
*
while (!(IFG2 & UCA0TXIFG));// TX 缓冲区准备就绪?
UCA0TXBUF = regAddress;
INT 计数;
/**
*发送虚拟位
*
*
对于(count = 0;count < 7;count++){
while (!(IFG2 & UCA0TXIFG));// TX 缓冲区准备就绪?
UCA0TXBUF = 0x00;
}
unsigned char 结果;
/**
*从 SPI 读取值
*
*
while (!(IFG2 & UCA0RXIFG));// RX buffer ready?
结果= UCA0RXBUF;
//提起 CS 以取消选择驱动器
P1OUT |= BIT5;
返回结果;
}
/********* 结束代码
以下是 Winbond SPI https://cdn-shop.adafruit.com/datasheets/W25Q80BV.pdf 的规格
我从规范中获取了下一个屏幕截图、因为它解释了 SPI 读取过程:
最后-这里是我在 SPI 上存储的内容的一部分。 长远来说、我的目标是尝试从第一个位开始读取每个位、直到达到一定的长度。

