Последовательность включения SPI STM32

avatar
leo_software
8 августа 2021 в 16:09
116
0
0

Я пытаюсь настроить периферийное устройство SPI на своей плате Nucleo-f303K8 без использования драйверов HAL в качестве небольшого обучающего упражнения. Я включил spi clk в регистре RCC и альтернативный режим для gpios, так что все должно быть в порядке. Я следовал шагам, описанным в справочном руководстве, но когда я устанавливаю бит разрешения в регистре управления 1, бит ведущий/ведомый сбрасывается вместе с разрешением, но настройки скорости передачи данных и размера данных остаются. Может ли кто-нибудь найти какие-либо шаги, которые я пропустил в приведенном ниже коде?

//setup SPI peripheral
*spi_ctrl_1 |= (0x01 << 2);             //spi master mode set
*spi_ctrl_1 |= (0x03 << 3);             //spi speed set to fpclk/16
*spi_ctrl_2 |= (0x08 << 8);             //8 bit spi data size

*spi_ctrl_1 |= (0x01 << 6);             //enable spi
Источник
0___________
8 августа 2021 в 18:47
1

Используйте магические числа определений CMSIS и ваши (скорее всего, неправильные) аппаратные определения. CMSIS — это набор определений типов и определений, предоставляемых STM. Не имеет ничего общего с HAL

rel
8 августа 2021 в 20:41
0

Скорее всего, это не решение описанной проблемы с конфигурацией SPI, но чтобы установить размер данных SPI на 8 бит на STM32F303K8, SPIx_CR2[11:8] необходимо установить на 0b0111, что составляет 7, а не 8, см. Справочное руководство (RM0316) раздел 30.9.2 Регистр управления SPI 2 (SPIx_CR2).

rel
8 августа 2021 в 21:00
1

Также обязательно инициализируйте регистр до известного состояния, оператор присваивания побитового ИЛИ |= только устанавливает биты, никогда не очищает их. Биты из его предыдущего состояния могут все еще присутствовать (также проверьте значение сброса). Такая форма рекомендуется для инициализации отображаемого в память регистра: REG = (A | B...). Это гарантирует, что весь регистр инициализируется сразу. - Скорее всего, это не решение реальной проблемы с конфигурацией SPI, пожалуйста, опубликуйте более подробную информацию и, если возможно, пример воспроизводимого кода.

old_timer
11 августа 2021 в 22:47
0

нет оснований предполагать, что вы не в состоянии прочитать руководство и правильно указать адрес периферийного устройства. CMSIS добавляет целый слой неопределенности и риска, здесь в этом нет необходимости.

Ответы (0)