GPIO设置及滴答定时器设置测试

2019-10-16 05:13发布

初学单片机,最基本的方法都是从IO口控制LED开始的,当然这里也不例外,但这里将更深入来讲解IO口,并使用系统的滴答定时器来做延时定时,而不是通常我们看到的众多泛泛而谈的例程。 首先我们要有一个整体的思路,控制LED就是要控制IO口的输出,定时让IO口输出01来达到LED灯闪烁的功能。 控制IO口输出需要配置IO口的输出方式,对于GPIO的配置有8种模式:1.      浮空输入;2.      模拟输入;3.      上拉输入;4.      下拉输入;5.      开漏输出;6.      推挽输出;7.      复用开漏输出;8.      复用推挽输出; 浮空输入:一般多用于外部按键输入,在该输入状态下,IO口的电平状态完全由外部输入决定,如果该引脚悬空,那么该端口的电平是不确定的;模拟输入:应用ADC模拟输入;上拉输入:IO内部上拉电阻输入;下拉输入:IO内部下拉电阻输入;开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适用于做电流型的驱动,其吸收电流的能力相对强;开漏形式的电路有以下几个特点:1.      利用外部电路的驱动能力,减少IC内部的驱动。2.      一般用于连接不同电平的器件,用来匹配电平,因为开漏引脚不外接上拉电阻时,只能输出低电平,如需要同时具备输出高电平的功能,则需要接上拉电阻,这样就可以通过改变上拉电源的电压,来达到改变传输电平的功能,如上拉电阻可以提供TTL/CMOS电平输出等。3.      会带来上升沿的延时,因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。4.      可以将多个开漏输出的IO口连接到一条线上,通过一只上拉电阻,在不增加如何器件的情况下,形成“与逻辑”关系。 推挽输出:可以输出高低电平,连接数字器件;高低电平由IC的电源决定。输出既可以向负载灌电流,也可以从负载抽取电流;既提高电路的负载能力,也提高开关速度。 根据我们的硬件设计,我们这里将控制LEDIO口配置为推挽输出方式。程序编程步骤如下:1.初始化需要用到的IO口,配置为推挽输出方式,并设置IO口速度为50MHz,如下图所示: 1_1.jpg 2.设置滴答定时器,并使能该定时器的中断功能,设置方法如下图所示: 2-1.jpg 这里通过设置TICKINT位来设置启用滴答定时器的中断功能。3.滴答定时器的中断响应程序,直接让IO口值取反,如此则没定时一段时间,IO口的状态就会反转,如我们将定时时间设置为1000ms,那么将没隔1S将看到LED闪烁。 程序注意及重点说明:1.滴答定时器的中断使能及延时时间说明;设置中断响应只需要设置TICKINT这个位就可以了,设置延时值需要将计算出来的数值加载到LOAD寄存器。2.设置IO口的输出方式及速度;IO口的输出方式根据硬件来确定,IO口输出速度要看具体的程序要求,如要设置IO口定时1us来反转电平,那么IO口的速度就不能设置为2MHz,需要将IO口速度设置为50MHz,否则IO口的响应速度达不到要求。如下图所示是用示波器测试出1us电平反转的实测图,(要定时1us时间需要将滴答定时器的LOAD值修改,将除数8000修改为8000000)由图中可以看出,周期大概还多出0.08us的时间,这个是因为指令的执行还需要时间,指令的执行时间等于6个时钟周期,即6x1/72=0.08us,其中72为系统时钟速度。 3-1.png 需要源代码或有问题咨询的朋友添加QQ707372788关注微信公众号:嵌入式STM32软硬件开发,来了解更多关于STM32的开发吧,想学的速度来啊。
0条回答

一周热门 更多>