在前几篇文章,GPIO的使用:点亮LED!中只讲述了IO口的输出,并没有输入,因为IO作为输入我建议采用中断方式,可以大大减轻CPU的运行时间。最常用的就是按钮的功能了,当然还有和其他芯片通信的功能。

前篇文章讲过GPIO可以通过寄存器设置为中断输入。(参考http://blog.csdn.net/devintt/article/details/50818494)

配置模式 DDR CR1 CR2 配置模式 上拉电阻
输入 0 0 0 悬浮输入  OFF
0 1 0 上拉输入 ON
0 0 1 中断悬浮输入  OFF
0 1 1 中断上拉输入 ON
输出 1 0 0 开漏输出  OFF
1 1 0 推挽输出
1 x 1 输出(最快速度10MHZ) 
x x x 真正的开漏输出 未采用

这里我们选用PC3作为外部中断

  1. void EXIT_GPIO_Init(void)
  2. {
  3. PC_DDR &= 0xf7;
  4. PC_CR1 |= 0x08; // 将PC3设置成中断上拉输入
  5. PC_CR2 |= 0x08;
  6. EXTI_CR1 = 0x20; //PC设置为下降沿触发
  7. }

这里需要注意的是,中断向量指定的是PC,也就是说 如果有几个PC口都设置为中断的话,只要其中一个中断响应,就会进入同一个函数 。

如果你有好几个按键在同一个port口的话,可以在进入中断函数之后做一个IO口状态的获取,判定哪个IO进行了中断,再对应相应的操作。

  1. #pragma vector = EXIT_PORTC_vector //0x07
  2. __interrupt void EXIT_PORTC_RQHandler(void) //中断服务函数
  3. {
  4. if((PC_IDR & 0x08)==0)
  5. {
  6. delay_nms(50); //延时50ms,消抖
  7. if((PC_IDR & 0x08)==0) //再判断是否按下
  8. {
  9. while(!(PC_IDR & 0x08)); //松手检测
  10. //TODO
  11. }
  12. }
  13. }

由于使用了机械按钮,一般都会有一个机械抖动的过程,所以进入了中断函数之后,我们先做一个消抖处理,这样就可以判断按钮的状态,同时也防止抖动造成了多次中断函数的反复进入。最后加入松手检测,判定按钮动作完成。(TODO这里就可以加入你需要的操作了)

stm8s开发(六) EXIT的使用:做一个外部中断的按钮!相关推荐

  1. 【连载】【FPGA黑金开发板】NIOS II那些事儿--外部中断实验(五)

    声明:本文为原创作品,版权归本博文作者所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 简介 这一节,我们通过来讲解一下NIOS II的硬件中断的内容,同时借助这 ...

  2. 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序

    开发制作小程序可以让商家更方便地引流获客.增加线上订单.尤其是今年小程序直播大火,商家有了新的运营私域流量的利器,因此做一个电商带直播功能的小程序是很有用的. 如何开发一个这样的小程序呢?流程如下: ...

  3. 测试开发成长学习路线--如何做一个DevOps流水线上的开发测试

    大家知道,测试开发或者开发测试范围很大,一个人的精力和你当前的项目经历,决定了你属于某一个领域的具体的测试开发的工作.在这里,我不纠结测试开发和开发测试有何不同,有一个叫法罢了.今天这里要讨论的是如何 ...

  4. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...

  5. 【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Zeee 前言: 首先,感谢灵动微电子与极术社区给予宝贵的试用机会.借助本次对Plus-F ...

  6. 用 CSS 做一个美化的 button 按钮

    效果图: <head> <meta charset="utf-8"> <title>无标题文档</title><style&g ...

  7. 如何做一个带有复制功能的按钮?

    1.直接上代码 <input id="copied" type="text" value="123456" style="m ...

  8. 蚂蚁金服六轮面试,从一个中游的公司跳槽的阿里P7,我是怎么撑过来的?

    本人开发六年多,从一个中游的公司跳槽的阿里P7,其实这六轮的面试下来整体感觉还是不错的,在这之前我其实面试的其他公司的时候很烂. 第一轮:团队面试 第一轮基本上是你的团队成员面试你,是和你同级或者高你 ...

  9. css3 做一个会动的菜单 menu 按钮动画效果

    css3 做一个会动的菜单 menu 按钮动画效果 需要做一个会的动画按钮效果,小前端部知道如何实现,我看了一眼需要的效果,给他写了一个简单的 demo. 设计师给了俩图片,一个是 三 这样的菜单图标 ...

最新文章

  1. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
  2. 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。...
  3. 安师大计算机与信息学院导师,安徽师范大学数学计算机科学学院导师介绍:罗永龙...
  4. 程序猿老公去米国参加 WWDC,顺便想带渡老婆蜜月,如何办签证?
  5. linux以非root身份运行,以非root用户身份在linux中运行mono-service
  6. C# 10 新特性 —— Lambda 优化
  7. Revit 2011二次开发“弹出对话框,得到输入的值”
  8. 【Flink】FlinkException The file LOG does not exist on the TaskExecutor
  9. Java 拷贝,你能说出个 123 么?
  10. 操作系统高响应比优先调度算法代码_进程调度
  11. Ora-00600 错误的代码含义及常用查询
  12. 软件类配置(五)【强化学习算法框架-Ubuntu16.04安装谷歌Dopamine及初步测试】
  13. php 串行化与json(转)--很不错的文章
  14. unity找到特定一个物体的子物体,多个子物体有相同的名称
  15. bpsk调制及解调实验_调制的理解
  16. AI 全自动玩斗地主,靠谱吗?Douzero算法教程
  17. 修改Android模拟器存储位置,更改AndroidAVD模拟器创建路径位置的方法
  18. 美国克莱姆森大学计算机专业排名,美国西北大学计算机专业排名怎么样?
  19. 达摩院高清人像美肤模型ABPN CVPR论文深入解读
  20. ArcGIS水文分析实战教程(5)细说流向与流量

热门文章

  1. 出场率比较高的一道多线程安全面试题
  2. 利用Comet4J 及时推送消息
  3. matlab计算原点矩,关于用matlab求样本均值方差以及k阶原点矩的matlab程序
  4. 二层交换配置完ping失败_设置完端口聚合之后就ping不通了!!!
  5. python os模块下载_Python OS模块目录文件处理
  6. oracle字段求和_oracle大纲
  7. am335x linux内核烧写_实时 Linux 抖动分析 Step by step
  8. 全球规模最大的全浸没式液冷数据中心落户杭州余杭
  9. UPS技术培训系统方案
  10. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式