Я пытаюсь настроить периферийное устройство 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
Используйте магические числа определений CMSIS и ваши (скорее всего, неправильные) аппаратные определения. CMSIS — это набор определений типов и определений, предоставляемых STM. Не имеет ничего общего с HAL
Скорее всего, это не решение описанной проблемы с конфигурацией SPI, но чтобы установить размер данных SPI на 8 бит на STM32F303K8,
SPIx_CR2[11:8]
необходимо установить на 0b0111, что составляет 7, а не 8, см. Справочное руководство (RM0316) раздел 30.9.2 Регистр управления SPI 2 (SPIx_CR2).Также обязательно инициализируйте регистр до известного состояния, оператор присваивания побитового ИЛИ
|=
только устанавливает биты, никогда не очищает их. Биты из его предыдущего состояния могут все еще присутствовать (также проверьте значение сброса). Такая форма рекомендуется для инициализации отображаемого в память регистра:REG = (A | B...)
. Это гарантирует, что весь регистр инициализируется сразу. - Скорее всего, это не решение реальной проблемы с конфигурацией SPI, пожалуйста, опубликуйте более подробную информацию и, если возможно, пример воспроизводимого кода.нет оснований предполагать, что вы не в состоянии прочитать руководство и правильно указать адрес периферийного устройства. CMSIS добавляет целый слой неопределенности и риска, здесь в этом нет необходимости.