We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have configured my STM32F407 Discovery Board as slave with a STM8S00 . The data sent by Master on MOSI is totally different from that which that my slave is receiving I have observed that data on the Digital Oscilloscope. Setting in the master is as follows: CPHA=1 CPOL=1 Master sends at Negative edge and samples at positive edge. SPI Clock is 4 MHz. It is also sending back different data that sent by a STM32F407 Master. Example of Data: Actual Data Sent By Master: (MSB First) Observed on Digital Oscilloscope 0000 0111 -> 1110 0000 (0xE0 Expected to be received) 0101 0000 -> 0000 1010 (0x0A) 0000 1000 -> 0001 0000 (0x10) 1010 0101 -> 1010 0101 (0xA5)
But Slave is providing following Data: (I don't know which Byte correspond to that sent by Master) 0100 1011 (0x4B) 0000 1111 (0xF) 1010 0000 (0xA0) 0001 0001 (0X11)
Here is the code of main file:
#include "stm32f4_discovery.h" int i=0, IT_St=0; int Rx_Buf[1000]; void SPI_TR(void);; void SPI_TR(void) { GPIO_InitTypeDef GPIO_SPI; SPI_InitTypeDef My_SPI; NVIC_InitTypeDef nvic; EXTI_InitTypeDef itr; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //PA4=NSS PA5=SCK PA6=MISO PA7=MOSI GPIO_SPI.GPIO_Pin=GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_SPI.GPIO_Mode=GPIO_Mode_AF; GPIO_SPI.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_SPI.GPIO_OType=GPIO_OType_PP ; GPIO_SPI.GPIO_Speed=GPIO_Speed_100MHz; GPIO_Init(GPIOA, &GPIO_SPI); GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); nvic.NVIC_IRQChannel=SPI1_IRQn; nvic.NVIC_IRQChannelCmd = ENABLE; nvic.NVIC_IRQChannelPreemptionPriority= 0; NVIC_Init(&nvic); My_SPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex; My_SPI.SPI_Mode = SPI_Mode_Slave; My_SPI.SPI_DataSize = SPI_DataSize_8b; My_SPI.SPI_CPOL = SPI_CPOL_High; My_SPI.SPI_CPHA = SPI_CPHA_2Edge; My_SPI.SPI_NSS = SPI_NSS_Hard; // Configure it make high to low transition //My_SPI.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_16; My_SPI.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &My_SPI); SPI_Cmd(SPI1, ENABLE); } void SPI1_IRQHandler() { Rx_Buf[i]=SPI_I2S_ReceiveData(SPI1); //i=SPI_I2S_ReceiveData(SPI1); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_RXNE); SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_RXNE); SPI_I2S_SendData(SPI1, FIFO_STATUS_RX_FULL); i++; if(i>=1000) i=0; } int main(void) { SPI_TR(); while(1) { } }