stm32之GPIO库函数开发

简介: 关于GPIO库函数的重点函数:P122   GPIO_Init() :根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器;   GPIO_ReadInputDataBit():读取指定端口管脚的输入;   GPIO_SetBits():设置指定的数据端口位;   GPI...

关于GPIO库函数的重点函数:P122

  GPIO_Init() :根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器;

  GPIO_ReadInputDataBit():读取指定端口管脚的输入;

  GPIO_SetBits():设置指定的数据端口位;

  GPIO_ResetBits(): 清除指定的数据端口位;

  GPIO_PinRemapConfig(): 改变指定管脚的映射;----------端口映射是很有特色的功能;也是重点知识

  GPIO_EXTILineConfig():选择GPIO管脚用作外部中断线路;

  1 /*Include---------------------------*/
  2 #include"stm32f10x_lib.h"        //包含所有的头文件
  3 #include<stdio.h>
  4 
  5 //----------------函数声明--------------------
  6 void Delay_MS(u16 dly);
  7 void RCC_Configuration(void);
  8 void GPIO_Configuration(void);
  9 
 10 
 11 /*******************************************************************************
 12 * Function Name  : main
 13 * Description    : Main program.
 14 * Input          : None
 15 * Output         : None
 16 * Return         : None
 17 *******************************************************************************/ 
 18 int main(void)
 19 {
 20     u8  data, i;
 21     #ifdef DEBUG
 22     debug();
 23     #endif
 24     //------------初始化------------
 25     RCC_Configuration();
 26     GPIO_Configuration();
 27 
 28     //------------164通信-----------
 29     //CLK:PB5 上升沿 CLR:PE11置1 DATA:PE10
 30     GPIO_SetBits(GPIOE, GPIO_Pin_11);
 31     data = 0x30;
 32     for(i=0;i<8;++i)
 33     {
 34         GPIO_ResetBits(GPIOB, GPIO_Pin_5);    //PB5清零
 35         if((data&0x80) == 0x00)
 36             GPIO_ResetBits(GPIOE, GPIO_Pin_10);
 37         else
 38             GPIO_SetBits(GPIOE, GPIO_Pin_10);
 39         data<<=1;    //左移一位并赋值给data
 40         GPIO_SetBits(GPIOB, GPIO_Pin_5);    //PB5置1,为了产生上升沿    
 41     }
 42 
 43 
 44     while(1)
 45     {
 46         GPIO_SetBits(GPIOA, GPIO_Pin_3);
 47         Delay_MS(1000);
 48         GPIO_ResetBits(GPIOA, GPIO_Pin_3);
 49         Delay_MS(1000);    
 50     }
 51         
 52 }
 53 
 54 /*******************************************************************************
 55 * Function Name  : Delay_Ms
 56 * Description    : delay 1 ms.
 57 * Input          : dly (ms)
 58 * Output         : None
 59 * Return         : None
 60 *******************************************************************************/
 61 void Delay_MS(u16 dly)
 62 {
 63     u16 i,j;
 64     for(i=0;i<dly;i++)
 65         for(j=1000;j>0;j--);
 66 }
 67 
 68 /*******************************************************************************
 69 * Function Name  : RCC_Configuration
 70 * Description    : Configures the different system clocks.
 71 * Input          : None
 72 * Output         : None
 73 * Return         : None
 74 *******************************************************************************/
 75 void RCC_Configuration(void)
 76 {
 77     //----------使用外部RC晶振-----------
 78     RCC_DeInit();            //初始化为缺省值
 79     RCC_HSEConfig(RCC_HSE_ON);    //使能外部的高速时钟 
 80     while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);    //等待外部高速时钟使能就绪
 81     
 82     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);    //Enable Prefetch Buffer
 83     FLASH_SetLatency(FLASH_Latency_2);        //Flash 2 wait state
 84     
 85     RCC_HCLKConfig(RCC_SYSCLK_Div1);        //HCLK = SYSCLK
 86     RCC_PCLK2Config(RCC_HCLK_Div1);            //PCLK2 =  HCLK
 87     RCC_PCLK1Config(RCC_HCLK_Div2);            //PCLK1 = HCLK/2
 88     RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);    //PLLCLK = 8MHZ * 9 =72MHZ
 89     RCC_PLLCmd(ENABLE);            //Enable PLLCLK
 90 
 91     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    //Wait till PLLCLK is ready
 92     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //Select PLL as system clock
 93     while(RCC_GetSYSCLKSource()!=0x08);        //Wait till PLL is used as system clock source
 94     
 95     //---------打开相应外设时钟--------------------
 96     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能APB2外设的GPIOA的时钟
 97     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);             
 98 }
 99 
100 /*******************************************************************************
101 * Function Name  : GPIO_Configuration
102 * Description    : 初始化GPIO外设
103 * Input          : None
104 * Output         : None
105 * Return         : None
106 *******************************************************************************/
107 void GPIO_Configuration(void)
108 {
109     //CLK:PB5  CLR:PE11 DATA:PE10
110     GPIO_InitTypeDef    GPIO_InitStructure;        //声明一个结构体变量
111     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;     //选择PB.5
112     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
113     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //输出模式为推挽输出
114     GPIO_Init(GPIOB,&GPIO_InitStructure);                 //初始化GPIOB寄存器
115     
116     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_10 ;     //选择PE.10 PE.11
117     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
118     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //输出模式为推挽输出
119     GPIO_Init(GPIOE,&GPIO_InitStructure);                 //初始化GPIOE寄存器
120     
121     //开启时钟    必须在RCC_Configuration中设置        
122 } 

 

相关文章
|
2月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
344 0
|
2月前
|
芯片
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
|
3月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
220 2
|
3月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
402 4
|
2月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
3月前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
120 1
|
3月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
353 2
|
3月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
253 1
|
2月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
|
3月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
20 0