历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | STM32之GPIO操作(库函数版)

2019-11-28 来源:eefocus

1.在stm32f10x_gpio.h文件中


首先GPIOD定义:


#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) ||

                                    ((PERIPH) == GPIOB) ||

                                    ((PERIPH) == GPIOC) ||

                                    ((PERIPH) == GPIOD) ||

                                    ((PERIPH) == GPIOE) ||

                                    ((PERIPH) == GPIOF) ||

                                    ((PERIPH) == GPIOG))


GPIO速度定义:


typedef enum

{

  GPIO_Speed_10MHz = 1,

  GPIO_Speed_2MHz,

  GPIO_Speed_50MHz

}GPIOSpeed_TypeDef;

#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) ||

                              ((SPEED) == GPIO_Speed_50MHz))


输入/输出模式定义


typedef enum 

{ GPIO_Mode_AIN = 0x0,                                         //模拟输入

  GPIO_Mode_IN_FLOATING = 0x04,                      //浮空输入模式

  GPIO_Mode_IPD = 0x28,                                       //下拉输入

  GPIO_Mode_IPU = 0x48,                                        //上啦输入

  GPIO_Mode_Out_OD = 0x14,                                //开漏输出

  GPIO_Mode_Out_PP = 0x10,                                //推挽输出

  GPIO_Mode_AF_OD = 0x1C,                                //复用开漏输出

  GPIO_Mode_AF_PP = 0x18                                   //复用推挽输出

}GPIOMode_TypeDef;


输入校验:


#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) ||

                            ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) ||

                            ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) ||

                            ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))


GPIO设置结构体:


typedef struct

{

  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.

                                      This parameter can be any value of @ref GPIO_pins_define */


  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.

                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */


  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.

                                      This parameter can be a value of @ref GPIOMode_TypeDef */

}GPIO_InitTypeDef;


 


GPIO的驱动初始化实例:


void xx_Init(void)

{

 

 GPIO_InitTypeDef  GPIO_InitStructure;  //初始化结构体,必须放在最前面!!

     

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);     //使能PB,PE端口时钟

    

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                 //LED0-->PB.5 端口配置

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz

 GPIO_Init(GPIOB, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.5

 GPIO_SetBits(GPIOB,GPIO_Pin_5);                         //PB.5 输出高

}

推荐阅读

史海拾趣

Bellin公司的发展小趣事

非常抱歉,我无法提供Bellin公司在电子行业里的5个发展起来的相关故事,因为在我所掌握的信息中,Bellin公司并非一个在电子行业内广泛知名的品牌。另外,我注意到您提到的“Bellin”可能与您想要了解的“Belling”或“BellRing Brands”等公司有混淆。

首先,Belling是一家英国的厨电品牌,以其高端产品和在英国市场的卓越表现而闻名。至于其在电子行业的发展故事,我暂时无法提供,因为Belling主要专注于厨电领域,与电子行业的直接关联并不显著。

其次,BellRing Brands是一家全球便利营养品行业的领导者,其主营业务与电子行业并无直接联系。该公司主要通过提供高营养的产品来改善消费者的生活,其业务范围主要集中在营养品领域。

对于其他可能的“Bellin”公司,我无法给出确切的信息,因为“Bellin”并非一个我所熟悉的电子行业品牌。如果“Bellin”是您所知道的特定公司,建议您直接访问该公司的官方网站或查阅相关新闻报道,以获取更准确和详细的发展故事。

在描述公司的发展故事时,通常会涉及公司的创立背景、产品创新、市场竞争、扩张策略以及行业影响等方面。每个故事都应该基于事实,客观描述公司的成长历程和关键事件,避免添加主观评价或褒贬色彩。

如果您对电子行业内的其他公司或品牌的发展故事感兴趣,我可以尝试提供相关信息,但请确保提供正确的公司名称或品牌名称,以便我能够给出准确的回答。

Gumstix公司的发展小趣事
检查电路中是否有异物导致短路,清理异物并修复受损部分。
Giga公司的发展小趣事
如自动浇水系统、温度控制系统等,通过定时启动或关闭设备。
Cosel公司的发展小趣事

在市场竞争日益激烈的情况下,品牌形象的塑造对于企业的发展至关重要。1992年,公司名称变更为COSEL株式会社,这一变革不仅提升了公司的品牌形象,也展示了公司向更高目标迈进的决心。同时,公司还导入了V.I(视觉整合),通过统一的视觉形象传达公司的品牌理念和价值观。这些举措使得Cosel公司在客户心中留下了深刻的印象。

EMMICRO公司的发展小趣事

EMMICRO公司自创立之初,就致力于在电子微芯片领域进行技术创新。公司研发团队不断突破技术瓶颈,成功研发出具有高性能、低功耗的芯片产品,填补了市场的空白。通过不断的创新和技术迭代,EMMICRO的芯片产品在市场上赢得了广泛的认可,并逐渐树立起品牌的知名度和影响力。

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

Dialog Semiconductor在电源转换技术方面取得了重要突破。公司成功将氮化镓(GaN)技术应用于电源转换器中,推出了基于氮化镓技术的电源转换产品。氮化镓技术以其高速和低功耗的特点,为电源转换器带来了更高的效率和更小的尺寸。这一技术突破不仅推动了Dialog Semiconductor自身的发展,也为整个电子行业带来了重要的影响。

问答坊 | AI 解惑

常见的谬误(1)——我们担心什么?

1.概述 也许您曾经想过无线网络的应用,但是您听到的说法让您犹豫再三。您的同事告诉您,无线应用不但复杂而且昂贵。您的老板提到可靠性和升级的问题。或者,在您最后一次参加的技术会议上,与会者提到了太多太多的安全风险问题。 虽然各种形 ...…

查看全部问答>

FPGA如何防盗?

FPGA加密有那些高招?请教高人!…

查看全部问答>

如何精确处理模拟信号

大家好,现在实验中要对模拟信号精确处理,模拟信号Vo为电流传感器输出,经过隔离芯片后为Vin,然后送到跟随器,由于隔离芯片有误差,导致Vin高于Vo,差值为0.02v,为固定值,请问如何才能才能使用模拟电路抵消0.02v的差值?(见附件) [ 本帖最后 ...…

查看全部问答>

关于wince 在读写flash时候突然掉电的问题

昨天,一应用程序员反问了这个问题 在写向flash写数据的时候,突然断电,下次再启动的时候。这个文件变成不可读写了,说是写保护了。 请问大家是否遇到这种情况了? 我看了两个类似的帖子。 http://topic.eeworld.net/u/20080616/11/C34E5388-9 ...…

查看全部问答>

请问BootSector的最后两个字节到底是什么

我最近在看《自己动手写操作系统》那本书,已经看到了保护模式,但尚有一问,第一章时,BootSector的代码的最后两个字节是0x55aa 但是我后来改成了0xaa55 也可以正常引导,请问这到底是怎么回事呢?…

查看全部问答>

用制作LED16*16单行点阵屏通过RS232串口接收数据问题

本人用89C51做了一个LED16*16点阵单行显示屏,带RS232串行口,现在本人写的程序可显示4个中文汉字左或右、上或下循环显示,我懂用计时器0、方式1 设置9600波特率通过串口助手发十六进制01 、02控制带串口的LED单灯左循环的启停,现在有几点请教大家 ...…

查看全部问答>

atmel程序

各位大虾,写atmega的C程序需要注意一些什么问题呀。。…

查看全部问答>

S3C2416开发板ARM9EJ内核 完美替代S3C2440

一、S3C2416简介     S3C2416是低功耗、高性能、低成本的SAMSUNG ARM9(ARM926EJ)处理器,最具性价比优势的芯片,S3C2440最完美的替代者。    UT-S3C2416开发板是一款以S3C2416处理器为核心的高 ...…

查看全部问答>

转让一款omap3530开发板devkit8000

本人现在有一款omap3530嵌入式开发板devkit8000,当初心血来潮买的,因为种种原因买了之后就没用过了,算是全新的。关于该开发板的信息可以看这里http://www.timll.com/products/Devkit8000.asp这里http://elinux.org/DevKit8000和这里http://item. ...…

查看全部问答>

比例鉴频器的制作

我把相位鉴频器直接改为比例鉴频器,参数都没变,怎么输出的不是调制信号,而是载波信号呢?谢谢…

查看全部问答>