1、SPI2第一次初始化

GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef  SPI_InitStructure;

RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
    RCC_APB1PeriphClockCmd(    RCC_APB1Periph_SPI2,  ENABLE );//SPI2时钟使能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB

GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15上拉

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;        //设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;        //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;        //串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;    //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;        //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;        //定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC值计算的多项式
    SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

SPI_Cmd(SPI2, ENABLE); //使能SPI外设

SPI2_ReadWriteByte(0xff);//启动传输

2、SPI二次初始化

主要原因是第一次SPI初始化后,发送过数据。所以此处必须重新初始化SPI时钟,否则SPI失效。

SPI_InitTypeDef  SPI_InitStructure;

SPI_I2S_DeInit(SPI2);

RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
    RCC_APB1PeriphClockCmd(    RCC_APB1Periph_SPI2,  ENABLE );//SPI2时钟使能

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;        //设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;        //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;        //串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;    //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;        //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;        //定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC值计算的多项式
    SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

SPI_Cmd(SPI2, ENABLE); //使能SPI外设

SPI2_ReadWriteByte(0xff);//启动传输

GD32F303的SPI初始化完毕,发送SPI数据后。如果想要改变频率SPEED,必须重新初始化SPI时钟。否则SPI将失效相关推荐

  1. DatagramSocket总是发送UDP数据后无法接收数据

    ref:http://blog.chinaunix.net/uid-20771867-id-3416509.html          cmd:telnet localhost 5554        ...

  2. mysql数据库删除一条数据后还想让新增数据从空缺id处开始

    方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增的字段 方法2: delete from 你的表名 dbcc checkident(你的表名,reseed ...

  3. html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  4. 大数据之数据清洗之爬取数据后如何根据地名或者公司名获取经纬度信息-地址逆解析经纬度

    关于本文章说明: 本文章的想法来源于:爬了大量的数据后,想利用GIS技术把数据展示在地图上.但是爬的数据又没有经纬度坐标,就无法在地图上进行展示了,所以用了百度地图的正/逆地理编码. 计算机行业招聘智 ...

  5. STM32F10X SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...

  6. SPI中断方式读取MPU6500数据

    学习背景 MPU6500是MPU6050的升级版同时支持IIC和SPI通讯协议:IIC协议相对于SPI协议读取速率更低,并且在STM32的平台下硬件IIC存在更多地不确定性.因此选择采用SPI的方式读 ...

  7. 学习STM32 Flash存储 W25Q64 SPI总线存储模块进行读写数据

    今天学习 Flash 存储芯片进行数据写入和读取方法.了解W25Q64 存储芯片的使用.能够用 STM32 单片机对 W25Q64 进行写入数据,擦除数据,读取数据. w25q64 是什么? W25Q ...

  8. STM32F10X SPI操作flash MX25L64读写数据(转)

    源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...

  9. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...

最新文章

  1. Write-Ahead Transaction Log
  2. 第十六届全国大学生智能汽车竞赛-航天智慧物流创意组 线下选拔赛赛题发布!
  3. 浅析优化不同类型关键词都需要周期几何?
  4. MySQL-Btree索引和Hash索引初探
  5. (1)段寄存器属性探测
  6. linux gnome 桌面,GNOME Linux桌面
  7. leetcode547. 省份数量
  8. php语言指针的初始化定义,指针变量的初始化,C语言指针变量初始化详解
  9. 【Gamma】 Phylab 发布说明
  10. Clojure 学习入门(10)- httpkit
  11. 安装WindowBuilder后,新建JFrame文件,不能查看Design
  12. 创建文本节点createTextNode
  13. python安装第三方库出现问题怎么办_关于Python第三方库安装失败问题的解决方案...
  14. java电池soc算法实现,电池SOC高精度估算算法
  15. 如何用python做计算_如何用Python做些基本的数学运算
  16. Win10系统自带的备份,恢复功能
  17. presto获取上月第一天和最后一天、当月第一天
  18. 数据挖掘的十大经典算法
  19. Android热修复之AndFix
  20. 测试使用linux日志定位BUG,Web测试中定位bug方法

热门文章

  1. openssl: error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No su
  2. .net 脱壳及编译
  3. 打开管家婆软件提示:已停止工作/程序无响应
  4. idea 各个版本下载
  5. 预装Windows 7系统如何验证系统正版授权
  6. IDEA插件系列(49):PowerMouse插件——鼠标手势
  7. 思科ASA5520防火墙telnet、SSH及DHCP设置
  8. 【图像检测】基于计算机视觉实现米粒个数检测含Matlab源码
  9. 游戏本推荐排行榜哪款好?开箱这款有答案
  10. java实现24点_求 JAVA 算24点的代码