树树34 树树34
关注数: 9 粉丝数: 53 发帖数: 795 关注贴吧数: 31
arduino端口控制方案 端口寄存器允许在Arduino板上更低级和更快地操纵微控制器的i / o引脚。Arduino板上使用的芯片(ATmega8和ATmega168)有三个端口: B(数字引脚8到13) C(模拟输入引脚) D(数字引脚0到7) 每个端口由三个寄存器控制,这三个寄存器也是arduino语言中定义的变量。DDR寄存器确定引脚是INPUT还是OUTPUT。PORT寄存器控制引脚是高电平还是低电平,PIN寄存器通过pinMode()读取设置为输入的INPUT引脚的状态。ATmega8 和 ATmega168 芯片的地图显示了端口。较新的Atmega328p芯片完全遵循Atmega168的引脚排列。 DDR和PORT寄存器可以写入和读取。PIN寄存器对应于输入状态,只能读取。 PORTD映射到Arduino数字引脚0到7 DDRD - 端口D数据方向寄存器 - 读/写 PORTD - 端口D数据寄存器 - 读/写 PIND - 端口D输入引脚寄存器 - 只读 PORTB映射到Arduino数字引脚8到13两个高位(6和7)映射到晶体引脚,不可用 DDRB - 端口B数据方向寄存器 - 读/写 PORTB - 端口B数据寄存器 - 读/写 PINB - 端口B输入引脚寄存器 - 只读 PORTC映射到Arduino模拟引脚0到5.引脚6和7只能在Arduino Mini上访问 DDRC - 端口C数据方向寄存器 - 读/写 PORTC - 端口C数据寄存器 - 读/写 PINC - 端口C输入引脚寄存器 - 只读 这些寄存器的每一位对应一个引脚; 例如,DDRB,PORTB和PINB的低位指的是引脚PB0(数字引脚8)。有关Arduino引脚编号到端口和位的完整映射,请参见芯片图:ATmega8,ATmega168。(注意,端口的某些位可用于除i / o之外的其他位;请注意不要更改与它们对应的寄存器位的值。) 例子 参考上面的引脚图,PortD寄存器控制Arduino数字引脚0到7。 但是,您应该注意,引脚0和1用于串行通信以编程和调试Arduino,因此通常应避免更改这些引脚,除非需要串行输入或输出功能。请注意,这可能会干扰程序下载或调试。
单片机的引脚中断 STM32 的每个 IO口都可以作为中断输入,要把 IO口作为外部中断输入, 有以下几个步骤: 1) 初始化 IO 口为输入。 这一步设置你要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入,也可以设 置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触 发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一 定程度防止外部干扰带来的影响。 2) 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。 STM32 的 IO 口与中断线的对应关系需要配置外部中断配置寄存器 EXTICR,这样我们要 先开启复用时钟,然后配置 IO 口与中断线的对应关系。才能把外部中断与中断线连接起来。 3) 开启与该 IO 口相对的线上中断/事件,设置触发条件。 这一步,我们要配置中断产生的条件, STM32 可以配置成上升沿触发,下降沿触发,或者 任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配 置,同时要开启中断线上的中断。这里需要注意的是:如果使用外部中断,并设置该中断的 EMR 位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置 EMR,软件仿真就可以 进入中断服务函数,并且硬件上也是可以的。建议不要配置 EMR 位。 4) 配置中断分组(NVIC),并使能中断。 这一步,我们就是配置中断的分组,以及使能,对 STM32 的中断来说,只有配置了 NVIC 的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。
STM32 RTC时钟介绍,刚学的,发出来大家一起看看 STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运行来看,它是STM32中唯一一个具有这个功能功能的外设.(RTC外设的复杂之处不在于它的定时,而在于它掉电还可以继续运行的特性) 所谓掉电,是指电源Vpp断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚街上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBA都掉电,那么备份域中保存的所有数据都将丢失.(备份域除了RTC模块的寄存器,还有42个16位的寄存器可以在VDD掉电的情况下保存用户程序的数序,系统复位或电源复位时,这些数据也不会被复位). 从RTC的定时器特性来说,它是一个32位的计数器,只能向上计数.他使用的时钟源有三种,分别为: 1,高速外部时钟的128分频:HSE/128; 2,低速内部时钟LSI; 3,低速外部时钟LSE; 使用HSE分频时钟或者LSI的时候,在主电源VDD掉电的情况下,这两个时钟来源都会受到影响,因此没法保证RTC正常工作.所以RTC一般都时钟低速外部时钟LSE,频率为实时时钟模块中常用的32.768KHz,因为32768 = 2^15,分频容易实现,所以被广泛应用到RTC模块.(在主电源VDD有效的情况下(待机),RTC还可以配置闹钟事件使STM32退出待机模式).
1 下一页