Merge pull request #6446 from EmergReanimator/stm_spi_freq_fix
Fixed STM SPI frequency settings.
This commit is contained in:
commit
ebe442cd9d
@ -206,6 +206,10 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
spi_clock_enable(1 << (self->sck->periph_index - 1));
|
spi_clock_enable(1 << (self->sck->periph_index - 1));
|
||||||
reserved_spi[self->sck->periph_index - 1] = true;
|
reserved_spi[self->sck->periph_index - 1] = true;
|
||||||
|
|
||||||
|
// Always start at 250khz which is what SD cards need. They are sensitive to
|
||||||
|
// SPI bus noise before they are put into SPI mode.
|
||||||
|
const uint32_t default_baudrate = 250000UL;
|
||||||
|
|
||||||
self->handle.Instance = SPIx;
|
self->handle.Instance = SPIx;
|
||||||
self->handle.Init.Mode = SPI_MODE_MASTER;
|
self->handle.Init.Mode = SPI_MODE_MASTER;
|
||||||
// Direction change only required for RX-only, see RefMan RM0090:884
|
// Direction change only required for RX-only, see RefMan RM0090:884
|
||||||
@ -218,7 +222,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
self->handle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
self->handle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
self->handle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
self->handle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
self->handle.Init.NSS = SPI_NSS_SOFT;
|
self->handle.Init.NSS = SPI_NSS_SOFT;
|
||||||
self->handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
|
self->handle.Init.BaudRatePrescaler = stm32_baud_to_spi_div(default_baudrate, &self->prescaler, get_busclock(self->handle.Instance));
|
||||||
self->handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
self->handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
self->handle.Init.TIMode = SPI_TIMODE_DISABLE;
|
self->handle.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
self->handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
self->handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
@ -226,8 +230,8 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
if (HAL_SPI_Init(&self->handle) != HAL_OK) {
|
if (HAL_SPI_Init(&self->handle) != HAL_OK) {
|
||||||
mp_raise_ValueError(translate("SPI init error"));
|
mp_raise_ValueError(translate("SPI init error"));
|
||||||
}
|
}
|
||||||
self->baudrate = (get_busclock(SPIx) / 16);
|
self->baudrate = default_baudrate;
|
||||||
self->prescaler = 16;
|
// self->prescaler = 16; // Initialised above by stm32_baud_to_spi_div
|
||||||
self->half_duplex = half_duplex;
|
self->half_duplex = half_duplex;
|
||||||
self->polarity = 0;
|
self->polarity = 0;
|
||||||
self->phase = 0;
|
self->phase = 0;
|
||||||
@ -381,7 +385,7 @@ bool common_hal_busio_spi_transfer(busio_spi_obj_t *self,
|
|||||||
|
|
||||||
uint32_t common_hal_busio_spi_get_frequency(busio_spi_obj_t *self) {
|
uint32_t common_hal_busio_spi_get_frequency(busio_spi_obj_t *self) {
|
||||||
// returns actual frequency
|
// returns actual frequency
|
||||||
uint32_t result = HAL_RCC_GetPCLK2Freq() / self->prescaler;
|
uint32_t result = get_busclock(self->handle.Instance) / self->prescaler;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user