使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面介紹SPI接口的基本使用。
1 SPI配置
以下為設(shè)置SPI1,引腳映射為PA5\\6\\7,使用軟件控制CS-PA4;
1/* Enable SPI1 Periph and gpio clocks */
2 rcc_periph_clock_enable(RCC_SPI1);
3 rcc_periph_clock_enable(RCC_GPIOA);
4
5/* Configure GPIOs:
6 *
7 * SCK=PA5
8 * MOSI=PA7
9 * MISO=PA6
10 *
11 * for SD card
12 * SDCS PA4
13 */
14
15//MOSI & SCK & MISO
16gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO5|GPIO7|GPIO6);
17gpio_set_af(GPIOA,GPIO_AF0,GPIO5|GPIO7|GPIO6);
18gpio_set_output_options(GPIOA, GPIO_OTYPE_PP,GPIO_OSPEED_LOW,GPIO5|GPIO7|GPIO6);
19
20//SDCS
21gpio_mode_setup(GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO4);
22gpio_set(GPIOA,GPIO4);
23
24/* Reset SPI, SPI_CR1 register cleared, SPI is disabled */
25spi_reset(SPI1);
26
27/* Set up SPI in Master mode with:
28 * Clock baud rate
29 * Clock polarity
30 * Clock phase
31 * Frame format MSB
32 */
33spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_128,
34 SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE,
35 SPI_CR1_CPHA_CLK_TRANSITION_1,
36 SPI_CR1_MSBFIRST);
37
38 spi_set_data_size(SPI1,SPI_CR2_DS_8BIT);
39 spi_set_full_duplex_mode(SPI1);
40
41/*
42 * Set NSS management to software.
43 *
44 * Note:
45 * Setting nss high is very important, even if we are controlling
46 * the GPIO
47 * ourselves this bit needs to be at least set to 1, otherwise the spi
48 * peripheral will not send any data out.
49 */
50spi_enable_software_slave_management(SPI1);
51spi_set_nss_high(SPI1);
52
53/* Enable SPI1 periph. */
54spi_enable(SPI1);
設(shè)置流程:打開(kāi)外設(shè)時(shí)鐘-> 設(shè)置SPI引腳 -> CS引腳 -> 配置SPI模式包括SPI速度、CPOL\\CPHA -> SPI傳輸數(shù)據(jù)位數(shù) -> NSS配置 -> SPI使能;
2 SPI讀寫(xiě)
- 寫(xiě)入后讀取
1uint16_t spi_xfer(uint32_t spi, uint16_t data)
- 發(fā)送
1void spi_send(uint32_t spi, uint16_t data)
2
- 接收
1uint16_t spi_read(uint32_t spi)
- 對(duì)于8bit的發(fā)送和接收在STM32G0上,libopencm3庫(kù)需要使用如下接口:
1spi_send8();
2spi_read8();
3 說(shuō)明
默認(rèn)配置的SPI時(shí)鐘是連續(xù)的,波形如下:

在某些時(shí)候需要在幀之間有些空隙,可以設(shè)置CR2寄存器的NSSP位或者直接在發(fā)送前進(jìn)行延時(shí):
1SPI_CR2(SPI1) |= SPI_CR2_NSSP; //NSSP
波形如下:

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
寄存器
+關(guān)注
關(guān)注
31文章
5609瀏覽量
130036 -
接口
+關(guān)注
關(guān)注
33文章
9527瀏覽量
157103 -
STM32
+關(guān)注
關(guān)注
2310文章
11166瀏覽量
373577 -
SPI
+關(guān)注
關(guān)注
17文章
1885瀏覽量
101319 -
SPI接口
+關(guān)注
關(guān)注
0文章
282瀏覽量
36725
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
STM32G0開(kāi)發(fā)筆記:FreeRTOS和FreeModbus庫(kù)使用
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為FreeRTOS和FreeModbus庫(kù)使用。
STM32G0開(kāi)發(fā)筆記:FreeRTOS和CLI組件使用
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為FreeRTOS和CLI組件使用。
STM32G0開(kāi)發(fā)筆記:使用FreeRTOS系統(tǒng)的隊(duì)列Queue
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)的隊(duì)列Queue。
STM32G0開(kāi)發(fā)筆記:使用FreeRTOS系統(tǒng)
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)。
STM32G0開(kāi)發(fā)筆記:使用ADC進(jìn)行NTC溫度采集
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下使用ADC進(jìn)行NTC溫度采集。
STM32G0開(kāi)發(fā)筆記:用PWM來(lái)實(shí)現(xiàn)LED呼吸燈效果
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面使用PWM來(lái)實(shí)現(xiàn)LED呼吸燈效果。
STM32G0開(kāi)發(fā)筆記:EEPROM M24C02的使用方法
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為EEPROM M24C02的使用方法。
STM32G0開(kāi)發(fā)筆記:SD卡模塊的使用方法
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面介紹SD卡模塊的使用方法。
STM32G0開(kāi)發(fā)筆記:多通道ADC與DMA的使用
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為多通道ADC與DMA的使用。
STM32G0開(kāi)發(fā)筆記:定時(shí)器timer的基本使用方法
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為定時(shí)器timer的基本使用方法。
STM32G0開(kāi)發(fā)筆記:串口中斷的使用
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為串口中斷的使用。
STM32G0開(kāi)發(fā)筆記:GPIO接按鍵的使用方式
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面為GPIO接按鍵的使用方式。
STM32G0開(kāi)發(fā)筆記:LED燈示例
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,下面為L(zhǎng)ED燈示例。
STM32G0開(kāi)發(fā)筆記:使用libopencm3庫(kù)
使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,開(kāi)發(fā)環(huán)境為VSCode+PIO插件,這里以開(kāi)發(fā)
STM32G0開(kāi)發(fā)筆記:SPI接口的基本使用
評(píng)論