stm32中断无电平触发的解决办法
这几天在用stm32读取FPGA中FIFO里的数据,遇到了不少的问题。其中有个自己觉得比较好玩的问题,就拿出来写写。其实这个问题也比较简单,开始我觉得没必要拿出来写,不过,想想后觉得还是写写吧,就当做是打发一下时间。
问题就是,stm32的中断没有电平触发方式。网上也看了看,有人为电平触发的中断没有什么意义,没必要用。也有人的想法相反。接下来我就不废话了,直接开始讲我遇到的这个问题以及怎么解决的吧。
说一下背景。我的任务是用stm32读取FPGA中FIFO里的数据。至于这些数据怎么来的,怎么写进FIFO里面我就不说了。这里简单看看FIFO的结构,如图一所示。当FIFO数据写到一半时(一般是非空就给信号,我这里设置的半满时给信号)给stm32信号,比如将这个引脚拉拉高(或者拉低,根据实际情况自己设置),直到stm32将数据读出后拉低。然后就让这个信号触发stm32进入中断函数中去读数据。而且我希望这要这个信号只要是低电平stm32就一直读读取时序如图二。这样就需要将中断设置成电平触发,只要低就一直重复进中断函数里读数据。那么问题来了,stm32不能将中断设置成电平触发的方式。 rd_clock:时钟信号 wr_full:半满信号
rd_en: 使能信号 tx_data: 数据
图一

图二
怎么解决呢?我的做法是这样的。如图三所示: 在箭头1处,用while循环,里面的判断条件是读取的中断输入引脚(我设置为GPIOE_Pin4)的值,如果这个引脚的值是1的话,就继续读数据。如果值为0的话就退出while循环,清中断(箭头2处),再退出中断函数。这段代码的其他地方是自己用软件的方式模拟的读数据的时钟信号。这个和FIFO的读取方式有关,这里不具体说,以后有时间了可以再写写FIFO的读取问题。 
图三
好了,这样就解决了我的问题。下面可以开始验证了。如图四所示,是为验证编写的主函数,很简单,就不说了。按照预期,应该出现的现象是:程序下载后,stm32的LED闪烁,代表程序程序运行正常。然后让FPGA给里面的FIFO写数据,半满后给出中断信号。串口调试助手可以看到,当半满信号给出被拉高后,串口调试助手中显示出事先写入FIFO中的数据,此时LED停止闪烁。半满信号拉低后,无数据显示,LED灯开始闪烁。下面,我就把程序下进去观察一下。
图四
从图五里可以可以看到,读出了数据,而且就是事先写入FIFO里的数据。另外,LED灯在串口调试助手printf出数据时,停止闪烁。数据printf完后,有开始闪。和预期一样
图五
好了。内容就这些了。第一次写,写的不怎么样,内容也比较简单,大家看完了,想吐槽就吐槽吧^0^~.... 最后,必须要说的是,实验室学长才是这次任务的主角,主要的工作是他做的,我只是给他打下手(∩_∩)...
stm32中断无电平触发的解决办法的更多相关文章
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- cmd命令行中无pip命令的解决办法
cmd命令行中无pip命令的解决办法 只需简单的两步即可,按顺序执行以下命令(在cmd中): python -m ensurepip python -m pip install --upgrade p ...
- logstash file输入,无输出原因与解决办法
1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...
- Android开发之ADT中无Annotation Processin的解决办法
使用ButterKnife的时候,进入ADT中设置的时候发现在Java Compiler展开后无Annotation Processin 解决办法: 安装插件:Juno - http://downlo ...
- Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法
昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...
- jquery中动态新增的元素节点无法触发事件解决办法
在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“re ...
- IAR升级之后,编译stm32官方工程报错的解决办法
IAR升级之后,打开stm32官方例程,编译时提示如下错误: Error[Pe147]: declaration is incompatible with "__nounwind __int ...
- 换晶振导致stm32串口数据飞码的解决办法
一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串 ...
- win10笔记本电脑连wifi显示“无internet,安全”解决办法
吹一波, 不出意外的话,这应该是网上最全最详细的解决办法......毕竟妹子的电脑遇到了问题,咱一定要给她解决啊. 问题描述:连上了WiFi,显示“无Internet,安全”.但实际上她的电脑是有网的 ...
随机推荐
- 深入理解:JavaScript原型与继承
深入理解:JavaScript原型与继承 看过不少书籍,不少文章,对于原型与继承的说明基本上让人不明觉厉,特别是对于习惯了面向对象编程的人来说更难理解,这里我就给大家说说我的理解. 首先JavaScr ...
- 希尔排序(Shell)
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序, ...
- Android时区及语言代码
1. 设置默认时区 PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.timezone=Asia/Shanghai\ 注:搜索“persist ...
- Oracle与MySQL的区别
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...
- Hadoop概念学习系列之Hadoop 生态系统(十二)
当下 Hadoop 已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有 Hadoop 的身影.下图是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出现的各种数 ...
- CMMI4级实践中的5个经典问题及解答
这五个问题相当经典而且比较深,需要做过CMMI4.5级的朋友才能看懂这些问题.这5个问题是一位正在实践CMMI4级的朋友提出来的,而解答则是我的个人见解. 五个疑问是: A.流程,子流程部分不明白 ...
- 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...
- json数组的序列化和反序列化json数组的序列化和反序列化
如题,我就不多说了,自己看代码的,很好理解 using System; using System.Collections.Generic; using System.Web; using System ...
- Play Framework 第一个应用
熟悉的Hello World 新创建一个工程,了解下重要文件的结构 .\app controllers\models\views 目前比较流行的MVC架构 .\conf application.con ...
- Git的常用操作,记录下
首先生成密钥 ssh-keygen -t rsa -C "your_email@youremail.com" 然后打开workdir,敲 git init 设置一个远端库 git ...