2011-10-01 06:56 AM
Hi,
I'm triyng to transmit data from an accelerometer to STM32L-Discovery and send this data from STM32L-Discovery to PC using SPI and RS232This is my initialization code
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
GPIO_InitStruct1.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct1.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct1.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_Init( GPIOB, &GPIO_InitStruct1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
SPI_InitTypeDef SPI_InitStruct1;
SPI_InitStruct1.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;
SPI_InitStruct1.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct1.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct1.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct1.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct1.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct1.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStruct1.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct1.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStruct1);
SPI_Cmd(SPI2, ENABLE);
and this is the code for trasmit from accelerometer to STM32Lwhile(1){
uint16_t Data;
Data = SPI_I2S_ReceiveData(SPI2);}Now, could someone tell me if there are examples, libraries or other that I can use to receive data and show it onto the PC?Thanks2011-10-01 11:36 AM
''could someone tell me if there are examples, libraries or other that I can use''
Yes: There is the STM32 Standard Peripheral Library, and it includes a load of examples. At the top of the forum (the list of topics) it says,
''More product information, tools and resources can be found on ST website: see
http://www.st.com/internet/evalboard/product/250990.jsp
,
http://www.st.com/stonline/stappl/st/mcu/class/1734.jsp
and
http://www.st.com/stonline/stappl/st/evalboard/family/116.jsp
''.
Have you visited any of those links?
2011-10-03 09:10 AM
Pretty sure that reading SPI data just reads an internal register. You need to send something (pad/junk data) out to generate clocks to fill that register, and you also need to clear and check that it actually received the data into the register.
Spinning in a loop with SPI_I2S_ReceiveData(SPI2) is most assuredly not going to work. Wouldn't something like this be more appropriate? if (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == SET) // Clear potentially pending Rx bit SPI_I2S_ReceiveData(SPI2); // Clear Rx bit, discarding data while(1) { uint16_t Data; /* Wait for SPI2 to be ready to send new data */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); /* Send SPI2 data */ SPI_I2S_SendData(SPI2, 0x00); // Junk/Pad /* Wait for SPI2 data reception */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); /* Read SPI2 received data */ Data = SPI_I2S_ReceiveData(SPI2); }2011-11-24 01:28 PM
And now it works?
2011-11-25 06:06 AM
And now it works?
You must be new here, this is a typical forum, 99% ask questions and leave.