这几天在用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中断无电平触发的解决办法的更多相关文章

  1. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  2. cmd命令行中无pip命令的解决办法

    cmd命令行中无pip命令的解决办法 只需简单的两步即可,按顺序执行以下命令(在cmd中): python -m ensurepip python -m pip install --upgrade p ...

  3. logstash file输入,无输出原因与解决办法

    1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...

  4. Android开发之ADT中无Annotation Processin的解决办法

    使用ButterKnife的时候,进入ADT中设置的时候发现在Java Compiler展开后无Annotation Processin 解决办法: 安装插件:Juno - http://downlo ...

  5. Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法

    昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...

  6. jquery中动态新增的元素节点无法触发事件解决办法

    在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“re ...

  7. IAR升级之后,编译stm32官方工程报错的解决办法

    IAR升级之后,打开stm32官方例程,编译时提示如下错误: Error[Pe147]: declaration is incompatible with "__nounwind __int ...

  8. 换晶振导致stm32串口数据飞码的解决办法

    一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串 ...

  9. win10笔记本电脑连wifi显示“无internet,安全”解决办法

    吹一波, 不出意外的话,这应该是网上最全最详细的解决办法......毕竟妹子的电脑遇到了问题,咱一定要给她解决啊. 问题描述:连上了WiFi,显示“无Internet,安全”.但实际上她的电脑是有网的 ...

随机推荐

  1. 关于处理addGiftmoneyAction接口报错问题的总结

    昨天UniUser中AddGiftmoneyAction接口在被调用时抛出异常,曾哥让我来解决这个问题,虽然最后查出是路径问题,但是由于解决问题 的思路不够清晰,导致浪费了大量的时间和精力,也没有给出 ...

  2. C#联合Union的实现方式

    一.基础篇 C#不像C++,他本身是没有联合Union的,但是可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute.LayoutKind以及FieldO ...

  3. 刷新ALV定位到当前记录行

    如果使用"REFRESH_TABLE_DISPLAY"刷新ALV后,记录会跳到第一行,以下代码可以使记录仍然定位在当前行 DATA ls_stable TYPE lvc_s_stb ...

  4. AE_复制当前图层

    private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { int layercount = axMapControl2. ...

  5. SharePoint 2013 BCS

    http://liandove.blog.51cto.com/176335/1247410 http://liandove.blog.51cto.com/176335/1249339 http://l ...

  6. 操作系统开发系列—12.a.从Loader到内核 ●

    Loader要做两项工作,我们先来做第一项,把内核加载到内存: 1.加载内核到内存. 2.跳入保护模式. 首先编译无内核时: nasm boot.asm -o boot.bin nasm loader ...

  7. 遍历NSArray, NSDictionary, NSSet的方法总结

    1,for循环读取 NSArray: NSArray *array = /*…*/ ; i<array.count; i++) { id object = array[i]; // do sth ...

  8. 自定义Dialog宽度占满屏幕

    一.自定义Dialog继承Dialog public class MyDialog extends Dialog { 二.为Dialog设置样式 在style中建立新样式继承 @android:sty ...

  9. [Android] android studio 2.0即时运行功能探秘

    即时运行instant Run是android studio 2中,开发人员最关心的特性之一 在google发布studio 2.0之后,马上更新体验了一把,然而发现,并没快多少,说好的即时运行呢? ...

  10. ios UIScrollView 中控件自动增加间隔

    设置 self.automaticallyAdjustsScrollViewInsets=FALSE; 去除自动间隔功能