Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9|回复: 0

2.02-外设篇-GPIO输出高低电平

[复制链接]

56

主题

56

帖子

224

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
224
发表于 2020-10-27 18:53:58 | 显示全部楼层 |阅读模式




开发板原理图
  一,LED(GPIO2)
     819239-20191204144719932-635372563.png
  二,继电器(GPIO5)
     819239-20191204144758797-205705796.png



NONOS(2.2.0)
NONOS(2.2.0)NONOS(2.2.0)
1.设置GPIO输出高低电平
819239-20200518184757636-1519213623.png






设置GPIO2输出高电平
GPIO_OUTPUT_SET(2, 1);

设置GPIO2输出低电平
GPIO_OUTPUT_SET(2, 0);

819239-20200518190044194-1208074456.png




不过正常流程是先设置这个引脚的功能
819239-20200518190427630-518757622.png




PIN_FUNC_SELECT(IO口的寄存器地址 , 功能)
举例1:配置 GPIO2作为普通IO
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U , FUNC_GPIO2);

举例2:配置 GPIO2作为串口功能
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U  , FUNC_UART1_TXD_BK );
  说一下: FUNC_UART1_TXD_BK 这个我具体也不知道是什么意思,只知道可能是作为串口1的TX输出

举例3:配置 GPIO5作为普通IO功能
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5 );

注: 这一个是默认的功能
   819239-20200518190645311-971430387.png



  注:在配置完PIN_FUNC_SELECT 以后,当前引脚为高阻态,既不是高电平也不是低电平.

测试(GPIO2输出高电平点亮LED)
#include "gpio.h"
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U , FUNC_GPIO2);
GPIO_OUTPUT_SET(2, 1);//设置GPIO2输出高电平
819239-20191204200106933-2060455098.png



819239-20191204145342589-335778114.png



测试(GPIO2输出低电平,GPIO5输出高电平控制继电器吸合)
#include "gpio.h"
GPIO_OUTPUT_SET(2, 0);//设置GPIO2输出低电平
GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平
819239-20191204200146177-59845411.png



819239-20191204145811352-659243544.png


如果控制有SPI功能的引脚,需要写上一句话,否则不能控制
WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105);
819239-20200605122553827-2021142611.png






RTOS(2.2.0)
RTOS(2.2.0)RTOS(2.2.0)
  官方提供了两个函数
   819239-20191204144303136-1535627347.png




GPIO_OUTPUT_SET(gpio_no, bit_value)
设置GPIO2输出高电平
GPIO_OUTPUT_SET(2, 1);

设置GPIO2输出低电平
GPIO_OUTPUT_SET(2, 0);

GPIO_OUTPUT(gpio_bits, bit_value)
官方提供的一次性设置多个引脚函数

设置GPIO2和GPIO5输出高电平
GPIO_OUTPUT(BIT2 | BIT5, 1);

设置GPIO2和GPIO5输出低电平
GPIO_OUTPUT(BIT2 | BIT5, 0);


不过正常流程是先设置这个引脚的功能
819239-20191204191355372-1337663443.png


PIN_FUNC_SELECT(IO口的寄存器地址 , 功能)
举例1:配置 GPIO2作为普通IO
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U , FUNC_GPIO2);

举例2:配置 GPIO2作为串口功能
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U  , FUNC_UART1_TXD_BK );
  说一下: FUNC_UART1_TXD_BK 这个我具体也不知道是什么意思,只知道可能是作为串口1的TX输出

举例3:配置 GPIO5作为普通IO功能
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5 );

注: 这一个是默认的功能
   819239-20191204195759497-542096461.png


  注:在配置完PIN_FUNC_SELECT 以后,当前引脚为高阻态,既不是高电平也不是低电平.

测试(GPIO2输出高电平点亮LED)
#include "gpio.h"
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U , FUNC_GPIO2);
GPIO_OUTPUT_SET(2, 1);//设置GPIO2输出高电平






测试(GPIO2输出低电平,GPIO5输出高电平控制继电器吸合)
#include "gpio.h"
GPIO_OUTPUT_SET(2, 0);//设置GPIO2输出低电平
GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平







测试(GPIO2输出低电平,GPIO5输出低电平)
#include "gpio.h"

PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U , FUNC_GPIO2);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);

GPIO_OUTPUT(BIT2 | BIT5, 0);//设置GPIO2和GPIO5输出低电平
819239-20191204200303616-996772659.png






819239-20191204150050773-948537161.png






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2020-11-29 06:54 , Processed in 0.083615 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表