STM32(8):番外篇之“上升沿 vs. 下降沿”

D触发器的约定

D触发器里面约定的时钟是上升沿敏感(postedge),reset(重置)是下降沿敏感(negedge);这种是约定俗称;如果时钟改成是下降沿敏感,就是反向D触发器;上升沿下降沿互换在绝大多数场景下是没有问题的,但是有些特殊场景是不建议使用的。而且建议尽量不要使用双沿触发,即对于时钟的触发最好同步设置为上升沿/下降沿触发。

双沿触发的场景

场景描述

下面使用两个D触发器来说明双沿触发问题,如下图所示是两个D触发器,其中D(ata)口用于接收数去,Q口用于输出数据,clk口用于接收时钟脉冲;下面是圈A、圈B两个D触发器,其中圈A的D口接收数据,通过圈A的Q口进行输出,输出到圈B的D口;A的时钟和B的时钟同步,不过A的时钟是上升沿敏感,B的时钟是下降沿敏感,reset可以忽略,和本次内容无关:
在这里插入图片描述

宽沿场景

A的端口用A_D,A_Q来表示,B的端口用B_D,B_Q来表示;他们的时序如下,描述的是

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用[1]:在STM32单片机中,每一个GPIO都可以被设置为外部中断输入。根据引脚序号的不同,可以将外部中断分为不同的组,共有16组。每一组中同一个时刻只能有一个中断源工作,所以STM32单片机最多允许同时有16个外部中断。[1] 引用[2]:在D触发器中,约定的时钟是上升沿敏感(postedge),而重置(reset)是下降沿敏感(negedge)。这是一种约定俗称的规定。如果时钟改成下降沿敏感,就是反向D触发器。在绝大多数场景下,上升沿下降沿互换是没有问题的,但在一些特殊场景下可能不建议使用。同时,建议尽量不要使用双沿触发,即对于时钟的触发最好同步设置为上升沿下降沿触发。[2] 引用[3]:在使用STM32F4的UCOSIII操作系统中,有人发现当触发了相应的外部输入中断时,会多次进入外部中断处理函数。通过检查变量的变化情况,发现每次外部中断输入,变量会有多次变化。为了解决这个问题,他们改变了思路,不再使用外部中断检测上升沿下降沿,而是采用检测变量前后变化的方式来检测上升沿下降沿。具体的代码如下所示:[3] ```c while(1) { //检测外部下降沿 switch_flag_pa1 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1); if((switch_flag_pa1 == 0) && (switch_flag_old_pa1 == 1)) { //处理逻辑 } switch_flag_old_pa1 = switch_flag_pa1; //检测外部上升沿 switch_flag_pb1 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1); if((switch_flag_pb1 == 1) && (switch_flag_old_pb1 == 0)) { //处理逻辑 } switch_flag_old_pb1 = switch_flag_pb1; } ``` 这段代码通过检测变量的前后变化来判断是否发生了上升沿下降沿。如果变量在前后两次读取中发生了变化,就说明发生了相应的边沿触发事件。[3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张叫兽的技术研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值