如何用单片机应用实例普通I/O口检测上升沿或下降沿

查看: 4736|回复: 11
如何实现上升沿、下降沿分别判断?
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
有没有哪位知道,对于一个IO口的输入,怎样判断输入的上升沿,下降沿?
我想实现对一个IO口输入上升下降沿的判断,在上升沿出现后,处理A任务,在出现下降沿后,处理B任务。
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
在线时间137 小时
定时器输入捕获可以调整上升沿触发或是下降沿触发。
如果用普通IO口那就需要不停的读引脚电平。
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
回复【2楼】ricefat:
---------------------------------
我现在需要的是既要捕获上升沿事件的发生,又要捕获得下降沿事件的发生,然后还要分清是上升沿还是下降沿
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
金钱113002
在线时间820 小时
回复【3楼】chyw12:
---------------------------------
即设置上升沿又下降沿触发就可以得到任意边沿触发。
然后在中断里面,通过SR寄存器,判断此次中断是上升还是下降沿.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
谢原子哥指点,请问原子哥是哪一个中断状态寄存器能标明上升沿下降沿出发中断?刚才看了一下手册貌似没看到……
你说的GPIO输入数据寄存器IDR吗?
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
金钱113002
在线时间820 小时
回复【5楼】chyw12:
---------------------------------
有2组寄存器,
//EXTI-&EMR|=1&&BITx;//不屏蔽line&BITx上的事件&(如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
& if(TRIM&0x01)EXTI-&FTSR|=1&&BITx;//line&BITx上事件下降沿触发
if(TRIM&0x02)EXTI-&RTSR|=1&&BITx;//line&BITx上事件上升降沿触发
如果FTSR和RTSR都设置为1,那么就是任意电平触发。&
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
回复【6楼】正点原子:
---------------------------------
原子哥是说在中断里面加上
if(TRIM&0x01)EXTI-&FTSR|=1&&BITx;//line&BITx上事件下降沿触发&
if(TRIM&0x02)EXTI-&RTSR|=1&&BITx;//line&BITx上事件上升降沿触发&
这两句进行判断就可以得出是哪个中断吗? 这两句没读太明白……
不知原子哥说的TRIM是个什么寄存器?
FTSR,RTSR是事件选择寄存器吧,用来选择要设置为何种触发,而不能在中断发生后标示那种事件触发中断。
EMR事件屏蔽寄存器也不能用来判断吧?&
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
金钱113002
在线时间820 小时
回复【7楼】chyw12:
---------------------------------
你理解错了
我是说:
if(TRIM&0x01)EXTI-&FTSR|=1&&BITx;//line&BITx上事件下降沿触发&
if(TRIM&0x02)EXTI-&RTSR|=1&&BITx;//line&BITx上事件上升降沿触发&
这两个,都设置,就可以设置任意电平触发。
这两句代码摘自我们提供&的sys.c里面的中断设置函数Ex_NVIC_Config里面的代码。
TRIM是个变量,如果TRIM=1,那么就是下降沿触发。
如果TRIM=2,那就上升沿触发。
如果TRIM=3,那就任意电平触发了....&
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
回复【8楼】正点原子:
---------------------------------
哦,不好意思是我理解错了。
如果我已经设置为任意沿触发了,等到中断发生以后我怎么判断这个中断是上升沿触发的还是下降沿触发的呀?
有没有哪个寄存器的哪个位置能标示这一信息?
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
金钱113002
在线时间820 小时
回复【9楼】chyw12:
---------------------------------
貌似SR&不行。
判断IO电平吧。如果上升沿,肯定IO就是高电平了。
如果下降沿,IO就应该是低电平。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 104, 距离下一级还需 96 积分
在线时间0 小时
回复【10楼】正点原子:
---------------------------------
哦,只能这样了,谢谢原子哥帮助哈
奋斗的小鸟,不是愤怒的小鸟
主题帖子精华
新手上路, 积分 12, 距离下一级还需 38 积分
在线时间3 小时
看了每一条信息,帮助很大
Powered by& I/O端口主要功能是用于内部单片机和外设进行通信的媒介。一个端口最多有8个引脚。
&每个引脚都是独立的,也就是说当我们对其中一个引脚进行操作的时候不会影响到其他引脚。我们可以对引脚单独设置为数字输入或者数字输出。其中有些引脚还可以用着模拟输入和和外设中断。同一时刻只有一个功能映射到同一个引脚。
GPIO主要功能(我只列举我比较陌生的)
输入兼容5v电压
I/O口工作电压范围为1.6V到Vddiomax
I/O口的配置和使用
IO口常用的寄存器有5个ODR &IDR &DDR &CR1 &CR2
数据输出寄存器ODR & &输入寄存器IDR & & 和方向寄存器DDR & & 控制寄存器1CR1 & &控制寄存器2CR2
需要注意的是这里的引脚位和寄存器的位是一一对应的,即寄存器中的位n对应于口的引脚n。
通过这个表我们可以看出配置好一个I/O口只需要DDR方向寄存器,CR1控制寄存器,和CR2控制寄存器
下面我们先来看看输入模式
将方向寄存器DDRx位清零就选择了输入模式,在该模式下读IDR寄存器的位将返回对应I/O口引脚上的电频值。
理论上可以通过软件配置得到4中不同的输入模式:悬浮不带中断输入,悬浮带中断输入,上拉不带中断输入,上拉带中断输入。但是在实际情况下不是所有的I/O口都具有外部中断和上啦,我们应该参考数据手册中关于每个引脚的实际硬件性能描述。
悬浮输入或者上拉输入
端口的输入功能是不会自动选择,用户可以通过写相应的外设寄存器的控制位来选择输入功能,通过上表可以看出我们可以通过设置DDR和CR1寄存器的相应位来配置输悬浮输入或者上拉输入。
我们可以在I/O口引脚为输入模式时通过设置PX_CR2寄存器的相应位来配置某个I/O作为外部输入中断模式。在这种配置下,I/O引脚上的一个信号沿或者是低电频会产生一个中断请求。
在EXTI_CR[2:1]J寄存器中对于每一个中断向量都可以单独编程为上升沿或者下降沿触发。
外部中断只对I/O口设置为输入模式才有效
可以通过对PX_CR2寄存器的相应位进行编程来单独使能/关闭外部中断功能,复位后外部中断是关闭的。
&ADC外设可以选择某些I/O口作为模拟输入通道。当使用模拟通道的时候,ADC_TDR寄存器的输入施密特触发器必须被关闭。
施密特触发器
部分I/O口包括一个内嵌的输入施密特触发器。可以通过ADC_TDR施密特触发器禁止寄存器来使能/禁止施密特触发器
&将DDRX位置1就选择了输出模式。在该模式下向ODR寄存器的位写入数据将会通过锁存器输出对应数字值到I/O口。读IDR的位将会返回相应的I/O引脚电频值。通过软件配置CR1,CR2寄存器可以得到不同的输出模式:上拉输出,开漏输出。
& 输出功能为单片机输出到外部或者I/O引脚提供一个方便的操作方法,输出功能使能时,输出功能模块接管了输出锁存寄存器(PX_ODR)并强制PX_ODR相应的位为1
输出功能可以是上拉或者开漏输出,取决于外设本身和控制寄存器1(PX_CR1),输出频率取决于控制寄存器2(PX_CR2)的值。
考虑达到最佳性能,SPI输出引脚必须设置为上拉,快速摆率. &uart_TX可以被配置为上拉或者开漏外部带上啦来实现从机的配置。
&摆率输出可以使用CR2的相应位通过软件控制。置位CR相应位选择为10MHZ的输出频率。该功能可以在开漏也可以用在带上啦的输出模式I/O口,输出类型为O3和O4
复位后的默认配置
&复位之后,所有的引脚都是悬浮输入模式。
没有使用的引脚
& 没有使用的引脚必须连接到一个固定的电频。
低功耗模式
低功耗模式对GPIO口的影响
等待(Wait) & 对I/O口无影响。外部中断可以腮红MCU退出等待(Wait)模式
停机(Halt) & 对I/O口无影响。 外部中断可以说使MCU从停机模式(Halt)唤醒
GPIO寄存器
GPIO 寄存器表和复位值
以上寄存器值的描述是我复制stm8s手册描述。
阅读(...) 评论()51鍗曠墖鏈轰腑濡備綍妫}

我要回帖

更多关于 单片机c语言应用100例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信