ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
17 мая
1318416 Топик полностью
mse homjak (10.06.2023 13:50, просмотров: 316) ответил reZident на Мне кажется, что в STM с "мультимастер" там что-то сильно намуд(р)или и забажили, а китайцы лишь добросовестно все баги воспроизвели.
Имана. "Лучший ответ на вопрос"как запрограммировать STM32 SPI NSS hardmode" Мякотка в концэ... 

Somewhere I read that NSS is driven low as long as the SPI Master is enabled and driven high again if the SPI Master is disabled. I tried it using the HAL library (Cube/STM32CubeMX) from ST with an STM32L476 and polling SPI1. Initialization before and de-initialization after transmission did not set the NSS pin, but it took a lot of time:

Init structure:

hspi1.Instance = SPI1;

hspi1.Init.Mode = SPI_MODE_MASTER;

hspi1.Init.Direction = SPI_DIRECTION_2LINES;

hspi1.Init.DataSize = SPI_DATASIZE_8BIT;

hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;

hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;

hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;

hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;

hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;

hspi1.Init.TIMode = SPI_TIMODE_DISABLE;

hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

hspi1.Init.CRCPolynomial = 7;

hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;

hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;

Transmit sequence:

HAL_SPI_Init( &hspi1 );

HAL_SPI_TransmitReceive( &hspi1, btx, brx, l, 5 ); // timeout 5msec;

while( hspi1.State == HAL_SPI_STATE_BUSY ); // wait for xmission complete

HAL_SPI_DeInit( &hspi1 );


So I decided setting the pin manually using GPIO (using SPI_NSS_SOFT in init)...

СПИ у СТМ, это какой-то позор.