STM32F407之GPIO

 stm32f407VG这款单片机上共有PA-PE共5×16共80个复用IO口,每个通用I / O端口有4个32位配置寄存器(GPIOx_MODERGPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUPDR),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位的置位/复位寄存器(GPIOx_BSRR),32位锁定寄存器(GPIOx_LCKR)和两个32位的备用功能选择寄存器(GPIOx_AFRHGPIOx_AFRL)。

 

 

 

设置步骤:

1.     使能相关时钟

2.     设置相应的IO口为输入或输出

3.     设置输入\输出的类型

4.     设置输出的速度(如果设置为输入,此步跳过)

5.     如果输出速度>=50M,开启补偿单元

6.     设置上拉下拉寄存器

7.     通过复位置位寄存器和输入输出数据寄存器进行操作。



程序:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /************************************ 
  2.     标题:操作GPIO的练习 
  3.     软件平台:IAR for ARM6.21 
  4.     硬件平台:stm32f4-discovery 
  5.     主频:168M 
  6.      
  7.     author:小船 
  8.     data:2012-01-16 
  9. *************************************/  
  10.   
  11. #include <stm32f4xx.h>   
  12.   
  13. uint32_t Gb_TimingDelay;  
  14.   
  15. void Delay(uint32_t nTime);  
  16.   
  17. void main ()  
  18. {     
  19.   SysTick_Config(SystemCoreClock / 1000);    //设置systemtick一毫秒中断  
  20.     
  21.   RCC->AHB1ENR |= 0x00000008;    //使能GPIOD时钟  
  22.   RCC->APB2ENR |= (1<<14);     //使能syscfg时钟  
  23.     
  24.   GPIOD->MODER &= 0x00FFFFFF;     //设置PD12,13,14,15输出  
  25.   GPIOD->MODER |= 0x55000000;   
  26.     
  27.   GPIOD->OTYPER &= 0xFFFF0FFF;   //设置PD12,13,14,15推挽输出  
  28.     
  29.   GPIOD->OSPEEDR &= 0x00FFFFFF;  //PD12,13,14,15 速度100m  
  30.   GPIOD->OSPEEDR |= 0xff000000;  
  31.     
  32.   SYSCFG->CMPCR = 0x00000001;    //使用IO补偿单元,  
  33. //当GPIO速度超过50M的时候要考虑使用此设置  
  34.     
  35.   GPIOD->PUPDR &= 0x00FFFFFF;    //PD12,13,14,15 无上拉无下拉  
  36.     
  37.   GPIOD->BSRRH = 0xf000;      //reset register GPIOx_BSRRH, write only  
  38.                             //set register GPIOx_BSRRL, write only  
  39.     
  40.   while(1)  
  41.   {  
  42.       GPIOD->BSRRH = 0xf000;  
  43.       GPIOD->BSRRL = 0x1000;   
  44.       Delay(500);  
  45.         
  46.       GPIOD->BSRRH = 0xf000;  
  47.       GPIOD->BSRRL = 0x1000<<1;  
  48.       Delay(500);  
  49.         
  50.       GPIOD->BSRRH = 0xf000;  
  51.       GPIOD->BSRRL = 0x1000<<2;  
  52.       Delay(500);  
  53.         
  54.       GPIOD->BSRRH = 0xf000;  
  55.       GPIOD->BSRRL = 0x1000<<3;  
  56.       Delay(500);  
  57.   }  
  58. }  
  59.   
  60. void Delay(uint32_t nTime)  
  61. {   
  62.   Gb_TimingDelay = nTime;  
  63.   
  64.   while(Gb_TimingDelay != 0);  
  65. }  
  66.   
  67.   
  68. void SysTick_Handler(void)  
  69. {  
  70.   if (Gb_TimingDelay != 0x00)  
  71.   {   
  72.     Gb_TimingDelay--;  
  73.   }  
  74. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32f407GPIO配置可以通过以下代码实现: ```c #include "stm32f4xx.h" void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; // 开启GPIO时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); // 配置GPIO引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_x; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_x; GPIO_InitStructure.GPIO_OType = GPIO_OType_x; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_x; GPIO_Init(GPIOx, &GPIO_InitStructure); } ``` 其中,`GPIOx`代表具体的GPIO端口,比如`GPIOA`、`GPIOB`等;`GPIO_Pin_x`代表具体的引脚号,比如`GPIO_Pin_0`、`GPIO_Pin_1`等;`GPIO_Mode_x`代表引脚的工作模式,比如输入模式`GPIO_Mode_IN`、输出模式`GPIO_Mode_OUT`等;`GPIO_Speed_x`代表引脚的速度,比如`GPIO_Speed_2MHz`、`GPIO_Speed_50MHz`等;`GPIO_OType_x`代表引脚的输出类型,比如推挽输出`GPIO_OType_PP`、开漏输出`GPIO_OType_OD`等;`GPIO_PuPd_x`代表引脚的上下拉电阻,比如上拉`GPIO_PuPd_UP`、下拉`GPIO_PuPd_DOWN`等。 通过调用`GPIO_Config`函数,可以实现对具体GPIO端口和引脚的配置。 #### 引用[.reference_title] - *1* *2* [STM32F407入门学习(1)---GPIO配置](https://blog.csdn.net/shadowfiend10086/article/details/53229724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F407GPIO](https://blog.csdn.net/minyuanxiani/article/details/21409463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值