历史上的今天
今天是: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 输出高
}
史海拾趣
|
1.概述 也许您曾经想过无线网络的应用,但是您听到的说法让您犹豫再三。您的同事告诉您,无线应用不但复杂而且昂贵。您的老板提到可靠性和升级的问题。或者,在您最后一次参加的技术会议上,与会者提到了太多太多的安全风险问题。 虽然各种形 ...… 查看全部问答> |
|
大家好,现在实验中要对模拟信号精确处理,模拟信号Vo为电流传感器输出,经过隔离芯片后为Vin,然后送到跟随器,由于隔离芯片有误差,导致Vin高于Vo,差值为0.02v,为固定值,请问如何才能才能使用模拟电路抵消0.02v的差值?(见附件) [ 本帖最后 ...… 查看全部问答> |
|
昨天,一应用程序员反问了这个问题 在写向flash写数据的时候,突然断电,下次再启动的时候。这个文件变成不可读写了,说是写保护了。 请问大家是否遇到这种情况了? 我看了两个类似的帖子。 http://topic.eeworld.net/u/20080616/11/C34E5388-9 ...… 查看全部问答> |
|
我最近在看《自己动手写操作系统》那本书,已经看到了保护模式,但尚有一问,第一章时,BootSector的代码的最后两个字节是0x55aa 但是我后来改成了0xaa55 也可以正常引导,请问这到底是怎么回事呢?… 查看全部问答> |
|
用制作LED16*16单行点阵屏通过RS232串口接收数据问题 本人用89C51做了一个LED16*16点阵单行显示屏,带RS232串行口,现在本人写的程序可显示4个中文汉字左或右、上或下循环显示,我懂用计时器0、方式1 设置9600波特率通过串口助手发十六进制01 、02控制带串口的LED单灯左循环的启停,现在有几点请教大家 ...… 查看全部问答> |
|
S3C2416开发板ARM9EJ内核 完美替代S3C2440 一、S3C2416简介 S3C2416是低功耗、高性能、低成本的SAMSUNG ARM9(ARM926EJ)处理器,最具性价比优势的芯片,S3C2440最完美的替代者。 UT-S3C2416开发板是一款以S3C2416处理器为核心的高 ...… 查看全部问答> |
|
本人现在有一款omap3530嵌入式开发板devkit8000,当初心血来潮买的,因为种种原因买了之后就没用过了,算是全新的。关于该开发板的信息可以看这里http://www.timll.com/products/Devkit8000.asp这里http://elinux.org/DevKit8000和这里http://item. ...… 查看全部问答> |




