adnega 11 8 июня, 2012 Опубликовано 8 июня, 2012 · Жалоба У меня работает в режиме Мастер при такой конфигурации. Правда, без использования стандартной библиотеки. //----------------------------------------------------------------------------- // void init_SPI2(void) //----------------------------------------------------------------------------- void init_SPI2(void) { SPI2->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0; SPI2->CR2 = SPI_CR2_SSOE; SPI2->CR1 = SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0; } //----------------------------------------------------------------------------- // void __inline init_SYSTEM(void) //----------------------------------------------------------------------------- void __inline init_SYSTEM(void) { RCC->AHB1ENR = RCC_AHB1ENR_GPIOBEN; RCC->APB1ENR = RCC_APB1ENR_SPI2EN; } //----------------------------------------------------------------------------- // void __inline init_GPIO(void) //----------------------------------------------------------------------------- void __inline init_GPIO(void) { GPIOB->MODER = GPIO_MODER_MODER13_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER15_1 GPIOB->AFR[1] = (5 << ((13 - 8) << 2)) | (5 << ((14 - 8) << 2)) | (5 << ((15 - 8) << 2)); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 8 июня, 2012 Опубликовано 8 июня, 2012 · Жалоба ну хоть дернулся пин PB15! какой то сдвиг, гдето еще чегото не хватает.. читаю даташит: NSS output enabled (SSM = 0, SSOE = 1) This configuration is used only when the device operates in master mode. The NSS signal is driven low when the master starts the communication and is kept low until the SPI is disabled. теперь понятно почему надо было делать: SPI_SSOutputCmd(SPI2, ENABLE); это и включает SSOE = 1 и почему надо было: spi2.SPI_NSS = SPI_NSS_Hard; а это ставит бит SSM = 0 ну тогда же у меня все правильно, что там еще может быть? напомню еще раз: клок идет вверх на Вдд и стоит там, а МОСИ идет на Вдд и опускается на ноль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 11 июня, 2012 Опубликовано 11 июня, 2012 (изменено) · Жалоба Вобщем получилось наконец-то завести SPI2. Кстати, этот NSS пин вообще не нужен если мне не надо явно выбирать другой чип. использовал только MOSI и SCK. вот код если еще кому надо: int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */ uint8_t d0 = 0xd9; // 11011001, test data0 // enable SPI2 clock ((RCC_TypeDef *) (RCC_BASE))->APB1ENR |= RCC_APB1ENR_SPI2EN; // enable GPIOB clock ((RCC_TypeDef *)(RCC_BASE))->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // GPIOB configuration ((GPIO_TypeDef *)(GPIOB_BASE))->MODER |= (GPIO_MODER_MODER13_1 | GPIO_MODER_MODER15_1 ); ((GPIO_TypeDef *)(GPIOB_BASE))->OTYPER |= 0x00; ((GPIO_TypeDef *)(GPIOB_BASE))->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR13_1 | GPIO_OSPEEDER_OSPEEDR15_1 ); ((GPIO_TypeDef *)(GPIOB_BASE))->PUPDR |= 0x00; //((GPIO_TypeDef *)(GPIOB_BASE))->IDR |= RCC_AHB1ENR_GPIOBEN; //((GPIO_TypeDef *)(GPIOB_BASE))->ODR |= RCC_AHB1ENR_GPIOBEN; //((GPIO_TypeDef *)(GPIOB_BASE))->BSRRL |= RCC_AHB1ENR_GPIOBEN; //((GPIO_TypeDef *)(GPIOB_BASE))->BSRRH |= RCC_AHB1ENR_GPIOBEN; //((GPIO_TypeDef *)(GPIOB_BASE))->LCKR |= RCC_AHB1ENR_GPIOBEN; ((GPIO_TypeDef *)(GPIOB_BASE))->AFR[1] |= (0x500000 | 0x50000000); // configure SPI2 ((SPI_TypeDef *) (SPI2_BASE)) -> CR1 |= (SPI_CR1_SPE | SPI_CR1_CPOL | SPI_CR1_CPHA | SPI_CR1_MSTR | SPI_CR1_BR_1 | SPI_CR1_SSM | SPI_CR1_SSI); // transmit the test data while ( ( (((SPI_TypeDef *) (SPI2_BASE)) -> SR) & 0x2 ) == RESET) { // wait until TXE bit is 1 } ((SPI_TypeDef*)(SPI2_BASE)) -> DR = d0; while (1) {} } Изменено 11 июня, 2012 пользователем IgorKossak [codebox] для длинного кода!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться