打印

STM32F4学习笔记之GPIO(使用固件库)

[复制链接]
22756|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feng_710|  楼主 | 2012-2-9 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.使能GPIO的AHB时钟,使用函数:    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
2.配置GPIO工作模式用GPIO_Init()函数

数据类型说明
typedef struct
{
  uint32_t GPIO_Pin;              //引脚配置
GPIOMode_TypeDef GPIO_Mode;  //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(备用),GPIO_Mode_AN(模拟)

GPIOSpeed_TypeDef GPIO_Speed;// GPIO_Speed_2MHz,GPIO_Speed_25MHz,GPIO_Speed_50MHz,GPIO_Speed_100MHz
GPIOOType_TypeDef GPIO_OType;   // GPIO_OType_PP(推挽),GPIO_OType_OD(开漏)
GPIOPuPd_TypeDef GPIO_PuPd;     GPIO_PuPd_NOPULL(无),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)
}GPIO_InitTypeDef;



3.备用功能配置(除ADC和DAC外的所有非GPIO功能),使用函数
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
*          This GPIO_AF can be one of the following values:
  *            @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset)
  *            @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset)
  *            @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset)
  *            @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset)
  *            @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)
  *            @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1
  *            @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1
  *            @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2
  *            @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2
  *            @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2
  *            @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3
  *            @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3
  *            @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3
  *            @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3
  *            @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4
  *            @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4
  *            @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4
  *            @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5
  *            @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
  *            @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
  *            @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7
  *            @arg GPIO_AF_USART1: Connect USART1 pins to AF7
  *            @arg GPIO_AF_USART2: Connect USART2 pins to AF7
  *            @arg GPIO_AF_USART3: Connect USART3 pins to AF7
  *            @arg GPIO_AF_UART4: Connect UART4 pins to AF8
  *            @arg GPIO_AF_UART5: Connect UART5 pins to AF8
  *            @arg GPIO_AF_USART6: Connect USART6 pins to AF8
  *            @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9
  *            @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9
  *            @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9
  *            @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9
  *            @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9
  *            @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10
  *            @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10
  *            @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11
  *            @arg GPIO_AF_FSMC: Connect FSMC pins to AF12
  *            @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12
  *            @arg GPIO_AF_SDIO: Connect SDIO pins to AF12
  *            @arg GPIO_AF_DCMI: Connect DCMI pins to AF13
  *            @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15

4.使用GPIO_ReadInputData(GPIO_TypeDef* GPIOx)和GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读输入信号
5.使用GPIO_SetBits()/GPIO_ResetBits()设置输出引脚
6.上电或复位后,引脚备用功能都没启用(JTAG引脚除外),为悬浮输入状态
7.LSE引脚OSC32_IN 和OSC32_OUT(PC14 and PC15)的优先级高于GPIO
8.HSE引脚OSC_IN/OSC_OUT (PH0 / PH1)的优先级高于GPIO

例程:
int main(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;

  /* GPIOG Periph clock enable */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;
  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_NOPULL;
  GPIO_Init(GPIOD, &GPIO_InitStructure);  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  GPIO_SetBits(GPIOD, GPIO_Pin_12);
  GPIO_ResetBits(GPIOD, GPIO_Pin_13);


  while (1)
  {
  
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)

  
{


  GPIO_SetBits(GPIOD, GPIO_Pin_13);


  GPIO_ResetBits(GPIOD, GPIO_Pin_12);


}


else


{


  GPIO_SetBits(GPIOD, GPIO_Pin_12);


  GPIO_ResetBits(GPIOD, GPIO_Pin_13);



}

  }
}
沙发
txcy| | 2012-2-9 22:35 | 只看该作者
LZ的学习笔记需要再整理一下,多谢共享

使用特权

评论回复
板凳
秋天落叶| | 2012-2-9 22:50 | 只看该作者
不太像学习笔记啊

使用特权

评论回复
地板
lkl10800139| | 2012-3-28 01:41 | 只看该作者
学习。

使用特权

评论回复
5
xblei| | 2012-3-28 08:26 | 只看该作者
很详细。

使用特权

评论回复
6
372133249| | 2012-7-16 14:53 | 只看该作者
有没有完整工程压缩包共享

使用特权

评论回复
7
yycde123| | 2013-1-25 22:32 | 只看该作者
想要看的就是看AF功能。。结果没有。。有点失望

使用特权

评论回复
8
文峰聊书斋| | 2013-6-11 16:24 | 只看该作者
正从M3到M4,结果历程里很多与M3的不一样,库函数倒是一样,还是有点晕。

使用特权

评论回复
9
M甲壳虫M| | 2013-6-25 14:35 | 只看该作者
lz你有f4的固件手册吗?

使用特权

评论回复
10
trumpxp| | 2013-6-25 19:27 | 只看该作者
很不错的共享资料   谢谢了   楼主   顶一个  

使用特权

评论回复
11
feng_710|  楼主 | 2013-6-26 10:03 | 只看该作者
yycde123 发表于 2013-1-25 22:32
想要看的就是看AF功能。。结果没有。。有点失望

只对GPIO操作不需要AF功能,想看AF功能可以看我写的别的笔记比如串口的https://bbs.21ic.com/icview-447212-1-1.html

使用特权

评论回复
12
feng_710|  楼主 | 2013-6-26 10:04 | 只看该作者
M甲壳虫M 发表于 2013-6-25 14:35
lz你有f4的固件手册吗?

没有,库文件里的注释挺详细的,看注释就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

51

帖子

3

粉丝