This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5132:UCB0 SPI问题

Guru**** 2386620 points
Other Parts Discussed in Thread: MSP430F5132
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/664163/ccs-msp430f5132-ucb0-spi-problem

部件号:MSP430F5132

工具/软件:Code Composer Studio

您好,

我无法从MSP430F5132的SPI通道获得任何响应。 下面是我的应用程序的信息:

1)在MOSI引脚处没有输出。  

2)代码:

>>>>>> main.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

#include <string.h>
#include <stdio.h>
#include
"driverlib.h"
#include "MSP4_sdiarArray[20],charArrayID[6],cbuf1[1],cbuf1[1]


,cbuf1[1],cbuf2[1],cbuf1[1],buf1[1、buf1],1[f1[1],buf1[bbuf1],1[f1],buf1[f1],buf1[f1[1],buf1[bbuf1[1],f1[,f1[,f1],buf1[f1],buf1[bbuf1[,fbuf1],f1],fbuf1[,f1[,bufbuf1],f1[,fbufbufbuf1[,f1],f1],f1[,buf1[,f1[,f1[,fbufbufbuf1],f1],







//停止WDT
WDT_A_HOLD (WDT_A_BASE);

//Status1 STATUS2输出
GPIO _setAsOutputPin (GPIO端口P3,GPIO _PIN0 + GPIO _PIN1);
//Status1 STATUS2低
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN0 + GPIO _PIN1);

//RS485 de Re
GPIO _setAsOutputPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
//恢复低电平
GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);

//UART - RS485
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P1, GPIO _PIN1 + GPIO PIN2);

//SPI - ste = 1.0
SPI_init();
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);//+ GPIO _PIN3 + GPIO _PIN4 + GPIO _PIN5);
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);//+ GPIO _PIN3 + GPIO _PIN4 + GPIO _PIN5);
//gPIO_setOutputHighOnPin (gPIO_PORT_P1,gPIO_PIN0);



//Baudrate = 9600,时钟频率= 1.048MHz
//UCBRx =109,UCBRFx =0,UCBRSx =2,UCOS16 =0 -->从MSP430F5529示例复制
USI_A_UART_initParam ={0};
param.selectClockSource = USI_A_UART_CLOCKSOURCE_SMCLK;
Param.clockPrescalar = 109;
Param.firstModReg = 0;
param.secondModReg = 2;
Param.parity = USI_A_UART_NO_PARTIC;
Param.msborLsbFirst = USI_A_UART_LSB_FIRST;
StopBits的Param.Number= USI_A_UART_OON_STOP_BIT;
Param.uartMode = USI_A_UART_MODE;
Param.oversampling = USI_A_UART_LLOW频率_BAUDRATE_RELEA;

IF (STATUS_FAIL == USI_A_UART_INIT (USI_A0_BASE,&param))
{
返回;
}

//启用UART模块以进行操作
USI_A_UART_ENABLE (USI_A0_BASE);

//启用接收中断
USI_A_UART_CLEARInterrupt (USI_A0_BASE,USI_A_UART_receive中断);
USI_A_UART_enableInterrupt (USI_A0_BASE,USI_A_UART_receive中断);


//CIHAZ ID
CharArrayID[0]='4';
CharArrayID[1]='6';
CharArrayID[2]='0';
CharArrayID[3]='7';
CharArrayID[4]='5';
CharArrayID[5]='1';



//ads8684 ayarlar
///reset
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x8500);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);

//AUTO_SEQ_EN
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
SPI_transfer16 (0x01FF);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);


//通道断电->全部打开
/*GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
SPI_transfer16 (0x0200);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);*/


//通道1 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0505);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);

//通道2 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0605);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);

//通道3 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0705);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);

//通道4 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0805);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);

GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0xA000);
SPI_transfer16(0x0000);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);




__enable_interrupit();

而(1){
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN0);
GPIO _setOutputHighOnPin (GPIO端口P3,GPIO _PIN1);
__DELAY周期(10.5万);
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN1);
GPIO _setOutputHighOnPin (GPIO端口P3,GPIO _PIN0);
__DELAY周期(10.5万);

__disable_interrupt ();



/CH1.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buF1 = SPI_TRANSFER (0x00);
buf2 = SPI_transfer (0x00);
buf3 = SPI_transfer (0x00);
buf4 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
/CH2.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf5 = SPI_transfer (0x00);
buf6 = SPI_transfer (0x00);
buf7 = spI_transfer (0x00);
buf8 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
/CH3.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf9 = SPI_transfer (0x00);
buf10 = SPI_transfer (0x00);
buf11 = SPI_transfer (0x00);
buf12 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
//CH4
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf13 = SPI_transfer (0x00);
buf14 = SPI_transfer (0x00);
buf15 = SPI_transfer (0x00);
buf16 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);

ltoa (buF1,cbuF1);
ltoa (buf2,cbuf2);
ltoa (buf3,cbuf3);
ltoa (buf4,cbuf4);
ltoa (buf5,cbuf5);
ltoa (buf6,cbuf6);
ltoa (buf7,cbuf7);
ltoa (buf8,cbuf8);
ltoa (buf9,cbuf9);
ltoa (buf10,cbuf10);
ltoa (buf11,cbuf11);
ltoa (buf12,cbuf12);
ltoa (buf13,cbuf13);
ltoa (buf14,cbuf14);
ltoa (buf15,cbuf15);
ltoa (buf16,cbuf16);

buf1 = 0;
buf2 = 0;
buf3 = 0;
buf4 = 0;
buf5 = 0;
buf6 = 0;
buf7 = 0;
buf8 = 0;
buf9 = 0;
buf10 = 0;
buf11 = 0;
buf12 = 0;
buf13 = 0;
buf14 = 0;
buf15 = 0;
buf16 = 0;




GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
__DELAY周期(1.8万);

USI_A_UART_SDEARData (USI_A0_BASE,'A');
USI_A_UART_SDEARData (USI_A0_BASE,'C');
USI_A_UART_SDEARData (USI_A0_BASE,'K');
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[0]);
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[1];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[2];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[3];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[4];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[5]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuF1[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf2[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf3[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf4[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf5[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf6[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf7[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf8[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf9[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf10[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf11[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf12[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf13[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf14[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf15[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf16[0]);
USI_A_UART_HESNData(USCI_A0_base,'\n');



__DELAY周期(1.8万);
GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
__enable_interrupt ();
}
}//**************************************************************************************************************


////
这是USI_A0中断向量服务例程。
////************************************************************************************************



#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_A0_vector
__interrupt
#Elif defined(__Gnuinu_)
__attribute__((interrupt (USI_A0_vector))
#endif
void USI_A0_ISR(void)
{
Switch(__偶 数_in_range(UCA0IV,4))
{
//矢量2 - RXIFG
案例2:
receivedData = USI_A_UART_receiveData (USI_A0_BASE);

/*if(receivedData !='#') //检查值
{
IF ((c == 0 && receivedData =='4')||(c == 1 && receivedData =='6')||(c == 2 && receivedData =='0')||(c >= 3 &c < 13))
{
charArray[c]=已接收数据;
C++;
CharReceived = 0;
其他
{
C = 0;
CharReceived = 0;
}
其他{
//c = 0;
//gPIO_ToggleOutputOnPin (gPIO_PORT_P7,gPIO_PIN1);
CharReceived = 1;
}*/
中断;
默认值:break;
}
}

>>>>>> MSP430_SPI.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

#if defined(__MSP430_has _USI_B0__)&& defined(SPI_DRIVER_USSCI_B)
void SPI_init()
{/*
	为MSP430器件上的USCI_B配置端口*/
	#ifdef __SEL MSP430F5172
	P1SEL || BIT3 | BIT4 | BIT5;
	#endif
	#ifdef #ifdef_B */MSP430F5172|
	BIT1=
	
#ifdef __MSP430F5132
P1SEL || BIT3 | BIT4 | BIT5;
#endif

	/* USSCI-B specific SPI setup */

	UCB0CTL1 |= UCSWRST;
	UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCSODE_0 | UCSYNC;// SPI模式0,主
	UCB0BR0 = 0x01;//
	CBR1与SMCLK = UCSC0相同的速度
	;UCBEL_0 //时钟= SMCLK,清除UCSWRST并启用USI_B模块


。}

UINT8_t SPI_TRANSFER (uint8_t inb)
{
	UCB0TXBUF = inb;
	while (!(UCB0IFG & UCRXIFG))//等待RXIFG,表示通过SOMI接收到的远程字节
		;
	返回UCB0XBUF;
}

uint16_CBt_transfer16(uint16_16;uintw_8

	
	= uint8;uintw_8

	
	while (!(UCB0IFG & UCRXIFG)
		;
	retw8[1]= UCB0RXBUF;
	UCB0TXBUF = inw8[0];
	while (!(UCB0IFG & UCRXIFG);
		
	retw8[0]= UCB0RXBUF;
	retw;
}

3) UART输出到控制台

4)示意图:

请您帮助说明SPI不工作的原因。

此致,

奥努尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Onur:

    请花些时间阅读 我们针对MSP430TmMCU 上常见eUSCI和USCI串行通信问题的流行解决方案应用报告。 具体来说,第4节“常见SPI通信问题”应能帮助您解决问题。 接下来,我建议您先熟悉我们的一些SPI代码示例,以验证您的连接是否正确等,然后再转到您的代码。

    此致,

    詹姆斯

    MSP客户应用程序