/********************初始化SPI********************/
void Init_SPI0(void)
{
P3SEL = 0x0E; //setup P3 for SPI mode
P3DIR |= BIT0;
UCB0CTL0 = 0x49; //Polarity,Master,8-bit, 3-Pin SPI 01001001
UCB0CTL1 = UCSSEL1 + UCSWRST; //SMCLK
UCB0BR0 = 0x82; //setup baud rate,9600
UCB0BR1 = 0x06;
UCA0CTL1 &= ~UCSWRST; //SPI EnablE
}
//******************************************************************************
// SPI_Send_OneByte,发送单个字节数据
//******************************************************************************
void SPI_Send_OneByte(uchar Send_Data)
{
P3OUT &= ~BIT0; //STE = 0
UCB0TXBUF = Send_Data; //发送一个字节
while((IFG2 & UCB0TXIFG)==0); //等待发送完成,检测UCB0TXIFG位
P3OUT |= BIT0; //STE = 1
}
//******************************************************************************
// SPI_Receive_OneByte,SPI接收单个字节
//******************************************************************************
uchar SPI_Receive_OneByte(void)
{
uchar ReceiveByte;
P3OUT &= ~BIT0;
UCB0TXBUF = 0xFF; //发送一个字节
while((IFG2 & UCB0RXIFG) == 0);
ReceiveByte = UCB0RXBUF;
P3OUT |= BIT0;
return ReceiveByte;
}
msp430f47187芯片的SIMO口的时序图如下图所示,完成一个字节的传输后不会将SIMO口上拉,并直接传送下一个字节
但是MSP430F149芯片在相同的配置下SIMO口的数据传送:每发送一个字节数据就自动将SIMO口置1并延时,如下图所示
我用149芯片发送数据后SOMI口能接收到正确的数据,但是用47187就是不行。
这两个芯片内部的架构是不是不一样?接收到的数据不正确和这两个发送波形不完全吻合有关系吗?
灰小子:
msp430f47187芯片内的是USCI模块,MSP430F149的是USART
硬件结构是不同的,配置起来也不一样。USCI模块功能更强大
Chunyan Zhu:
回复 灰小子:
嗯嗯,了解了。那我两个芯片发送到USB118AD模块的数据都是0xaa,0xbb……….区别就是47187是直接发送第二个数据,F149是会间隔一段时间发送第二个数据。两者的波特率设置也都是一样的,为什么一个F149能成功通信,47187就不能正确接收数据?