zoukankan      html  css  js  c++  java
  • 嵌入式系统--流水灯实验(知识点:GPIO口的调用+配置参数)

    流水灯实验:

    一、GPIO口概述  

    在CortexM4中一大部分都是GPIO口-》General Purose Input/Output 通用输入输出引脚,每一个引脚都可以引出一根功能复用线:配置不同功能;

      GPIO口四大功能:

      (1)输入input 从外部向芯片输入电平信号,芯片用来感知

      (2)输入output 引脚向外部输出电平信号

      (3)复用功能 例如:通用定时器/串口

      (4)特殊功能

    就用GPIO来总管外设

      呐~实验就是以GPIO为基础嘛

      STM32F4xx共有144个GPIO引脚,分为9组:GPIOA~GPIOI 每个GPIO分组都包含16个引脚

       例如这里列出来GPIOA分组的16个引脚

      算一下一共有多少引脚呢:16*9=144

      那么芯片是如何管理这些端口的性质呢:

      每组GPIO口都配置:

      (1)4个32位寄存器用于基本配置(OTPYER、OSPEEDR、MODER、PUPDR)

      (2)2个32位寄存器用于数据配置(IDR、ODR)

      (3)1GPIO用于复位、置位(BSSR)

      (4)1个锁存器(LCKR)

      (5)2个复用功能寄存器(AFRH、AFRL)

      哇有没有感觉一个GPIO口给他服务的寄存器好多啊~哈哈哈各个GPIO都是小皇帝,寄存器是小佣人

    GPIOA:0x4002 0000~0x4002 03ff

    二、GPIO功能描述(主要是前三个)

        

      首先说清楚什么是上拉、下拉电阻

      (a)上拉电阻,在电阻那边接一个正电压

      (b)下拉电阻,电阻那边解一个GND

      (1)输入模式

      输入数据每个一个AHB1时钟周期获取一次值

        (a)输入悬空:GPIO口没有什么电阻在外

      CPU通过读取GPIO口就知道外部是什么电平

        (b)带上拉输入

        在内部接入上拉电阻:那可以知道,外部信号下拉时,CPU读到的电平是低电平

        (c)下拉输入-》和上拉相反

        (d)模拟输入

        获取到接口的模拟信号,并通过ADC转化为数字量

      (2)输出模式

       

      

       a)输出推挽

          可以输出高/低电平:两个mos管够可以工作

       b)输出开漏

          其中一个MOS管不工作,假设是p-mos不工作,要想输出高电平得接入函数能够接入上拉电阻,要不然只能输出0

     (3)复用功能

      每一个GPIO口都可以复用很多其他功能:I2C、UART串口

      每一个GPIO口都有一个复位器,其中复位器将16路复用接入,AFRL->GPIO(0~7) AFRH-》GPIO(8~15)

       

     三、配置GPIO口

      (1)基本配置

      ·GPIOx_MODER(32位)

        

     一共有4中模式所以2位代表一组,共16组

      其中2y+1:2y

         00输入

         01输出  

         10复用

         11模拟

    所以比如配置PA3为输出模式:

        GPIOA_MODER[]&=(1<<6)

      volatile unsigned long *p = (volatile unsigned long *)0x40020000->PA

      unsigned long value = *p

      value &=(1<<6)

    ·输出模式

      GPIOx_OTYPER共32位

      

     其中只有两种模式所以1位就可以

      y

      0-》推挽输出

      1-》开漏输出

    ·推拉寄存器

      GPIOx_PUPDR

      其中和MODER一样

     其中2y+1:2y

         00无上下啦

         01上拉

         10下拉

         11保留

    ·速度寄存器

      

     (2)数据寄存器

      

    ·输入数据寄存器

      只读~偏移地址0x10

      只有低16位可用

      

     ·ODR输出数据寄存器

      那就是rw的

      

     写博客可太累了。。。

     ·BSRR数据复位/置位

     一定要注意奥~BSx和BRx都操作BSx优先~

    reset-》1-》置0

    set-》1-》置1

    (3)上锁寄存器

      就是封锁某个GPIO口

    (4)复用

      每个GPIO口16中功能,一个GPIO占4位;一组占4*16=64位即需要两个32位寄存器来搞~

      GPIOx_AFLR(0~7) GPIOx_AFHR(8~15)

    我要吐了~好了好了现在附上我的代码

     众所周知让灯亮的得看原理图~

     看到了吗?LED右边的端口为低电平时,灯会亮

      那就找对应的GPIO端口~

     

    那就结束了吖要配置的就是

    LED0-LED0-PF9

    LED1-LED1-PF10

    LED2-FSMC D10-PE13

    LED3-FSMC D11-PE14

    (1)声明需要的寄存器

     

     (2)首先端口使能

    GPIOE GPIOF

     

     

     

     

     

     

     

     

    这,keil要是复制粘贴下来注释就乱码了~就截图了奥

  • 相关阅读:
    【Yii2.0】1.5 Yii2.0新特性记录
    【PHP7.0】PHP7.0 小知识点摘录
    【PHP7.0】PHP7.0学习笔记目录
    【Yii2.0】1.4 Apache2.4.23基于主机名的虚拟主机配置
    【Yii2.0】2.2 Yii2.0 Basic代码中路由链接被转义的处理
    【Yii2.0】1.3 MySQL5.7.15修改root密码
    [Leetcode 106] 130 Surrounded Regions
    [Leetcode 105] 90 Subsets II
    [Leetcode 104] 131 Palindrome Partitioning
    [Leetcode 103] 37 Sudoku Solver
  • 原文地址:https://www.cnblogs.com/ttnrt/p/13210126.html
Copyright © 2011-2022 走看看