|
Здоров народ! у меня STM32F4DISCOVERY и вот программка типа #include "stm32f4xx.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h"
int main(void) { uint8_t date= 0; //PortD RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); GPIO_InitTypeDef port; port.GPIO_Mode=GPIO_Mode_OUT; port.GPIO_OType=GPIO_OType_PP; port.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; port.GPIO_PuPd=GPIO_PuPd_NOPULL; port.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOD, &port);
//PortE GPIO_InitTypeDef portE; portE.GPIO_Mode=GPIO_Mode_OUT; portE.GPIO_OType=GPIO_OType_PP; portE.GPIO_Pin=GPIO_Pin_3; portE.GPIO_PuPd=GPIO_PuPd_NOPULL; portE.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE, &portE);
//PortA GPIO_InitTypeDef portA; portA.GPIO_Mode=GPIO_Mode_AF; portA.GPIO_OType=GPIO_OType_PP; portA.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; portA.GPIO_PuPd=GPIO_PuPd_DOWN; portA.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD, &portA); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
// PortSPI1 SPI_InitTypeDef PortSPI1; PortSPI1.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64; PortSPI1.SPI_CPHA=SPI_CPHA_2Edge; PortSPI1.SPI_CPOL=SPI_CPOL_High; PortSPI1.SPI_CRCPolynomial= 7; PortSPI1.SPI_DataSize=SPI_DataSize_8b; PortSPI1.SPI_Direction=SPI_Direction_2Lines_FullDuplex; PortSPI1.SPI_FirstBit=SPI_FirstBit_MSB; PortSPI1.SPI_Mode=SPI_Mode_Master; PortSPI1.SPI_NSS=SPI_NSS_Soft; SPI_Init(SPI1, &PortSPI1); SPI_Cmd(SPI1, ENABLE);
//READ DATE GPIO_ResetBits(GPIOE, GPIO_Pin_3); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0x23); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SET); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0xa3); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SET); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); GPIO_SetBits(GPIOE, GPIO_Pin_3);
//SEND DATE GPIO_ResetBits(GPIOE, GPIO_Pin_3); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0xa3); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SET); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0x00); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SET); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); GPIO_SetBits(GPIOE, GPIO_Pin_3); date = SPI_I2S_ReceiveData(SPI1);
if(date== 0x00){ GPIO_SetBits(GPIOD, GPIO_Pin_12);
} else { GPIO_SetBits(GPIOD, GPIO_Pin_14); }
while(1) {
} } все прошивается на ура , вроде все тип топ , как я понимаю я записал там в акселерометр по адресу 0x23 байт 0xa3 . вот в цикле if как я понимаю должен загораться красный светодиод но он, выдает пустоту. подскажите в чем я ошибся PLEASE .
|