0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32G0开发笔记:SPI接口的基本使用

CHANBAEK 来源:电子技术攻城狮 作者: MakerInChina.cn 2023-01-17 10:38 次阅读

使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SPI接口的基本使用。

1 SPI配置

以下为设置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);

设置流程:打开外设时钟-> 设置SPI引脚 -> CS引脚 -> 配置SPI模式包括SPI速度、CPOL\\CPHA -> SPI传输数据位数 -> NSS配置 -> SPI使能;

2 SPI读写

  • 写入后读取
1uint16_t spi_xfer(uint32_t spi, uint16_t data)
  • 发送
1void spi_send(uint32_t spi, uint16_t data)
2
  • 接收
1uint16_t spi_read(uint32_t spi)
  • 对于8bit的发送和接收在STM32G0上,libopencm3库需要使用如下接口:
1spi_send8();
2spi_read8();

3 说明

默认配置的SPI时钟是连续的,波形如下:

在某些时候需要在帧之间有些空隙,可以设置CR2寄存器的NSSP位或者直接在发送前进行延时:

1SPI_CR2(SPI1) |= SPI_CR2_NSSP; //NSSP

波形如下:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5025

    浏览量

    117697
  • 接口
    +关注

    关注

    33

    文章

    7629

    浏览量

    148432
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348687
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1612

    浏览量

    89585
  • SPI接口
    +关注

    关注

    0

    文章

    250

    浏览量

    33925
收藏 人收藏

    评论

    相关推荐

    基于STM32的USB程序开发笔记 汇总

    忙了一下午终于有时间整理了,基于STM32的USB程序开发笔记汇总,需要的亲们点击链接阅读哈!{:4_95:}基于STM32的USB程序开发笔记(一)https://bbs.elecf
    发表于 03-20 16:08

    坛友经验分享之STM32的USB程序开发笔记

    基于STM32的USB程序开发笔记(一)基于STM32的USB程序开发笔记(二)基于STM32的USB程序
    发表于 09-04 17:42

    STM32的USB程序开发笔记

    STM32的USB程序开发笔记
    发表于 09-29 14:55 27次下载
    <b class='flag-5'>STM32</b>的USB程序<b class='flag-5'>开发笔记</b>

    STM32开发笔记56: STM32F407VGT6的解释

    STM32开发笔记56: STM32F407VGT6的解释
    发表于 12-02 16:51 47次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>开发笔记</b>56: <b class='flag-5'>STM32</b>F407VGT6的解释

    STM32G0开发笔记:FreeRTOS和FreeModbus库使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为FreeRTOS和FreeModbus库使用。
    的头像 发表于 01-16 14:44 3869次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:FreeRTOS和FreeModbus库使用

    STM32G0开发笔记:使用FreeRTOS系统的队列Queue

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统的队列Queue。
    的头像 发表于 01-16 14:50 955次阅读

    STM32G0开发笔记:使用FreeRTOS系统

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统。
    的头像 发表于 01-16 15:07 1566次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用FreeRTOS系统

    STM32G0开发笔记:使用ADC进行NTC温度采集

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下使用ADC进行NTC温度采集。
    的头像 发表于 01-16 15:12 6591次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用ADC进行NTC温度采集

    STM32G0开发笔记:用PWM来实现LED呼吸灯效果

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面使用PWM来实现LED呼吸灯效果。
    的头像 发表于 01-16 15:15 1664次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:用PWM来实现LED呼吸灯效果

    STM32G0开发笔记:SD卡模块的使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SD卡模块的使用方法。
    的头像 发表于 01-19 16:27 1398次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:SD卡模块的使用方法

    STM32G0开发笔记:多通道ADC与DMA的使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为多通道ADC与DMA的使用。
    的头像 发表于 01-17 10:41 5253次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:多通道ADC与DMA的使用

    STM32G0开发笔记:串口中断的使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为串口中断的使用。
    的头像 发表于 01-17 10:46 1704次阅读

    STM32G0开发笔记:GPIO接按键的使用方式

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
    的头像 发表于 01-17 10:48 1316次阅读

    STM32G0开发笔记:LED灯示例

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为LED灯示例。
    的头像 发表于 01-17 10:52 974次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:LED灯示例

    STM32G0开发笔记:使用libopencm3库

    使用Platformio平台的libopencm3开发框架来开发STM32G0开发环境为VSCode+PIO插件,这里以开发
    的头像 发表于 01-17 10:56 1324次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用libopencm3库