zoukankan      html  css  js  c++  java
  • 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识:

    GPIO—general purpose intput output

    是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

    1、GPIO跟引脚有什么区别? 2、如何查找每一个GPIO的功能说明?

    引脚包含了GPIO,也就是GPIO是引脚的子集。

    通过《STM32F4xx英文数据手册》可以查询每一个GPIO的功能说明,需要注意带FT标志的表示兼容5V,否则只耐3.3V。

    下面介绍推挽输出和开漏输出:

    (1)可以吸电流,也可以贯电流,单片机贯电流一般不能超过20ma,这也是为什么一般驱动LED灯都是用的推挽输出的原因;(2)和开漏输出相比,push-pull的高低电平由IC的电源决定,不能简单的做逻辑操作等;(3)两个晶体管不能同时导通,上面导通输出高电平,下面导通输出低电平,带负载能力强。

    (1)对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的Up-translate和down-translate转换 
    (2)可以将多个开漏输出的Pin脚,连接到一条线上,形成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C(注意选择输出模式哦),SMBus等总线判断总线占用状态的原理。(3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。(4)可以利用改变上拉电源的电压,改变传输电平:(5)开漏输出其实就是推挽输出的下半部分,但是开漏输出这样就只能输出低电平,为了输出高电平,加了一个上拉电阻,这样之后,不仅可以输出高电平,还可以突破INT输入的高电平的限制,比如INT输入3.3V,我VDD 5V,这样最后的输出是5V,可以做匹配电压,但减小了带负载能力。

    具体参考百度文库资料:https://wenku.baidu.com/view/cbf43cd5bceb19e8b8f6ba70.html

    在完成上面的基础知识之后,就要开始我们的编程实战了,首先第一步还是看硬件设计:

    可以看出我们的硬件决定了我们端口需要输出低电平才可以点亮LED,而且也应该采用推挽输出的方式,因为有灌电流,也因为我们这里用不着线与功能而且需要一定的带负载能力。

    这里还是没有使用最新的HAL库,还是使用固件库编程,固件库编程是必备基础。

    既然基于固件库,就得明白别人的程序的缩写和命名规范:

     

    固态函数库遵从以下命名规则
    PPP 表示任一外设缩写,例如: ADC
    系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如: stm32f10x_conf.h
    常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都
    由英文字母大写书写。
    寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范与本用
    户手册一致。
    外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:
    SPI_SendData。 在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
    名为 PPP_Init 的函数,其功能是根据 PPP_InitTypeDef 中指定的参数,初始化外设 PPP,例如 TIM_Init.

    名为 PPP_DeInit 的函数,其功能为复位外设 PPP 的所有寄存器至缺省值,例如 TIM_DeInit.
    名为 PPP_StructInit 的函数,其功能为通过设置 PPP_InitTypeDef 结构中的各种参数来定义外设的功能,
    例如: USART_StructInit
    名为 PPP_Cmd 的函数,其功能为使能或者失能外设 PPP,例如: SPI_Cmd.
    名为 PPP_ITConfig 的函数,其功能为使能或者失能来自外设 PPP 某中断源,例如: RCC_ITConfig.
    名为 PPP_DMAConfig 的函数,其功能为使能或者失能外设 PPP DMA 接口,例如: TIM1_DMAConfig.
    用以配置外设功能的函数,总是以字符串“Config”结尾,例如 GPIO_PinRemapConfig.
    名为 PPP_GetFlagStatus 的函数,其功能为检查外设 PPP 某标志位被设置与否,例如: I2C_GetFlagStatus.
    名为 PPP_ClearFlag 的函数,其功能为清除外设 PPP 标志位,例如: I2C_ClearFlag.
    名为 PPP_GetITStatus 的函数,其功能为判断来自外设 PPP 的中断发生与否,例如: I2C_GetITStatus.
    名 为 PPP_ClearITPendingBit 的 函 数 , 其 功 能 为 清 除 外 设 PPP 中 断 待 处 理 标 志 位 , 例 如 :
    I2C_ClearITPendingBit.
    详情参考《STM32固件库使用手册的中文翻译版》

    至此,终于可以开始挽起袖子干了。

  • 相关阅读:
    MySql--密码查看或修改
    javaweb学习--Servlet开发(一)
    javaweb学习--http协议
    Vue.js学习笔记(一)
    javascript事件处理
    javascript时间的相关操作
    代理模式(Proxy)
    单例模式(Singleton)
    ArrayBlockingQueue和LinkedBlockingQueue队列
    自增(++)和自减(--)运算符
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6685988.html
Copyright © 2011-2022 走看看