Здравствуйте друзья! Нужна помощь в поимке особо опасной ошибки, скрывающейся в глубинах моего кода. Пытаюсь настроить SPI в режиме мастера и передать простой код. При отладке в KEIL'е все регистры встают на место, а вот при попытке записать данные в SPI1-DR ничего не происходит: регистр как был пустой, так и остался. Пытался брать примеры из интернета - тоже не отсылается ничего. Спасибо! P.S. хотелось бы реализовать всё без std_periph
CODE
#include "stm32f10x.h"
void InitAll(void);
void InitAll(void)
{
//Clock source
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
//Initial GPIO
//SPI1_NSS alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF12;
GPIOB->CRH |=GPIO_CRH_CNF12_1;
GPIOB->CRH &=~GPIO_CRH_MODE12;
GPIOB->CRH |=GPIO_CRH_MODE12_1 | GPIO_CRH_MODE12_0;
//SPI1_SCK alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF13;
GPIOB->CRH |=GPIO_CRH_CNF13_1;
GPIOB->CRH &=~GPIO_CRH_MODE13;
GPIOB->CRH |=GPIO_CRH_MODE13_1 | GPIO_CRH_MODE13_0;
//SPI1_MISO input with pull-up/down
GPIOB->CRH &=~GPIO_CRH_CNF14;
GPIOB->CRH |=GPIO_CRH_CNF14_1;
GPIOB->CRH &=~GPIO_CRH_MODE14;
//SPI1_MOSI alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF15;
GPIOB->CRH |=GPIO_CRH_CNF15_1;
GPIOB->CRH &=~GPIO_CRH_MODE15;
GPIOB->CRH |=GPIO_CRH_MODE15_1 | GPIO_CRH_MODE15_0;
//SPI1_INIT
SPI1->CR1 |=SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_SPE;
}
int __main(void)
{
InitAll();
while(1)
{
SPI1->DR =0xFF;
}
}
Сообщение отредактировал IgorKossak - Apr 13 2014, 14:15
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!