Mikla (03.03.2020 18:46, просмотров: 397) ответил Aleksey_75 на чудо-чудное! решил попробовать SPI через DMA, и столкнулся с чудесами флаг TCIFx взводится раньше чем фактически заканчивается передача, по факту в середине последнего передаваемого байта.
busy в одном из spi(не помню каком, вроде spi5) периодически лажал. передача закончилась, а он висит. в остальных spi такого не было. юзаю два потока dma(прием и передача). все передалось когда dma на прием сработало. если прием не нужен - запрещаем инкремент адреса у дма приема
и еще см коменты. как я их написал - не помню, но возникал этот косяк только при первом приеме после инициализации. может spi в slave был.
void DMA1_Stream2_IRQHandler(void)
{
GPIOC->BSRRL = GPIO_Pin_11;//CS adc2_out high
if(SPI3->SR & SPI_SR_RXNE)//был косяк и DMA вычерпывал данные с задержкой в один байт,обнулим приемный буфер
{ //появляется при старте изза разрешенного spi и еще не запущенного канала DMA.
error_spi = SPI3->DR;
error_spi = 1;
}
.
.
.