Работаю без SPL и на данный момент с ней работать не хочу (тут, что было бы лучше писать не надо - все бессмысленно).
Собрался подключить по SPI другое устройство (ENC28J60), но тут возникла незадача: SPI Работать отказывается. Во время отладки посмотрел состояние регистра SPI1_CR1, и, как оказалось, бит SPE не выставлен, как, впрочем и MSTR.
Вот что выдает GDB по этому поводу (SPI1_CR1):
младший и старший байты регистра.
Код инициализации следующий:
Вообще та ли последовательность инициализации, или что-то надо менять. Может где ошибка закралась?
Раздел: STM32
Собрался подключить по SPI другое устройство (ENC28J60), но тут возникла незадача: SPI Работать отказывается. Во время отладки посмотрел состояние регистра SPI1_CR1, и, как оказалось, бит SPE не выставлен, как, впрочем и MSTR.
Вот что выдает GDB по этому поводу (SPI1_CR1):
x/2tb 0x40013000
0x40013000: 00000010 00000001
младший и старший байты регистра.
Код инициализации следующий:
void SetSPI (void)
{
// разрешаем тактирование порта A
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
// настраиваем пины 4, 5, 6, 7 как выходы альтернативной функции
GPIOA->MODER &= ~(GPIO_MODER_MODER4 | GPIO_MODER_MODER5 | GPIO_MODER_MODER6 | GPIO_MODER_MODER7);
GPIOA->MODER |= GPIO_MODER_MODER4_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
// настройка скорости работы
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_1 | GPIO_OSPEEDER_OSPEEDR5_1 | GPIO_OSPEEDER_OSPEEDR6_1 | GPIO_OSPEEDER_OSPEEDR7_1;
// настройка альтернативных функций
// сначала сбрасываем, затем устанавливаем другие значения
// AF0 - для всех регистров gpio - SPI1
GPIOA->AFR[0] = 0;
// разрешаем тактирование SPI
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
// включаем модуль SPI1.
// максимальная скорость передачи - 24МБод
// делаем ведущим
// полярность - отрицательная.
SPI1->CR1 = SPI_CR1_CPOL | SPI_CR1_MSTR | SPI_CR1_SSI;
// размер отправляемых и принимаемых данных по SPI равен 8 бит
SPI1->CR2 = SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2;
// далее включаем SPI
SPI1->CR1 |= SPI_CR1_SPE;
}
Вообще та ли последовательность инициализации, или что-то надо менять. Может где ошибка закралась?
Раздел: STM32