STM32 开发板入门教程 (一) GPIO

发布者:纯真年代最新更新时间:2015-08-12 来源: eefocus关键字:STM32  开发板  入门教程  GPIO 手机看文章 扫描二维码
随时随地手机看文章
这个章节我们将学习最基本的 STM32 的 GPIO 的应用. 我们将分为两个章节来学习.

第一部份: GPIO 的基本应用和 IO 口的配置
第二部份: 外部中断的使用

--------------------------------------------------------------------------

1: 设计要求:
    开发板上有 2 个 LED,  我们的目的为有规律的点亮 LED1 和 LED2. 当按键按下去的时候所有的灯灭, 等待 2 秒钟后恢复有规律的点亮.

2: 硬件电路:

  

3: 软件程序设计:
(1) 根据要求配置 GPIOA 中的 PA0,PA1 为输出, PA3, PA8 为输入
对于下面程序中的  GPIO_InitStructure.GPIO_Speed 和 GPIO_InitStructure.GPIO_Mode 推荐大家看下面两篇文章.

STM32 GPIO的十大优越功能综述
备注: 当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

STM32 GPIO端口的输出速度设置
备注: 共有8种模式,可以通过编程选择:
  1. 浮空输入
  2. 带上拉输入
  3. 带下拉输入
  4. 模拟输入
  5. 开漏输出——(此模式可实现hotpower说的真双向IO)
  6. 推挽输出
  7. 复用功能的推挽输出
  8. 复用功能的开漏输出
模式7和模式8需根据具体的复用功能决定。


void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, GPIO_InitStructure);
    
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, GPIO_InitStructure);
}

(2) 打开 GPIOA 的时钟, 因为 STM32 是一个低功耗的 MCU , 每一个你使用的外围设备都需要单独开启时钟, 如果不开启将不能使用, 这个也是对于 STM32 初学者容易疏忽的地方

  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_AFIO, ENABLE);

STM32共有5种时钟源,其中三种不同的时钟源可用作为驱动系统时钟(SYSCLK);
1、HSI 由内部8MHz RC振荡器产生,它是可以直接用来作为系统时钟或经2分频后作为PLLSRC输入。
HIS时钟频率在出厂时被校准在1%(25°C),在系统复位时,工厂校准值会被装载到时钟控制寄存器的HISCAL[7..0] 位。
用户可以通过更改HISCAL[4..0]来调整HSI频率。
另外时钟寄存器中有一个HSIRDY位用来指示HSI RC是不稳定工作,在时钟启过后,直到这个标志位置被硬件置1后,HSI RC时钟才被输出。
HSI RC时钟还可以用时钟寄存器中的HSION位来启动和关闭。

HSI时钟同时也是HSE晶体荡振器的备用时钟源。

使用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器重新设置为默认值   RCC_DeInit;
2、打开外部高速时钟晶振HSE    RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作    HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置AHB时钟         RCC_HCLKConfig;
5、设置高速AHB时钟     RCC_PCLK2Config;
6、设置低速速AHB时钟   RCC_PCLK1Config;
7、设置PLL              RCC_PLLConfig;
8、打开PLL              RCC_PLLCmd(ENABLE);
9、等待PLL工作   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
10、设置系统时钟        RCC_SYSCLKConfig;
11、判断是否PLL是系统时钟     while(RCC_GetSYSCLKSource() != 0x08)
12、打开要使用的外设时钟    RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()


具体设置请参考下面的文章

STM32时钟系统与软件配置

STM32的时钟系统分析

STM32 的时钟与RTC


(3) 设置外部中断, 所有的 GPIO 口都可以作为外部中断源. 具体可以参考下面这篇文章.

STM32中外部中断与外部事件

  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);
    
  EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(EXTI_InitStructure);

同样不要忘记打开时钟, 我们在打开 PA 口的时候已经加上了 RCC_APB2Periph_AFIO, 这里再提醒大家一下.
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_AFIO, ENABLE);

最后就是编写外部中断入口函数.
void EXTI3_IRQHandler(void)
{
    int i;
    
    if(EXTI_GetITStatus(EXTI_Line9) != RESET)
    {
       GPIO_SetBits(GPIOA,GPIO_Pin_0);
        GPIO_SetBits(GPIOA,GPIO_Pin_1);
        
        for(i=0;i<=8000000;i++);
      
        GPIO_ResetBits(GPIOA,GPIO_Pin_0);
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        
        for(i=0;i<=1000000;i++)
      
      
        
        EXTI_ClearITPendingBit(EXTI_Line3);
    }
}

不要忘记在中断函数处理完成后清掉标志位,不然会不停的进入中断.

(4) 编译与调试
      我们已经完成所有程序编写部份, 接下来就是将工程编译成功后下载到我们的 Mini-STM32 开发板中进行调试和仿真.
      如果看到 LED 有规律的点亮和熄灭, 按下按钮后 LED 先是一起熄灭, 在一起点亮, 然后恢复有规律的点亮这个过程, 说明我们已经达到我们的设计目标.
关键字:STM32  开发板  入门教程  GPIO 引用地址:STM32 开发板入门教程 (一) GPIO

上一篇:STM32 开发板入门教程 (三) 系统时钟 SysTick
下一篇:STM32 定时器 定时时间的计算

推荐阅读最新更新时间:2024-03-16 14:28

基于STM32的铁路自动围栏系统设计
一、项目背景 随着城市规模的不断扩大和交通运输方式的日益发展,铁路与公路的交叉口已经成为常见的场景。然而,这些交叉口往往存在一定的安全隐患,因为有时不易发现列车行进的情况,导致公路上的车辆或行人可能会无意中闯入铁路区域,从而引发重大交通事故。 为了解决这个问题,当前开发了一款基于 STM32 的铁路自动围栏系统。该系统采用了STM32F103RCT6作为主控 芯片 ,并使用 步进电机 来控制铁路围栏的开启和闭合。同时,系统还配备了 红外 感应器,以便能够及时监测到列车的通过情况。 当系统监测到有列车即将通过铁路交叉口时,公路 信号 灯会立刻变为红灯,蜂鸣器也会发出警报声音,以提醒行人和车辆注意安全。同时,铁路两侧的围栏也会自动
[单片机]
基于<font color='red'>STM32</font>的铁路自动围栏系统设计
STM32的OTA远程升级
上次发过SD卡的Bootloader离线升级后,应大家的要求,这次就讲一下STM32的OTA远程升级。 OTA又叫空中下载技术,是通过移动通信的空中接口实现对移动终端设备数据进行远程管理的技术,还能提供移动化的新业务下载功能。 要实现OTA功能,至少需要两块设备,分别是服务器与客户端。服务器只有一个,客户端可有多个。服务器通过串口与PC机连接,需要下载的镜像文件存放于PC机,命令执行器给服务器发命令及镜像文件。首先命令执行器控制服务器广播当前可用的镜像文件信息,客户端收到信息后进行对比,若有与自身相匹配的镜像,则向服务器请求数据。服务器收到请求后向命令执行器索取固定大小的块,再点对点传送给客户端。镜像传输完毕后,客户端进行
[单片机]
<font color='red'>STM32</font>的OTA远程升级
基于STM32控制的声音导引系统
摘要:设计了一个基于STM32控制的声音导引系统。该系统由1个可移动声源S和3个声音接收器A、B、C构成。由一片从控STM32单片机控制无线发送模块,实现声音导引信号的发送。主控单片机根据无线接收模块所接收到的信息来判断可移动声源运动的启停。 关键词:无线收发模块;STM32单片机;声音导引;移动声源 引言 声音导引系统,主要是靠声音来完成对机器的智能控制,既方便又快捷。尤其是环境比较恶劣、不适合人类停留的地方,可以依靠声音来控制机器的正常运行。声音导引系统也是智能化控制的一个方面,对未来的智能化发展有较大的促进作用,对未来智能机器人的研究也大有帮助。 1 系统总体方案 如图1所示,声音导引系统由1个可移动声源S,声音
[单片机]
基于<font color='red'>STM32</font>控制的声音导引系统
EPC推出采用EPC氮化镓(eGaN)技术的150安培开发板
宜普电源转换公司(EPC)宣布推出全新的100 V、150 A大电流脉冲激光二极管的驱动演示电路板(EPC9126HC)。面向全自动汽车应用的激光雷达系统需要制作三维地图,因此,侦测四周的目标物件的速度及准确性变得非常重要。从EPC9126HC演示电路板可以看到,与等效MOSFET相比,具备快速转换特性的氮化镓场效应晶体管(eGaN FET)所提供的脉冲功率可以快十倍的速度驱动激光二极管,从而提升激光雷达系统的整体性能。 EPC9126HC开发板主要驱动激光二极管,备有参考接地的氮化镓场效应晶体管(EPC2001C)。该晶体管由 德州仪器 公司的UCC27611栅极驱动器驱动。EPC2001C的最高电压为100 V,可驱动高达1
[嵌入式]
STM32通过串口向外部FLASH(W25X16)写入字库
系统中使用过多的汉字会出现芯片容量不够用的问题,可将数据存储在外部FLASH中,在需要使用时进行调用即可。本文是通过STM32串口1实现对W25X16的汉字字库存储。软件层面,配置串口1和SPI1即可,程序初始化后,在对W25X16进行写之前,必须先擦除,可以一个字节、一页、一扇区、一块以及整片擦除。写字库前,我们用整片擦除方式,如下: 整个程序中,关键在于串口接收中断函数的编写,如下: u32 WriteAddress=0; void USART1_IRQHandler(void) { u8 Res; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) {
[单片机]
<font color='red'>STM32</font>通过串口向外部FLASH(W25X16)写入字库
STM32学习笔记(八)---通讯基本知识
通讯的基本知识 一、通讯的分类 按数据传送的方式分 a. 串行通讯:按数据位形式一位一位地传输数据 b. 并行通讯:使用8、16、32及64根或更多的数据线进行传输 按数据通讯的方向分 a. 全双工:同一时刻,两个设备之间可以同时收发数据 b. 半双工:同一时刻,两个设备之间不能同时收发数据 c. 单工:任何时刻,只能进行单一方向通讯 按数据同步的方式分 a. 同步通讯:收发双方会使用同一时钟信号线,在时钟信号的驱动下双方进行协调,同步数据 b. 异步通讯:不使用时钟信号同步。 二、通讯速率 通信速率:通常以比特率(bitrate)表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)
[单片机]
STM32模拟IIC驱动OLED屏 原理+源码
处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受:双方满足时序要求。 一、IIC总线的信号类型 1、开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同时IIC总线上的设备检测到这个开始信号它就知道处理器要发送数据了。 2、停止信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。 二、IIC数据传输过程 1、在数据传输时,SDA的数据在SCL为高电平时,必须保持稳定
[单片机]
<font color='red'>STM32</font>模拟IIC驱动OLED屏 原理+源码
再造STM32---第十部分:GPIO输入—按键检测
本章参考资料:《STM32F4xx 参考手册》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。 按键检测使用到 GPIO 外设的基本输入功能,本章中不再赘述 GPIO 外设的概念,如您忘记了,可重读前面“GPIO 框图剖析”小节, STM32 标准库中 GPIO 初始化结构体GPIO_TypeDef 的定义与“定义引脚模式的枚举类型”小节中讲解的相同。 10.1 硬件设计: 按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,使用按键时会产生图 10-1 中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。本实验板连接的按键带硬件消
[单片机]
再造STM32---第十部分:<font color='red'>GPIO</font>输入—按键检测
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved