关于STM32F107的SPI标志 SPI_I2S_FLAG_BSY和SPI_I2S_FLAG_TXE的疑问  http://www.openedv.com/posts/list/23579.htm

用STM32 SPI1驱动DAC7611,在发送数据的时候用了while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);等待发送缓冲区为空后再拉高CS。结果发现在数据(16位)没有发送完时,就执行了CS拉高。然后我换了这个语句while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);就正确了。我想知道,STM32如何判断发送缓冲区为空的?这两个标识位的判断有什么区别?

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) != RESET); //等待发送完成

while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_BSY)==SET);

只发送过程(BIDIMODE=0并且RXONLY=0)
在此模式下,传输过程可以简要说明如下,使用BSY位等待传输的结束(见图215
466/754
和图216):
1. 设置SPE位为’1’,使能SPI模块;
2. 在SPI_DR寄存器中写入第一个要发送的数据,这个操作会清除TXE标志;
3. 等待TXE=1,然后写入第二个要发送的数据。重复这个操作,发送后续的数据;
4. 写入最后一个数据到SPI_DR寄存器之后,等待TXE=1;然后等待BSY=0,这表示最后一个数据的传输已经完成。
也可以在响应TXE标志的上升沿产生的中断的处理程序中实现这个过程。
注: 1. 对于不连续的传输,在写入SPI_DR寄存器的操作与设置BSY位之间有2个APB时钟周期的延迟,因此在只发送模式下,写入最后一个数据后,最好先等待TXE=1,然后再等待BSY=0。
2. 只发送模式下,在传输2个数据之后,由于不会读出接收到的数据,SPI_SR寄存器中的OVR位会变为’1’。(译注:软件不必理会这个OVR标志位)

是配置的时候有点问题,
    SPI_InitTypeDef  SPI_InitStructure;
      SPI_Init(SPI2, &SPI_InitStructure);

     SPI_InitTypeDef  *SPI_InitStructure;
      SPI_Init(SPI2, SPI_InitStructure);
两种方式的不同,大家有兴趣的可以试一下,其中一种方式是不行的(至少针对某些固态库是不行

STM32分别基于库和寄存器的硬件SPI2例程,适合入门者!http://www.amobbs.com/thread-5467320-1-1.html

STM32 SPI2问题  http://zhidao.baidu.com/link?url=H82AEsq4bX3gVjfMSuUZeTMANDlCRWMxgMEZCD79YJt_ngpH-iHZEuuK7gkjRlZ2weRdqK1TiSRSCftORDvOCCcjjiMXmvRXDQaYc3POX43

http://bbs.21ic.com/icview-157057-1-1.html     stm32的奇怪SPI2问题?

http://group.ednchina.com/GROUP_MES_14262_619_13966.HTM

http://bbs.csdn.net/topics/390652078?page=1

STM32的SPI2操作Flash的更多相关文章

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

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

  2. SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信.ARM主控芯片STM32F103,flash芯片 ...

  3. C#操作Flash动画

    对于在C#开发的过程中没有接触过Flash相关开发的人员来说,没有系统的资料进行学习,那么这篇文档针对于初学者来说是很好的学习DEMO. 本文章中的DEMO实现了C#的COM控件库中本来就带有对fla ...

  4. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C /************************************************************************** ...

  5. selenium自动化过程中如何操作Flash动画

    最近在看python的爬虫框架(scrapy),一个词概括就是:"酸爽"!等把selenium自动化版块讲完后,打算写一写关于scrapy相关的知识,打算从源码角度解析下scrap ...

  6. Selenium+Java - 结合sikuliX操作Flash网页

    前言 前天被一个Flash的轮播图,给玩坏了,无法操作,后来请教了下crazy总拿到思路,今天实践了下,果然可以了,非常感谢! 模拟场景 打开百度地图 切换城市到北京 使用测距工具 测量 奥林匹克森林 ...

  7. STM32:片上Flash 操作

    之前IAP时候记录过一些,今天对特定地方写又加深了印象,写与擦除都需要先unclock //读取指定地址的半字(16位数据) //faddr:读地址(此地址必须为2的倍数!!) //返回值:对应数据. ...

  8. STM32位带操作

    STM32的位带操作是基于cortex内核自带的,而不是st公司独创.基本的思路就是用一个32位的地址空间访问一个bit,因为stm32只支持32位数据的读取,不像51单片机一样,是可以单独对一位操作 ...

  9. STM32硬件IIC操作

    Stm32具有IIC接口,接口有以下主要特性 多主机功能:该模块既可做主设备也可做从设备 主设备功能 C地址检测 位/10位地址和广播呼叫 支持不同的通讯速度 状态标志: 发送器/接收器模式标志 字节 ...

随机推荐

  1. <Spark><Advanced Programming>

    Introduction 介绍两种共享变量的方式: accumulators:聚集信息 broadcast variables:高效地分布large values 介绍对高setup costs任务的 ...

  2. day 21 模块 和 包

    一.模块-----(python代码的文件) 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 为什么需要模块? 代码的可读性差,且重复的代码多,写代码困难大 ...

  3. MYSQL锁表问题解决

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 ? 1 mysql>show processlist; ...

  4. express-session 产生的警告问题

    调用express的express-session模块引发的警告问题 解决办法 调用的时候加上 resave:true, saveUninitialized:true eg: app.use(sess ...

  5. Vue 之 Vue.nextTick()

    异步更新队列 可能你还没有注意到,Vue 异步执行 DOM 更新.只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变.如果同一个 watcher 被多次触发,只会一次 ...

  6. Power BI十大视觉效果,知多少?

    Power BI十大视觉效果: 图表滑块 响应式布局 一键更改方差计算 一键排序 我们的最爱:小倍数! 瀑布图中的轴断裂 层次表(完全响应) HICHERT博士的IBCS®原生支持 分段图表 - 可视 ...

  7. Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门

    文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...

  8. SSM整合框架实现ajax校验

    SSM整合框架实现ajax校验   刚学习了ssm框架,ajax校验成功,分享下 1.导入jar包

  9. angular把echarts封装为指令(配合requirejs)

    1.在require中配置echartsjs文件 2.在directives下定义指令(定义为全局的指令,任何页面调用都可以) define(['app','echarts'],function(ap ...

  10. Android Hook框架adbi源码浅析(二)

    二.libbase 其实上面加载完SO库后,hook的功能我们完全可以自己在动态库中实现.而adbi作者为了方便我们使用,编写了一个通用的hook框架工具即libbase库.libbase依然在解决两 ...