ps:使用的32型号是.stm32f407zgt
原本我是不打算继续更32的,但是最近的做的一些东西需要用到arm。所以想想就复习一下32吧!毕竟当初学的也确实不咋地。
32系列我不会用很官方的话来讲,我会用自己的理解最粗暴直白的表达出来。有什么错误欢迎指正,企鹅:918619587
首先我们解释一下什么是GPIO,GPIO就是通用输入输出。这莫理解可能有点抽象,直接上例子吧!最简单的点亮LED灯实验。
首先我们来看一下32开发板的部分原理图:
现在我们要点亮LED4这个灯,通过上面这个配套的原理图可以看到LED4对应的引脚为PC0。这个LED4是上面呢,它属于片上外设。我们要使用这个灯,是不是首先要唤醒它啊,就像你使用电磁炉一样,是不是要先插电,然后按下开机才能使用啊。所以片上外设也一样我们在使用它之前要先给他唤醒
我们接着看一下设备概述
从这个图中标注部分可以看到,引脚PC0对应的是GPIOC,而GPIOC挂在AHB1这个时间线上,所以你要唤醒这个串口,那么就唤醒这个时间线(AHB1).我们来看一下AHB1
在上图中GPIOC对应的寄存器是2,所以我们要开AHB1这条线上的编号为2的寄存器。
这样我们就给io口唤醒了,然后我们要使用io口就要进行配置,就像螺丝刀一样,手柄是不变的,但是不同型号的螺丝要用不同的刀头,所以我们要配置自己需要的刀头。
我们来看一下GPIO的配置:
我们看一下第一个输出模式,这里我们选择通用,注意到这里是两位控制一个端口模式,足以到GPIOC对应的是PC0,所以0x2=0,我们选择0,1这两个(假设是PC10,那就是10x2=20,使用的是19,20这两个)
然后我们看下一个:
我们选择输出推挽,看寄存器根据PC0,则是第0号寄存器控制,只需要给第0号寄存器置0即可
输出速度当然选择最快的了,因为是PC0引脚所以是0这个寄存器,因为是两位控制所以是01这两个寄存器,选择快速,将01这两个寄存器分别置为1,0即可
上下拉我们选择无上下拉即可
接下来我们看一下代码:
//开时钟
RCC->AHB1ENR |= (1<<2);
//输出模式
GPIOC->MODER &= ~(0x3<<0);
GPIOC->MODER |= (0x1<<0);
//输出类型
GPIOC->OTYPER &= ~(0x1<<0);
//输出速度
GPIOC->OSPEEDR &= ~(0x3<<0);
GPIOC->OSPEEDR |= (0x2<<0);
//无上下拉
GPIOC->PUPDR &= ~(0x3<<0);
将代码放到main函数里面这就是第一个最简单的程序,LED4亮灯。
其中可能有很多不明白,不明白就先记住,后面就慢慢的理解了。
你学会了吗?根据我提供的图片你可以配置LED1,2,3吗?做一个流水灯?
-END-
欢迎大家交流指正。谢谢