还记得大学时候学嵌入式的第一个实验就是流水灯,那个时候我已经接触了GPIO(General-purpose I/Os),但是那时候只是简单复制粘贴代码而已并没有学到很多的东西。
GPIO有4个32位配置寄存器,分别是GPIOX_MODER,GPIOX_OTYPER,GPIOX_OSPEEDR和GPIOX_PUPDR,2个32位数据寄存器IDR和ODR,1个32位设置/复位寄存器BSRR,1个32位锁存器LCKR,2个32位功能选择寄存器AFRH,AFRL(名称的翻译都是本人私自翻译,原文见STM32F2XX数据手册),
下面是它一个基本结构图
因为比起硬件我还是对软件熟悉一点,所以我把主要精力用在研究代码上面,通过对代码的理解掌握如何设置寄存器位从而在硬件方面也有所突破。
下面贴出项目中的一段GPIO初始化配置代码:
void LEDInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* LED1 LED2 LED3 GPIO Config */
/* GPIOA ande GPIOC Periph clock enable */
RCC_AHB1PeriphClockCmd(CSTXJT_GJY_LED_GPIO_CLK, ENABLE);
/* Configure PC3 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = CSTXJT_GJY_GPIO_Pin_LED1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(CSTXJT_GJY_LED1_GPIO, &GPIO_InitStructure);
/* Configure PA0 PA1 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = CSTXJT_GJY_GPIO_Pin_LED2 | CSTXJT_GJY_GPIO_Pin_LED3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(CSTXJT_GJY_LED2_3_GPIO, &GPIO_InitStructure)