【ufun】开发板使用-点亮LED(库函数)

点亮一个LED灯就像是程序里的Holle world,可以了解整个流程。首先说一下STM32的内部资源flash(放程序的地方),RAM(放数据的地方),各种总线(放好多功能的地方比如ADC),我一直认为单片机就是一个小电脑,它里面有CPU,有运算器,有硬盘(flash),有内存(RAM),还有各种接口(外围总线上挂的外设)如图

接下来说最小系统

那么什么是最小系统呢?单片机的最小系统也叫做单片机最小应用系统,是指用最小的原件组成单片机可以工作的系统。单片机最小系统的三要素包括电源,晶振,复位电路,如上图所示。电源,很好理解,电子设备都需要电。目前单片机的电源主要是5V和3.3V,此外还有更低电压。STM32F103采用的是3.3V。稳压这个板子用的是1117-3.3。图中有1117的应用电路。晶振,又称晶体振荡器,存这个名字我们可以看出来,它注定一生都要不停的振荡的。他的作用就是为单片机系统提供基准时钟信号,类似于我们部队训练时喊口号的人,单片机内部所有的工作都是以这个时钟信号为步调来进行工作的。现在有的单片机是不需要外置晶振也可以工作,比如stc的15系列,因为他们已经集成在芯片内部了。stm32如果不需要精确的时钟也可以用它的内置晶振。我们注意到,这个板子上有两个晶振,一个是12M的一个是32.768k。大的那个是有源晶振,小的那个是无源晶振,小的那个是为低速设备提供时间的,比如RTC,如果不需要,可以不接。大的那个是为系统提供时钟的。当然大的那个也可以用8M的无源晶振,接法和那个小的一样。stm32可以倍频,他可以把8M倍频成72M所以stm32单片机的处理速度比较快。

复位电路,如何起作用的先不说,先说一下作用。单片机复位一般是 3种情况:上电复位、手动复位、程序自动复位。假如我们的单片机程序有 100 行,当某一次运行到第 50 行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据可能还没丢失。那么下次打开设备的时候,我们希望单片机能正常运行,所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟我们打开电脑电源开电脑的过程是一致的。 

当我们的程序运行时,如果遭受到意外干扰而导致程序死机,或者程序跑飞的时候,我们就可以按下一个复位按键,让程序重新初始化重新运行,这个过程就叫做手动复位,最典型的就是我们电脑的重启按钮。

当程序死机或者跑飞的时候,我们的单片机往往有一套自动复位机制,比如看门狗,具体应用以后再了解。在这种情况下,如果程序长时间失去响应,单片机看门狗模块会自动复位重启单片机。还有一些情况是我们程序故意重启复位单片机。

LED(light-emitting diode),即发光二极管,俗称 LED 小灯,它的种类很多,参数也不尽相同,我们板子上用的是普通的贴片发光二极管。这种二极管通常的正向导通电压是 1.8V到 2.2V 之间,工作电流一般在 1mA~20mA 之间。其中,当电流在 1mA~5mA 之间变化时,随着通过 LED 的电流越来越大,我们的肉眼会明显感觉到这个小灯越来越亮,而当电流从5mA~20mA 之间变化时,我们看到的发光二极管的亮度变化就不是太明显了。当电流超过20mA 时, LED 就会有烧坏的危险了,电流越大,烧坏的也就越快。所以我们在使用过程中应该特别注意它在电流参数上的设计要求。

这个是板载的RGB小灯,现在先不管那个pwm就当普通的IO口就行。LED的亮灭是需要压差的,正好stm32可以输出个导通电压3.3V。

OK现在可以上代码了。

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void GPIO_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct; //定义一个gpio结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能时钟(为了节省功耗,时钟默认关)
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置为上拉推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //定义0引脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //管脚速度
	GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化gpio
}
int main(void)
{
	GPIO_init(); //初始化GPIO
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);//复位gpio
	while(1);
}

效果

发布了25 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/little_engineer/article/details/88944354