请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R 您好!
我需要通过 SPI (3线制)发送和接收数据。
在我的设置中、MSP432板是主器件、时钟设置、第一个字节和时钟极性现在没有区别。
我已经尝试了两种使用 SPI 的方法:
1)空骨头
。 。 。
void SPI_WriteByte (unsigned char Data){
while (!(UCB0IFG&UCTXIFG));
UCB0TXBUF = Data;
}
unsigned char SPI_ReadByte (void){
unsigned char Data;
while (!(UCB0IFG&UCRXIFG)));//将其置于"unsigned char SPI_ReadByte = Result (数据=相同或 UCB0IFF)后删除。
数据= UCB0RXBUF;
//UCA3IFG &=~UCRXIFG;
返回数据;
}
int main (void){
。 。 。
P1SEL0 |= BIT5 | BIT6 | BIT7;//设置为第二个功能。
UCB0CTLW0 |= UCSWRST;//**将状态机置于复位状态**
UCB0CTLW0 |= UCMST|UCSYNC|UCMSB;// 3引脚8位 SPI 主器件
//时钟极性高,MSB
UCB0CTLW0 |= UCSSEL_ACLK;// ACLK
UCB0BR0 = 0x01;///2、fBitClock = fBRCLK/(UCBRx+1)。
UCB0BR1 = 0;//
UCB0CTLW0 &=~UCSWRST;//**初始化 USCI 状态机**
while (1){
SPI_WriteByte (0x55);//此操作正常。 时钟生成、数据发送。
SPI_ReadByte ();//根本不生成时钟。 仅经过或 CPU 锁定。
}
。 。
.}
2) 2)使用 driverlib
。 。 。
//将
void SPI_WriteByte (byte Data){
SPI_transmitData (EUSCI_B0_MODULE、Data);
}
字节 SPI_ReadByte (void){
return SPI_receiveData (EUSCI_B0_MODULE);
}
const eUSCI_SPI_MasterConfig SpiMasterConfig =
{
EUSCI_B_SPI_CLOCKSOURCE_ACLK、 // ACLK 时钟源
32768、 // ACLK = LFXT = 32.768kHz
50万、 // SPICLK = 500kHz
EUSCI_B_SPI_MSB_FIRST、 // MSB 优先
EUSCI_B_SPI_PHASE_DATA_Captured_ONFIRST_Changed_On_Next、//相位
EUSCI_B_SPI_CLOCKPOLARITY_INACTION_LOW、//高极性
EUSCI_B_SPI_3引脚 // 3Wire SPI 模式
};
int main(){
。 。 。
CS_setExternalClockSourceFrequency (32768、0);
CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY);
CS_initClockSignal (CS_ACLK、CS_LFXTCLK_select、 CS_clock_divider 1);
/CS_startLFXT (CS_LFXT_Drive0);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、
GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7、GPIO_PRIMARY_MODULE_FUNCTION);
SPI_initMaster (EUSCI_B0_MODULE、&spiMasterConfig);
SPI_enableModule (EUSCI_B0_MODULE);
while (1){
SPI_WriteByte (0x55);//再次、按预期工作。
SPI_ReadByte ();//无时钟。 对 CLK 线不执行任何操作
。}
}
在这两种情况下、SPI_WriteByte 均按预期工作。 但我完全坚持 使用 SPI_ReadByte 函数。 SPI 主器件应在读取时生成时钟、但绝不会发生这种情况(我使用示波器检查线路)。 我一直在努力启用中断、更改时钟源、但似乎没有什么帮助。 这两个代码都是从 IAR 存储库中覆盖的示例。 大多数情况下、我只将 A3/A0更改为 B0。
对我来说、这是一个复杂的谜、为什么时钟不是在一个情况下生成的、而是在另一个情况下生成的。 我对 MSP 和 ARM 非常陌生。 从 AVR 上移开、这对我来说不是很明显。