STM32 快速上手SPI

2021-10-10 02:44:51 字數 2319 閱讀 9129

基本的部分前文《stm32-spi》已經介紹過了,這裡只記怎麼用。

stm32f103zet6的三個spi的引腳分別為

spi1在apb1時鐘下,spi2和spi3在apb2時鐘下。

void spi_i2s_deinit(spi_typedef* spix);

void spi_init(spi_typedef* spix, spi_inittypedef* spi_initstruct);

void i2s_init(spi_typedef* spix, i2s_inittypedef* i2s_initstruct);

void spi_structinit(spi_inittypedef* spi_initstruct);

void i2s_structinit(i2s_inittypedef* i2s_initstruct);

void spi_cmd(spi_typedef* spix, functionalstate newstate);

void i2s_cmd(spi_typedef* spix, functionalstate newstate);

void spi_i2s_itconfig(spi_typedef* spix, uint8_t spi_i2s_it, functionalstate newstate);

void spi_i2s_dmacmd(spi_typedef* spix, uint16_t spi_i2s_dmareq, functionalstate newstate);

void spi_i2s_senddata(spi_typedef* spix, uint16_t data);

uint16_t spi_i2s_receivedata(spi_typedef* spix);

void spi_nssinternalsoftwareconfig(spi_typedef* spix, uint16_t spi_nssinternalsoft);

void spi_ssoutputcmd(spi_typedef* spix, functionalstate newstate);

void spi_datasizeconfig(spi_typedef* spix, uint16_t spi_datasize);

void spi_transmitcrc(spi_typedef* spix);

void spi_calculatecrc(spi_typedef* spix, functionalstate newstate);

uint16_t spi_getcrc(spi_typedef* spix, uint8_t spi_crc);

uint16_t spi_getcrcpolynomial(spi_typedef* spix);

void spi_bidirectionallineconfig(spi_typedef* spix, uint16_t spi_direction);

flagstatus spi_i2s_getflagstatus(spi_typedef* spix, uint16_t spi_i2s_flag);

void spi_i2s_clearflag(spi_typedef* spix, uint16_t spi_i2s_flag);

itstatus spi_i2s_getitstatus(spi_typedef* spix, uint8_t spi_i2s_it);

void spi_i2s_clearitpendingbit(spi_typedef* spix, uint8_t spi_i2s_it);

注意:hal庫函式有個容易犯錯的地方。

f4可以設定一次傳輸最小單位為乙個位元組或兩個位元組。但是傳送函式接收的快取引數都是指向u8型別的指標,但是函式引數size表示的並不是位元組數,而是「amount of data to be sent」,要傳送的最小單位的數量。比如,每幀4個位元組,設定spi databits 為16位,那麼呼叫hal_spi_transmit函式時,size=2。

hal_statustypedef hal_spi_transmit(spi_handletypedef *hspi, uint8_t *pdata, uint16_t size, uint32_t timeout);

void spi2_init(void)

這裡需要注意的是crc多項式的值為什麼是7?這是什麼意思?了解crc的多項式極其簡記方式,看這裡!

STM32 快速上手PWM輸出

在前面文章 stm32 一文搞懂通用定時器捕獲 比較通道 已經詳細介紹了輸入stm32的捕獲 比較通道,這邊文章來寫比較通道的pwm的應用。初始化io口為復用功能輸出 重對映相關引腳為pwm輸出 初始化定時器 主要是配置arr和psc 初始化通道x輸出比較引數 使能通道x預裝載暫存器 使能定時器 修...

STM32之間SPI通訊

這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...

STM32 硬體SPI主從通訊

本例子基於stm32f103zet6晶元,實現spi1與spi2的主從通訊。其中spi1配置為主機,spi2配置為從機,均配置為全雙工模式。硬體連線圖 其中,我們需要注意的是,spi的從機不能主動傳送資料,只能應答資料。本例子的資料互動過程 主機使用查詢方式傳送資料給從機。從機使用中斷接收方式接收資...