注:

<1> SPI不存在在中断读写,SPI通信时序是读的同时写,写的同时读,读写不分离,所以没必要配置中断。

1、SPI初始化

/*******************************************************************************
* function name  : SPI1_Init
* brief          : SPI1 initialize
* param[in]      : None
* param[out]     : None
* retval         : None
* attention      : None
*******************************************************************************/
void SPI1_Init(void)
{spi_parameter_struct spi_init_s;rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_SPI1);rcu_periph_clock_enable(RCU_AF);/* SPI1_SCK(PB3), SPI1_MISO(PB4) and SPI1_MOSI(PB5) GPIO pin configuration */gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_3 | GPIO_PIN_5);gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_4);/* SPI0_CS(PB2) GPIO pin configuration */gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_MAX, GPIO_PIN_2);/* chip select invalid*/gpio_bit_set(GPIOB, GPIO_PIN_2);/* SPI1 parameter config */spi_init_s.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;spi_init_s.device_mode          = SPI_MASTER;spi_init_s.frame_size           = SPI_FRAMESIZE_8BIT;spi_init_s.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;   //mode3spi_init_s.nss                  = SPI_NSS_SOFT;spi_init_s.prescale             = SPI_PSC_16;        spi_init_s.endian               = SPI_ENDIAN_MSB;spi_init(SPI1, &spi_init_s);/* enable SPI1 */spi_enable(SPI1);
}

2、SPI写

/*******************************************************************************
* Function Name  : SPI_WR_byte
* Brief          : SPI1 read/write byte
* Param[in]      : byte
* Param[out]     : none
* Retval         : none
* Attention      : none
*******************************************************************************/
uint8_t SPI_RW_byte (uint8_t byte)
{ /* loop while data register in not emplty */while (RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));/* send byte through the SPI0 peripheral */spi_i2s_data_transmit(SPI1, byte);/* wait to receive a byte */while(RESET == spi_i2s_flag_get(SPI1, PI_FLAG_RBNE));/* return the byte read from the SPI bus */return (spi_i2s_data_receive(SPI1));
} /*******************************************************************************
* Function Name  : SPIWrite
* Brief          : SPIWrite
* Param[in]      : byte
* Param[out]     : none
* Retval         : none
* Attention      : none
*******************************************************************************/
void SPIWrite(UINT8 data)
{SPI_RW_byte(data);
}

3、SPI读

/*******************************************************************************
* Function Name  : SPIRead
* Brief          : SPIRead
* Param[in]      : byte
* Param[out]     : none
* Retval         : none
* Attention      : none
*******************************************************************************/
UINT8 SPIRead(void)
{UINT8 data;data = SPI_RW_byte(0);return (data);
}

GD32f303 驱动之SPI相关推荐

  1. linux内核添加spi驱动,Linux内核驱动之spi子系统spi协议.docx

    Linux内核驱动之spi子系统spi协议 概况 SPI接口是摩托罗拉首先提出的全双工三线同步串行外围接口SCK,MOSI,MISO,采用主从模式(Master Slave)架构:支持多slave模式 ...

  2. STM32F103系列_OLED屏幕(SSD1306、SSD1315驱动)SPI驱动【DMA】(高刷)

    STM32F103系列_OLED屏幕(SSD1306.SSD1315驱动)SPI驱动[DMA](高刷) 一.SSD1306和SSD1315 二.电路原理图(SPI接法) 三.STM32_SPI 四.S ...

  3. STM32MP157驱动开发——SPI驱动

    STM32MP157驱动开发--SPI驱动 一.简介 1.SPI介绍 2.STM32MP1 SPI介绍 3. ICM-20608 简介 4.Linux下的SPI框架 二.驱动开发 1)IO 的 pin ...

  4. linux spi屏驱动程序,65 linux spi设备驱动之spi LCD屏驱动

    SPI的控制器驱动由平台设备与平台驱动来实现. 驱动后用spi_master对象来描述.在设备驱动中就可以通过函数spi_write, spi_read, spi_w8r16, spi_w8r8等函数 ...

  5. Linux spi驱动分析----SPI设备驱动(W25Q32BV)

    转载地址:http://blog.chinaunix.net/uid-25445243-id-4026974.html 一.W25Q32BV芯片简介 W25X是一系列SPI接口Flash芯片的简称,它 ...

  6. 以太网卡驱动程序移植linux,Linux下移植ENC424J600网卡驱动,SPI接口初始化的相关问题...

    .chip_select]; if (devices.bus_num == 0) enable_spi0 = 1; else enable_spi1 = 1; 以下是初始化通讯接口 if (enabl ...

  7. 10.13、驱动开发 -- spi总线

    SPI 英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM ...

  8. Linux设备驱动之SPI驱动

    Linux下SPI驱动分成两部分:主机驱动和设备驱动. 主机驱动: 主机侧SPI控制器使用struct spi_master描述,该结构体中包含了SPI控制器的序号(很多SoC中存在多个SPI控制器) ...

  9. I2c驱动与SPI驱动

    今天说一下单片机的I2C SPI通信,可能说不清楚,因为这毕竟要做实验才可完全理解. I2C和SPI是两种不同的通信协议. 听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已,我们只要遵照这个 ...

最新文章

  1. 电信设备产品简介材料收集
  2. 向量程序C语言,一个有关向量与矩阵的实用计算器程序
  3. 离线安装minikube—1.10.1
  4. 有关机械手臂控制中的两个重要输入参数
  5. 11月14日,西安,听说有一节百度AI快车道课程在等你上车
  6. 17毫秒每帧!实时语义分割与深度估计
  7. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(八)部署虚拟桌面及应用
  8. 如何自学3DMAX建模?
  9. 好用的局域网共享工具
  10. Excel技巧——从身份证号码里提取员工性别
  11. 《21天学通C++(第五版)》 [美] Jesse Liberty Bradley Jones著——个人学习笔记
  12. CMD批处理实现dot命令自动运行更新
  13. 关于软件测试的基础认知分享
  14. 《子夜秋歌》赏析-(李白明月姑娘之六)
  15. FPGA实现数字识别
  16. 6 种老而不死的编程语言!
  17. 司马谈《论六家要旨》品读
  18. OpenCV基础(26)使用 Python 和 OpenCV 顺时针排序坐标
  19. 电子商务之数据库分析(二)
  20. 还敢随便抄?Stack Overflow上最火这段代码有Bug!

热门文章

  1. 217、电梯监控无线桥解决方案及注意事项
  2. 科大讯飞两代AI平台演进之路--讯飞云计算研究院副院长龙明康访谈
  3. MySql高级(二)
  4. c语言0的作用是什么意思,C语言 1 0 是什么意思
  5. myeclipse 各版本下载(自Myeclispe中文网)
  6. 有技术,没资金,没市场渠道,如何草根创业?
  7. IDEA旗舰版安装与概述
  8. Failed to start firewalld.service: Unit is masked
  9. ArcGIS License Server Administor 点击启动没有反应
  10. MS【1】:Metric