ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
983720 Топик полностью
Mikla (03.03.2020 18:46, просмотров: 373) ответил 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; } . . .