你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0-Platformio+libopencm3-SPI接口使用

[复制链接]
STMCU小助手 发布时间:2023-2-22 18:19
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SPI接口的基本使用。

1 SPI配置
以下为设置SPI1,引脚映射为PA5\6\7,使用软件控制CS-PA4;
  1. 1/* Enable SPI1 Periph and gpio clocks */
  2. 2    rcc_periph_clock_enable(RCC_SPI1);
  3. 3    rcc_periph_clock_enable(RCC_GPIOA);
  4. 4
  5. 5/* Configure GPIOs:
  6. 6     *
  7. 7     * SCK=PA5
  8. 8     * MOSI=PA7
  9. 9     * MISO=PA6
  10. 10     *
  11. 11     * for SD card
  12. 12     * SDCS PA4
  13. 13     */
  14. 14
  15. 15//MOSI & SCK & MISO
  16. 16gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO5|GPIO7|GPIO6);
  17. 17gpio_set_af(GPIOA,GPIO_AF0,GPIO5|GPIO7|GPIO6);
  18. 18gpio_set_output_options(GPIOA, GPIO_OTYPE_PP,GPIO_OSPEED_LOW,GPIO5|GPIO7|GPIO6);
  19. 19
  20. 20//SDCS
  21. 21gpio_mode_setup(GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO4);
  22. 22gpio_set(GPIOA,GPIO4);
  23. 23
  24. 24/* Reset SPI, SPI_CR1 register cleared, SPI is disabled */
  25. 25spi_reset(SPI1);
  26. 26
  27. 27/* Set up SPI in Master mode with:
  28. 28   * Clock baud rate
  29. 29   * Clock polarity
  30. 30   * Clock phase
  31. 31   * Frame format MSB
  32. 32   */
  33. 33spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_128,
  34. 34                SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE,
  35. 35                SPI_CR1_CPHA_CLK_TRANSITION_1,
  36. 36                SPI_CR1_MSBFIRST);
  37. 37
  38. 38    spi_set_data_size(SPI1,SPI_CR2_DS_8BIT);
  39. 39    spi_set_full_duplex_mode(SPI1);
  40. 40
  41. 41/*
  42. 42   * Set NSS management to software.
  43. 43   *
  44. 44   * Note:
  45. 45   * Setting nss high is very important, even if we are controlling
  46. 46   * the GPIO
  47. 47   * ourselves this bit needs to be at least set to 1, otherwise the spi
  48. 48   * peripheral will not send any data out.
  49. 49   */
  50. 50spi_enable_software_slave_management(SPI1);
  51. 51spi_set_nss_high(SPI1);
  52. 52
  53. 53/* Enable SPI1 periph. */
  54. 54spi_enable(SPI1);
复制代码

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

2 SPI读写
  • 写入后读取

  1. 1uint16_t spi_xfer(uint32_t spi, uint16_t data)
复制代码

  • 发送

  1. 1void spi_send(uint32_t spi, uint16_t data)
  2. 2
复制代码


  • 接收

  1. 1uint16_t spi_read(uint32_t spi)
复制代码


  • 对于8bit的发送和接收在STM32G0上,libopencm3库需要使用如下接口:

  1. 1spi_send8();
  2. 2spi_read8();
复制代码

3 说明
默认配置的SPI时钟是连续的,波形如下:
微信图片_20230222181909.png
在某些时候需要在帧之间有些空隙,可以设置CR2寄存器的NSSP位或者直接在发送前进行延时:
  1. 1SPI_CR2(SPI1) |= SPI_CR2_NSSP; //NSSP
复制代码


波形如下:
微信图片_20230222181905.png

转载自:MakerInChina.cn


收藏 评论0 发布时间:2023-2-22 18:19

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版