初学单片机,最基本的方法都是从IO
口控制LED
开始的,当然这里也不例外,但这里将更深入来讲解IO
口,并使用系统的滴答定时器来做延时定时,而不是通常我们看到的众多泛泛而谈的例程。 首先我们要有一个整体的思路,控制LED
就是要控制IO
口的输出,定时让IO
口输出0
和1
来达到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
的电源决定。输出既可以向负载灌电流,也可以从负载抽取电流;既提高电路的负载能力,也提高开关速度。 根据我们的硬件设计,我们这里将控制LED
的IO
口配置为推挽输出方式。程序编程步骤如下:1.
初始化需要用到的IO
口,配置为推挽输出方式,并设置IO
口速度为50MHz
,如下图所示:
2.
设置滴答定时器,并使能该定时器的中断功能,设置方法如下图所示:
这里通过设置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
为系统时钟速度。
需要源代码或有问题咨询的朋友添加QQ707372788。关注微信公众号:嵌入式STM32软硬件开发,来了解更多关于STM32的开发吧,想学的速度来啊。
一周热门 更多>