STM32 SPI DMA (HAL庫)使用方法

2021-08-19 20:51:54 字數 1582 閱讀 3996

/*

* spi硬體初始化,記憶體位址初始化

*/static

void init(void)

/*初始化記憶體指標*/

gwriteptr=0;

greadptr=0;

/*使能spi1*/

hal_spi_init(&hspi1);

/*spi dma初始化,並開啟一次資料接收*/

hal_spi_receive_dma_init(&hspi1,fpgarevdata[gwriteptr],fpga_data_paket_length);}/*

* spi dma初始化,並開啟一次資料接收,

* 關鍵是返回函式的初始化,dma 源位址和目的位址的初始化,各標誌位的清空與開啟

* 該程式修改與hal庫的hal_spi_receive_dma函式

*/void hal_spi_receive_dma_init(spi_handletypedef *hspi, uint8_t *pdata, uint16_t size)

/* enable the spi error interrupt bit */

set_bit(hspi->instance->cr2, spi_cr2_errie);

/* enable rx dma request */

set_bit(hspi->instance->cr2, spi_cr2_rxdmaen);}/*

* fpga spi1資料接收函式,一次接收6個位元組資料報

* 該程式修改與hal庫的hal_dma_start_it函式和hal_spi_receive_dma函式

*/__inline void fpga_readbuffer(spi_handletypedef *hspi, uint8_t *dstaddress)

// else

//

/* check if the spi is already enabled */

// if((hspi->instance->cr1 &spi_cr1_spe) != spi_cr1_spe)

//

/* enable the spi error interrupt bit */

set_bit(hspi->instance->cr2, spi_cr2_errie|spi_cr2_rxdmaen);

// /* enable rx dma request */

// set_bit(hspi->instance->cr2, spi_cr2_rxdmaen);

// return hal_ok;}/*

*spi 返回函式,開啟spi dma開關,一次接收6個位元組資料報

*/void hal_spi_rxcpltcallback(spi_handletypedef *hspi)

}

當spi dma硬體初始化(spi dma mode為dma_normal)後,就可以開始一次初始

化hal_spi_receive_dma_init,之後,當有資料到來,spi接收完成返回函式會被呼叫,在返回函式中,首先關掉dma,接收到資料後,提供下一次接收資料的位址,重新開啟dma。

STM32韌體庫模版

開發工具 keil4 剛開始用這個庫的時候很無助,因為第一次用韌體庫 以下是我建立模版的步驟和注意事項 1.解壓韌體庫後先觀察目錄的整體結構,可以知道韌體庫裡面要弄出來的東西是libraries目錄,project目錄是韌體庫的應用,可以為今後開發專案做參考。2.現在建立乙個keil4的新工程,規劃...

STM32庫的理解

1 條件編譯的作用是避免重複包含 2 暫存器說白了就是記憶體,對暫存器的操作就是對記憶體的操作 3 51微控制器對暫存器是直接操作的,而stm32則是間接操作,如下圖 明白了以上三點,我們就可以來揭開庫的那層神秘的面紗了 因為我們對暫存器的操作,即對記憶體的操作,是間接的。是通過庫函式來實現的,也就...

初始STM32標準庫

庫檔案一開始包含五個檔案 htmresc libraries project utilities stm32f10x stdperiph lib um.chm下面一一介紹 裡邊只有兩張,一張cmsis的logo,另一張是st的logo 裡邊是st官方實驗板的例程,目前不會用到。這個是庫幫助文件,我們...