0
我試圖從使用DMA的I2C傳感器(BNO055)獲取數據,但我無法啓動DMA傳輸。我發現很多F1,F3和F4 STM微控制器的例子,但對F0沒有任何幫助。 我只是:STM32F0發現使用DMA的I2C傳輸
- 我使用輪詢方法初始化傳感器,它工作正常。
- 我初始化使用DMA此代碼:
`
void I2C1_DMA_Init(uint8_t *BNO055_DMA_buffer)
{
RCC->AHBENR |= (RCC_AHBPeriph_DMA1);#
DMA_InitTypeDef DMA_str;
DMA_StructInit(&DMA_str);
DMA_str.DMA_PeripheralBaseAddr = (uint32_t)I2C1->RXDR;
DMA_str.DMA_MemoryBaseAddr = (uint32_t)BNO055_DMA_buffer;
DMA_str.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_str.DMA_BufferSize = 32;
DMA_str.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_str.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_str.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_str.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_str.DMA_Mode = DMA_Mode_Normal;
DMA_str.DMA_Priority = DMA_Priority_VeryHigh;
DMA_str.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel3, &DMA_str);
}
`
- 我設置傳感器存儲器的正確地址可從使用讀輪詢方法。
- 現在我想用DMA讀取32個字節。我必須使用
I2C_TransferHandling()
函數發送傳感器地址嗎?應該發送什麼其他參數呢?有什麼我錯過了DMA初始化的是,執行後:
I2C_DMACmd(I2C1, I2C_DMAReq_Rx, ENABLE); DMA_Cmd(DMA1_Channel3, ENABLE);
沒有公交車(我檢查它使用邏輯分析儀)上發生的。