LM3S6911 GPIO操作

最新在学习LM3S6911开发板子。和经典程序 Hello World! 程序是一样的,拿到开发板的第一个程序就是写一个流水灯的程序。

但是这个板子有个问题,使用板载的ISP来下载编译好的.bin文件很奇怪,能下载进去,但是现象不是想要的。但是改用ULinK2的时候就万事大吉了。好的就不废话了,先直接上代码。

#include "hw_memmap.h"
#include "hw_types.h"
#include "debug.h"
#include "gpio.h"
#include "sysctl.h"

#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

int main(void)
{
    volatile unsigned long ulLoop;

    //
    // 设置系统运行时钟
    //
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);

    //
    // Configure the GPIO that drives the on-board LED.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT);

    //蜂鸣器
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT);

    //按键  
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN);
    
    //LED配置
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_DIR_MODE_OUT);
 
    while(1)
    {
        while(GPIOPinRead(GPIO_PORTE_BASE,GPIO_PIN_0)==0)
        {
            GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0);
        }
        //
        // 点亮灯
        //
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_PIN_6);
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, 0);
        GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, 0);
        //
        // 延迟一笑会
        //
        for(ulLoop = 0; ulLoop < 200000; ulLoop++)
        {
        }

        //
        // 关灯.
        //
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0);
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_PIN_7);
        GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0);
        //
        // 延迟一会.
        //
        for(ulLoop = 0; ulLoop < 200000; ulLoop++)
        {
        }
    }
}

GPIODirModeGet    获得一个管脚的方向和模式。
函数原型:
    unsigned long GPIODirModeGet(unsigned long ulPort, unsigned char ucPin)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPin 是管脚编号。
描述:
    这个函数获取所选 GPIO 端口某个特定管脚的方向和控制模式。 在软件控制下这个管脚可以配置成输入或输出,或者,管脚也可由硬件来控制。控制的类型和方向作为一个枚举数据类型被返回。
返回:
    返回在 GPIODirModeSet()中描述的一个枚举数据类型。

GPIODirModeSet 设置指定管脚的方向和模式。
函数原型:
    void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是管脚的位组合(bit-packed) 。
    ulPinIO 是管脚方向“与/或”模式。
描述:
    这个函数在软件控制下将所选 GPIO 端口的指定管脚设置成输入或输出,或者,也可以将管脚设置成由硬件来控制。
参数 ulPinIO 是一个枚举数据类型,它可以是下面的其中一个值:
     GPIO_DIR_MODE_IN;
     GPIO_DIR_MODE_OUT;
     GPIO_DIR_MODE_HW。
在上面的值中,GPIO_DIR_MODE_IN 表明管脚将被编程用作一个软件控制的输入,GPIO_DIR_MODE_OUT 表 明 管 脚 将 被 编 程 用 作 一 个 软 件 控 制 的 输 出 ,GPIO_DIR_MODE_HW 表明管脚将被设置成由硬件进行控制。管脚用一个位组合(bit-packed)的字节来指定,这里的每个字节,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
    无。

GPIOIntTypeGet 获取管脚的中断类型。
函数原型:
unsigned long GPIOIntTypeGet(unsigned long ulPort, unsigned char ucPin)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPin 是管脚编号。
描述:
    这个函数获取所选 GPIO 端口上某个特定管脚的中断类型。管脚可配置成在下降沿、上升沿或两个边沿检测中断,或者,它也可以配置成在低电平或高电平检测中断。中断检测机制的类型作为一个枚举数据类型返回。
返回:

返回 GPIOIntTypeSet()中描述的一个枚举数据类型。

GPIOIntTypeSet 设置指定管脚的中断类型。
函数原型:
void GPIOIntTypeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulIntType)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是特定管脚的位组合(bit-packed)表示。
    ulIntType 指定中断触发机制的类型。
描述:
    这个函数为所选 GPIO 端口上特定的管脚设置不同的中断触发机制。参数 ulIntType 是一个枚举数据类型,它可以是下面其中的一个值:
    GPIO_FALLING_EDGE;

GPIO_RISING_EDGE;
    GPIO_BOTH_EDGES;
    GPIO_LOW_LEVEL;
    GPIO_HIGH_LEVEL。
    在上面的值中,不同的值描述了中断检测机制(边沿或电平)和特定的触发事件(边沿检测的上升沿、下降沿或上升/下降沿,电平检测的低电平或高电平) 。管脚用一个位组合(bit-packed)的字节来指定,这里的每个字节,置位的位用来识别
被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。注:为了避免伪中断,用户必须确保 GPIO 输入在这个函数的执行过程中保持稳定。
返回:
无。

GPIOPadConfigGet 获取管脚的配置。
函数原型:
void GPIOPadConfigGet(unsigned long ulPort,unsigned char ucPin,unsigned long *pulStrength,unsigned long *pulPinType)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPin 是管脚编号。
    pulStrength 是输出驱动强度存放处的指针。
    pulPinType 是输出驱动类型存放处的指针。
描述:
    这个函数获取所选 GPIO 上某个特定管脚的端口配置。 pulStrength 和 pulPinType 返回的值与 GPIOPadConfigSet()中使用的值相对应。这个函数也可以获取用作输入管脚的管脚配
置;但是,返回的唯一有意义的数据是管脚终端连接的是上拉电阻还是下拉电阻。
返回:
    无。

GPIOPadConfigSet 设置指定管脚的配置。
函数原型:
void GPIOPadConfigSet(unsigned long ulPort, unsigned char ucPins,unsigned long ulStrength,
unsigned long ulPinType)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是特定管脚的位组合(bit-packed)表示。
    ulStrength 指定输出驱动强度。
    ulPinType 指定管脚类型。
描述:
    这个函数设置所选 GPIO 端口指定管脚的驱动强度和类型。 对于配置用作输入端口的管脚,端口按照要求配置,但是对输入唯一真正的影响是上拉或下拉终端的配置。
参数 ulStrength 可以是下面的一个值:
 GPIO_STRENGTH_2MA;
 GPIO_STRENGTH_4MA;
 GPIO_STRENGTH_8MA;
 GPIO_STRENGTH_8MA_SC。
在上面的值中,GPIO_STRENGTH_xMA 指示 2、4 或 8mA 的输出驱动强度;而GPIO_OUT_STRENGTH_8MA_SC 指定了带斜率控制(slew control)的 8mA 输出驱动。
参数 ulPinType 可以是下面的其中一个值:
 GPIO_PIN_TYPE_STD;
 GPIO_PIN_TYPE_STD_WPU;
 GPIO_PIN_TYPE_STD_WPD;
 GPIO_PIN_TYPE_OD;
 GPIO_PIN_TYPE_OD_WPU;
 GPIO_PIN_TYPE_OD_WPD;
 GPIO_PIN_TYPE_ANALOG。
在上面的值中,GPIO_PIN_TYPE_STD*指定一个推挽管脚,GPIO_PIN_TYPE_OD*指定 一 个 开 漏 管 脚 , *_WPU 指 定 一 个 弱 上 拉 , *_WPD 指 定 一 个 弱 下 拉 ,GPIO_PIN_TYPE_ANALOG 指定一个模拟输入(对于比较器来说) 。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
    无。

GPIOPinIntClear 清除指定管脚的中断。
函数原型:
void GPIOPinIntClear(unsigned long ulPort, unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是特定管脚的位组合(bit-packed)表示。
描述:
清除指定管脚的中断。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。

注:由于在 Cortex-M3 处理器包含有一个写入缓冲区,处理器可能要过几个时钟周期才能真正把中断源清除。因此,建议在中断处理程序中要早些把中断源清除掉(反对在最后的操作中才清除中断源)以避免在真正清除中断源之前从中断处理程序中返回。操作失败可能会导致立即再次进入中断处理程序。 (因为NVIC 仍会把中断源看作是有效的) 。
返回:
无。

GPIOPinIntDisable关闭指定管脚的中断。
函数原型:
    void GPIOPinIntDisable(unsigned long ulPort, unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
屏蔽指定管脚的中断。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被
访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。

GPIOPinIntEnable 使能指定管脚的中断。
函数原型:
void GPIOPinIntEnable(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是特定管脚的位组合(bit-packed)表示。
描述:
不屏蔽指定管脚的中断。
管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
无。

GPIOPinIntStatus 获取所指定 GPIO 端口的中断状态。
函数原型:
long GPIOPinIntStatus(unsigned long ulPort tBoolean bMasked)
参数:
ulPort 是 GPIO 端口的基址。
bMasked 指定返回的是屏蔽的中断状态还是原始的中断状态。
描述:
如果 bMasked 被设置成 True,则返回屏蔽的中断状态;否则,返回原始的中断状态。
返回:
  返回一个位填充(bit-packed)的字节,在这个字节中,置位的位用来识别一个有效的屏蔽或原始中断,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。位
31:8 应该忽略。

GPIOPinRead 读取指定管脚上出现的值。
函数原型:
long GPIOPinRead(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
读取指定管脚(由 ucPins 指定的)的值。输入和输出管脚的值都能返回,ucPins 未指定的管脚的值被设置成 0。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
返回一个位填充的字节, 它提供了指定管脚的状态, 字节的位 0 代表 GPIO 端口管脚 0,
位 1 代表 GPIO 端口管脚 1,等等。ucPins 未指定的位返回 0。位 31:8 应该忽略。

GPIOPinTypeADC 配置管脚,使其作为模数转换输入使用。
函数原型:
void GPIOPinTypeADC(unsigned long ulPort,unsigned char ucPins)
参数:
ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
模数转换输入管脚必须正确配置,使其在 DustDevil-class 器件中能正常工作。这个函数为这些管脚提供合适的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注:这个函数不能把任何一个管脚变做 ADC 输入,它仅配置一个 ADC 输入来进行正确的操作。
返回:
无。
 
GPIOPinTypeCAN 配置管脚,使其用作一个 CAN 器件。
函数原型:
void GPIOPinTypeCAN(unsigned long ulPort,unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是管脚的位组合(bit-packed) )表示。
描述:
    CAN 管脚必须正确配置, 使 CAN 外设能正常工作。 这个函数为这些管脚提供了一个典型的配置;其他配置的工作取决于板的设置(例如:使用片内上拉)管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。注:这个函数不能把任何管脚变为一个 CAN 管脚;它仅配置一个 CAN 管脚来进行正确操作。
返回:
无。

GPIOPinTypeComparator配置管脚用作一个模拟比较器的输入。
函数原型:
    void GPIOPinTypeComparator(unsigned long ulPort,unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    cPins 是管脚的位组合(bit-packed)表示。
描述:
    模拟比较器输入管脚必须正确配置, 以便模拟比较器能正常工作。 这个函数为用作模拟比较器输入的管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注: 这个函数不能用来将任意管脚都变成一个模拟输入; 它只配置一个模拟比较器管脚进行正确操作。
返回:
    无。

GPIOPinTypeGPIOInput配置管脚用作 GPIO 输入。
函数原型:
    void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是管脚的位组合(bit-packed)表示。
描述:
    GPIO 管脚必须正确配置,以便 GPIO 输入能正常工作。这一点,特别是对于 Fury-class器件来说是很重要的,在Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
    无。

GPIOPinTypeGPIOOutput配置管脚用作 GPIO 输出。
函数原型:
    void GPIOPinTypeGPIOOutput(unsigned long ulPort,unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是管脚的位组合(bit-packed)表示。
描述:
    GPIO 管脚必须正确配置,以便作为 GPIO 输出能正常工作。这一点,特别是对于Fury-class 器件来说是很重要的,在 Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
    无。

GPIOPinTypeGPIOOutputOD 配置管脚用作 GPIO 开漏输出。
函数原型:
void GPIOPinTypeGPIOOutpuODt(unsigned long ulPort,unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
    ucPins 是管脚的位组合(bit-packed)表示。
 
描述:
    GPIO 管脚必须正确配置,以便能作为GPIO 输出正常工作。这一点,特别是对于Fury-class 器件来说是很重要的,在 Furry-class 器件中,数字输入使能在默认状态下是关闭的。这个这个函数为用作 GPIO 管脚提供了正确的配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
返回:
    无。

GPIOPinTypeI2C 配置管脚供I 2 C外设使用。
函数原型:
    void GPIOPinTypeI2C(unsigned long ulPort,unsigned char ucPins)
参数:
    ulPort 是 GPIO 端口的基址。
ucPins 是管脚的位组合(bit-packed)表示。
描述:
    I 2 C管脚必须正确配置,以便I2C外设能够正常工作。这个函数为用作I 2 C功能的管脚提供了正确配置。管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位 0 代表 GPIO 端口管脚 0、位 1 代表 GPIO 端口管脚 1 等等。
注:这个函数不能用来将任意管脚都变成一个 I2C 管脚;它只配置一个 I2C 管脚来进行正确操作。
返回:
    无。

时间: 2024-11-11 21:26:36

LM3S6911 GPIO操作的相关文章

linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现. #include int gpio_request(unsigned gpio, const char *label); 获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port.非空的label指针有助于诊断.主要告诉内核这块地址被占用了.当其他地方调用同一地址的gpio_request就会报告错误,该地址已经被申请.在/proc/mem有地址占用表

gpio操作(LS1B)

1.一般gpio_request 封装了mem_request(),起保护作用,最后要调用mem_free之类的,主要是告诉内核这个地址被占用了.当其他地方调用同一地址gpio_request就会报告错误,改地址已被申请.在/proc/mem 可以看到有地址占用表描述. 这种用法的保护前提是大家都遵守先申请在访问,有一个地方没有遵守这个规则,这功能就失效了,就好比进程互斥,必须大家在访问临界资源的时候都先获取锁一样,其中一个没有遵守约定,代码报废: 2.__gpio_set_value 和 gp

TI CC2530基础实验(普通GPIO操作——按一下按键亮一下灯)

有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 电路原理图: 分析:需要按一下按键亮一下灯,并且不采用中断方式,即我们需要实时去监测按下是否被按下(P0_4为低电平表示按下,高电平表示松开). 设置: 灯LED1对应的P1_0引脚为普通I/O.方向为输出 按键S1对应的P0_4引脚为普通I/O.方向为输入 程序: /*****************

DA14683开发:GPIO操作

DA14683GPIO操作 勤基科技  陈杰明 添加GPIO初始化函数 在main.c中,添加以下子函数,初始化GPIO口,按键的引脚设置为输入,LED灯的引脚设置为输出. /*按键GPIO设置*/ void key_led_init() { hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_6, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO);//按键 hw_gpio_set_pin_function(HW_G

树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作

GPIO库的核心功能,当然就是操作GPIO了,GPIO就是"通用输入/输出"接口,比如点亮一个LED.继电器等,或者通过iic spi 1-wire等协议,读取.写入数据,这都是GPIO的用处,可以说没有GPIO,树莓派只能当小电脑用,有了GPIO,就升级成一个控制器了.先来说说怎么操作一个数字量(高低电平). 先看代码: import wiringpi2 as gpio from wiringpi2 import GPIO gpio.wiringPiSetup() #初始化 gpio

tcc893x基于Linux内核的普通GPIO操作总结

采用非平台方式进行配置GPIO引脚 采用非平台方式进行配置gpio引脚,是直接对其gpio组寄存器进行读写.由于不能直接对寄存器物理地址进行操作,所有需要利用ioremap将gpio寄存器的物理地址映射成虚拟地址 写寄存器:writel(value,对应寄存器的虚拟地址); 读寄存器:value = readl(对应寄存器的虚拟地址); 采用tcc893x平台方式进行配置GPIO引脚 tcc已经帮我们实现一些函数来配置gpio对应引脚功能,常用的4个函数: 定义于:arch/arm/mach-t

【嵌入式Linux+ARM】GPIO操作

1.GPIO介绍 GPIO(general purpose i/o ports)意思为通用输入/输出端口,通俗的说就是一些引脚. 我们可以通过它们输出高低电平 或 读入引脚的状态. s3c2440中有130个I/O端口,分为A~J共9组,GPA.GPB...... GPJ 2.GPIO寄存器 既然要操作GPIO,必须对相应的寄存器进行操作,2440中gpio寄存器有: GPxCON--选择引脚功能(输入.输出.保留等) GPxDAT--用来读写引脚 GPcUP --某一位是1时,相应的引脚无内部

一、GPIO操作

1.1 硬件原理图 四个引脚接到LED上,跟别是GPF4,GPF5,GPF6和GPF7,前三个引脚分别控制三个LED,GPF7此引脚作为DM9000网卡的中断. 发光二极管的正极接3.3V电源,负极接在MCU上,当MCU的对应的引脚给一个低电平的时候,电路导通,发光二极管发光. 芯片手册,GPIO配置,如下图,控制LED的属于GPF管脚: GPF的寄存器如下图: GPFCON:GPF管脚的控制寄存器 GPFDAT:GPF管脚的数据寄存器 GPFUP:GPF上拉使能的寄存器 GPF4-GPF6对应

STM32基本GPIO操作:按键输入(扫描+外部中断)

(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注意C语言中变量声明需放在函数开头) 以下是初始化PB5端口(LED灯)的代码,每一条语句的含义在我另一篇博客里 GPIO_InitTypeDef GPIO_Init1; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_Init1.