SPI Slave de l'installation sur la carte STM32F4
Je suis en train de communiquer entre deux STM32F4 discovery conseils via SPI dans Master & Slave. J'ai déjà le code pour le maître, mais je suis un peu confus sur les changements que je dois faire sur le SPI d'initialisation pour l'esclave.
Je tiens également à mettre en œuvre une interruption à chaque fois que le maître est l'envoi de données, plutôt que d'avoir l'esclave sondage la RXNE registre de tous les temps. Cependant, je ne suis pas sûr de l'exacte des configurations pour les NVIC pour le SPI.
Ci-dessous est le maître du code de configuration
void init_SPI1(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
SPI_InitTypeDef SPI_InitStruct;
//enable clock for used IO pins
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* configure pins used by SPI1
* PA5 = SCK
* PA6 = MISO
* PA7 = MOSI
*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//connect SPI1 pins to SPI alternate function
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
//enable clock for used IO pins
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
/* Configure the chip select pin
in this case we will use PE7 */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIOE->BSRRL |= GPIO_Pin_7; //set PE7 high
//enable peripheral clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
/* configure SPI1 in Mode 0
* CPOL = 0 --> clock is low when idle
* CPHA = 0 --> data is sampled at the first edge
*/
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //set to full duplex mode, seperate MOSI and MISO lines
SPI_InitStruct.SPI_Mode = SPI_Mode_Master; //transmit in master mode, NSS pin has to be always high
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; //one packet of data is 8 bits wide
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; //clock is low when idle
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; //data sampled at first edge
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft | SPI_NSSInternalSoft_Set; //set the NSS management to internal and pull internal NSS high
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //SPI frequency is APB2 frequency /4
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;//data is transmitted MSB first
SPI_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE); //enable SPI1
}
Le manuel de référence indique que j'ai besoin de la CPOL et de l'ACSP bits pour être configuré de la même que le maître, c'est également vrai pour le MSB/LSB format de trame. En dehors de cela, je ne suis pas sûr de savoir comment configurer le reste.
OriginalL'auteur user2253922 | 2013-12-02
Vous devez vous connecter pour publier un commentaire.
Vous devez changer de mode de
SPI_Mode_Slave
(en passant,SPI_Mode_Master
impliqueSPI_NSSInternalSoft_Set
), jeu deSPI_NSS
basé sur l'esclave sélectionnez la méthode que vous allez utiliser:SPI_NSS_Hard
, configurer nip commeAF/OD
avec pull-up (si vous n'avez pas externe résistance de pull-up) et le connecter àAF
à l'aide deGPIO_PinAFConfig
.SPI_NSS_Soft
: il sera automatiquement sélectionné (si vous ne définissez pasSPI_NSSInternalSoft_Set
).EXTI
pour recevoir interruption esclave de sélection et de réinitialisation interneNSS
avecSPI_NSSInternalSoft_Reset
par le logiciel.Le dernier est obsolète, c'est de la bidouille.
Donc, pour obtenir de configuration simple d'utilisation
NSS_Soft
(définitivement sélectionné). Si vous avez plus de 1 esclave, utilisezNSS_Hard
.Aussi, vous devez configurer les GPIO.
SCK
etMOSI
devrait êtreAF/PP
sorties master et AF entrées sur l'esclave;MISO
devrait êtreAF
d'entrée sur le master etAF/PP
de sortie sur l'esclave;NSS
devrait êtreAF
d'entrée sur l'esclave.OriginalL'auteur Konstantin Gribov