历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2019年12月26日 | STM32学习笔记:【003】GPIO

2019-12-26 来源:eefocus

在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output 、通用输入/输出)了,在STM32中,除了除去ADC以外的复用功能,剩下的几乎就是GPIO了。


下面给出GPIO的基本使用步骤:


初始化

1.声明一个GPIO属性结构体,设置各成员属性


这个结构体的属性是这样的:


typedef struct

{

  uint32_t Pin;       

  /*指定的引脚号,右值表达式可以是GPIO_PIN_0到~GPIO_PIN_15任意相或 */

  uint32_t Mode;      

  /*

    模式

    GPIO_MODE_INPUT       输入模式

    GPIO_MODE_OUTPUT_PP    推挽输出模式(输出较大电流)

    GPIO_MODE_OUTPUT_OD    开漏输出模式(一般外接上拉电阻)

    GPIO_MODE_AF_PP       复用推挽输出模式

    GPIO_MODE_OUTPUT_OD    复用开漏输出模式

    GPIO_MODE_ANALOG      复用模拟输入输出模式(ADC/DAC专用)

  */

  uint32_t Pull;  

  /*

    上/下拉模式

      上拉电阻是指当pin接到VCC(高电平)时所接的电阻即为Pull up 电阻,

      反之亦然,pin接地时所接的电阻即pull down电阻

    GPIO_NOPULL   无

    GPIO_PULLUP   上拉

    GPIO_PULLDOWN  下拉

  */

  uint32_t Speed;

  /*

    IO口速率(I/O口驱动电路的速度)

    当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

    高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

    STM32F429的端口输出速率为括号内容

    GPIO_SPEED_LOW;    (2)   2MHz注意:

    GPIO_SPEED_MEDIUM;  (25)  12.5MHz ~ 50MHz 

    GPIO_SPEED_FAST;   (50)  25MHz ~ 100 MHz 

    GPIO_SPEED_HIGH;   (100)  50MHz ~ 200MHz 

  */


  uint32_t Alternate;  

  /*

    复用功能,本节省略不讲

   */

}GPIO_InitTypeDef;

 


2.使能GPIOx对应的时钟(如果没有使能将会导致配置无效)


__HAL_RCC_GPIOB_CLK_ENABLE(void);           //开启GPIOB时钟


3.调用void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) 函数


初始化例程


void LED_Init(void)

{

  // 初始化函数

    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟

    

    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速


    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

}


IO口的读写

读:

  GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

  Pxin(GPIO_Pin);   // x 可以是ABCD等端口

 


写:

  void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

  Pxout(GPIO_Pin);   // x 可以是ABCD等端口

  void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);

读写例程


#include "stm32f4xx.h"

#define  LED0 PAout(0)

int main(void) 

  HAL_Init(); //初始化

  Stm32_Clock_Init(360,8,2,8); //设置时钟,180Mhz 

  delay_init(180); //初始化延时函数 

  LED_Init(); //初始化LED  

  while(1) 

  {

    LED0=0;                 //LED0亮

    delay_ms(500);

    LED0=1;                   //LED0灭

      delay_ms(500);

    }

}


推荐阅读

史海拾趣

Gwconnect (Molex)公司的发展小趣事
通过超声波发射电路产生的高频振动来清洗物体表面的污垢和油渍,具有清洗效果好、不损伤物体表面等优点。
AND Displays公司的发展小趣事

为了降低成本、提高生产效率,AND Displays开始着手整合产业链。公司通过与上游原材料供应商建立长期合作关系,确保原材料的稳定供应和价格优势。同时,公司还加强了对下游客户的服务与支持,通过提供定制化解决方案和优质的售后服务,增强了客户黏性。此外,AND Displays还不断优化生产流程,提高生产效率,进一步降低了生产成本。

Delta Electronics Manufacturing Corp公司的发展小趣事

Delta Electronics Manufacturing Corp公司始建于上世纪七十年代,起初以生产电源产品为主。在初创阶段,公司凭借对技术的深度钻研和对市场的敏锐洞察,成功研发出一系列高效、稳定的电源产品。这些产品迅速在市场上获得认可,为Delta在电源领域奠定了坚实的基础。

Focus公司的发展小趣事

在数字化转型的大潮中,一家名为Focus的电子产品制造商(虚构)意识到传统制造模式的局限性,决定实施全面的数字化转型战略。公司首先引入了先进的ERP系统和智能制造技术,实现了生产流程的自动化和智能化。同时,为了快速扩大市场份额和增强技术实力,Focus积极寻求并购机会,先后收购了多家在物联网、人工智能等领域具有核心竞争力的初创企业。通过资源整合和优势互补,Focus迅速成长为行业内的领军企业。

安森德(Ascend)公司的发展小趣事

随着产品技术的成熟,安森德公司开始积极拓展市场。公司凭借优质的产品和服务,成功进入工业电源、电机驱动、消费电子等多个领域。同时,安森德积极寻求与全球顶尖企业的战略合作,通过与这些企业的技术交流和业务合作,不断提升自身的技术水平和市场竞争力。这些合作不仅为安森德带来了更多的商业机会,也进一步提升了公司在行业内的知名度和影响力。

EECO Switch公司的发展小趣事

EECO Switch公司成立于1947年,最初作为加利福尼亚州的一家电子工程公司,致力于电子产品的设计与制造。随着技术的不断进步和市场需求的变化,公司逐渐将业务重心转向人机界面产品的设计与开发。在这个过程中,EECO Switch凭借其深厚的技术积累和创新精神,成功开发出了一系列具有领先技术的人机界面产品,从而确立了其在该领域的领先地位。

问答坊 | AI 解惑

华邦子公司芯唐电子全新单片机

全新的工业级51单片机及LPC系列单片机.请参考附件.…

查看全部问答>

0603的104的帖片电容能耐多大的电压啊

I来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)…

查看全部问答>

EWB512 仿真速度太慢!

最近用EWB仿真,各个部分分开测试都很好。但放在一起就不行了,速度奇慢!都是以纳秒(ns)来计算的。不知道这个该怎么设置才能好泥?…

查看全部问答>

29岁了,继续做个精致的电子工程师

29岁了,继续做个精致的电子工程师 作者:菁菁木华 5年前,在2@1IC论坛写了《24岁了,做个精致的电子工程师》相关的3篇文章。晃悠一下就奔三了。非常感谢电子新手的持续关注与支持。2006年从珠三角带着惊恐,好奇和成就感辗转来到了上海,2 ...…

查看全部问答>

驱动查错!

在家好,我的WINCE在启动的过程通过DNW输出下列信息: RaiseException: Thread=832139bc Proc=80627040 \'device.exe\' AKY=00000005 PC=8021f750(NK.EXE+0x0001f750) RA=8020aecc(NK.EXE+0x0000aecc) BVA=00000001 FSR=00000001 请问通过这个信息 ...…

查看全部问答>

招聘嵌入式linux软件工程师

说明一下:以下两个职位同时在chinahr和51job也有登广告,不过我觉得这里也许更有针对性些。其中第一个针对较多经验者,第二个给有潜力的新手和应届毕业生。 公司为外资企业(欧美),工作地点在上海浦东陆家嘴软件园,有兴趣者简历请发至sh.job@c ...…

查看全部问答>

如何在DOS 下读取USB 的PID,VID 呢?

在WINDOWS 下读很简单,但如何在DOS 下读取USB 的PID,VID 呢?…

查看全部问答>

TI LM3S官方例程里面的BOOT例程起什么作用的

TI LM3S官方例程里面的BOOT例程都是起什么作用的…

查看全部问答>

【转载】RT5350芯片移植OpenWrt固件

参考:https://github.com/Squonk42/OpenWrt-RT5350?ref=commandbarr http://www.right.com.cn/forum/thread-120311-1-1.html 最新openwrt已经支持RT5350,不需要再打补丁了。(http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=12 ...…

查看全部问答>