ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
983457 Топик полностью
POV_ (02.03.2020 20:52, просмотров: 4) ответил Aleksey_75 на чудо-чудное! решил попробовать SPI через DMA, и столкнулся с чудесами флаг TCIFx взводится раньше чем фактически заканчивается передача, по факту в середине последнего передаваемого байта.
Пару лет назад озадачился переводом своей платы на стм32 и захотел DMA... Ну как-то на тестовом примере оно сразу взлетело, вопросов не возникло. void SenBlocAtDMA(uint8_t *buf, uint32_t addr, uint32_t len) { DMA_InitTypeDef DMA_InitStructure; dfStartContinuesWrite(addr, 0); DMA_DeInit(DMA1_Channel3); //tx DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&SPI1->DR); DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)buf; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = len; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_Low; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel3, &DMA_InitStructure); SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE); DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE); DMA_Cmd(DMA1_Channel3, ENABLE); while (DMA_GetFlagStatus(DMA1_IT_TC3) != SET); DMA_ClearITPendingBit(DMA1_IT_TC3); DMA_Cmd(DMA1_Channel3, DISABLE); dfStopContinuesWrite(); }