AiBOM
首页 > 文章 > NRF52832 > NRF52832开发:GPIO驱动
为您找到相关搜索
蓝牙IC RF TXRX+MCU ISM>1GHZ
Nordic半导体是一家无晶圆厂半导体公司,专门从事超低功耗(ULP)短距离无线通信。 2.4GHz收发器和发射设备的公司的范围是由一些世界知名品牌在各种各样的像无线键盘和鼠标,游戏控制器,智能型运动设备使用的应用程序。 Nordic半导体是ANT +联盟的成员,并已成功地与合作科克伦,加拿大ANT无线,自2005年以来ANT devices-使用2.4GHz的北欧收发器和经过验证的ANT协议 - 已应用于数百万的无线传感器节点在世界各地。 ANT是完全适合于任何类型的个人局域网(PAN)和实际的无线传感器网络(WSN)的低数据速率无线传感器网络的拓扑结构。
查看详情
射频接收器是IC(集成电路)组件,可用于RF(射频)信号探测。射频接收器设计用于从其他设备接收无线电信号。这些嵌入印刷电路板模块的 IC 可提供无线通信。 射频接收器可接收的数据频率以 MHz 为单元,例如 440 MHz。不同于红外通信的是,射频通信无法中断。射频接收器也可在特定电压范围内运行,例如 4.5 V 至 5.5 V。射频接收器 IC 具有各种封装,例如:QFN、QSOP、SOIC、TSSOP。射频接收器的应用:通信、远程控制、汽车报警系统、自动化、安全和 CCTV、无钥匙门禁系统。
查看详情
热门推荐
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
TL494是什么芯片?TL494 工作原理及典型电路,十分钟带你快速搞懂TL494
TL494是什么芯片?TL494 工作原理及典型电路,十分钟带你快速搞懂TL494
GD32与STM32有什么区别?本篇文章带你详细了解
GD32与STM32有什么区别?本篇文章带你详细了解

NRF52832开发:GPIO驱动

jdh99 2019-12-11 08:12 358次阅读 NRF52832
环境:

开发环境:MDK5.23

说明:
参考Nordic公司经提供了芯片NRF52832的开发包,重新编写GPIO驱动

源代码:

drv_gpio.h

/**
* Copyright (c), 2015-2025
* @file drv_gpio.h
* @brief gpio驱动层头文件
* @author jdh
* @date 2017/6/27
*/
 
#ifndef _DRV_GPIO_H_
#define _DRV_GPIO_H_
 
/*********************************************************************
*							头文件
**********************************************************************/
 
#include <stdint.h>
#include <stdbool.h>
 
/*********************************************************************
*							数据结构
**********************************************************************/
 
/**
* @brief 上拉模式
*/
 
typedef enum
{
	GPIO_NOPULL = 0,
	GPIO_PULLDOWN = 1,
	GPIO_PULLUP = 3
} GPIO_Pull_Mode;
 
 
/*********************************************************************
*							函数
**********************************************************************/
 
/**
* @brief 配置输出模式
* @param pin: 引脚号	
*/
 
void drv_gpio_config_output(uint8_t pin);
 
/**
* @brief 配置输入模式
* @param pin: 引脚号	
* @param pull_mode: 上拉模式
*/
 
void drv_gpio_config_input(uint8_t pin, GPIO_Pull_Mode pull_mode);
 
/**
* @brief 输出高电平
* @param pin: 引脚号	
*/
 
void drv_gpio_set_high(uint8_t pin);
 
/**
* @brief 输出低电平
* @param pin: 引脚号	
*/
 
void drv_gpio_set_low(uint8_t pin);
 
/**
* @brief GPIO输出翻转
* @param pin: 引脚号	
*/
 
void drv_gpio_toggle(uint8_t pin);
 
/**
* @brief 读取引脚电平
* @param pin: 引脚号	
# @retval true: 高电平.false: 低电平
*/
 
bool drv_gpio_read(uint8_t pin);
 
#endif



drv_gpio.c

/**
* Copyright (c), 2015-2025
* @file drv_gpio.c
* @brief gpio驱动层主文件
* @author jdh
* @date 2017/6/27
* @update 2017/8/21
*/
 
/*********************************************************************
*							头文件
**********************************************************************/
 
#include "drv_gpio.h"
#include "nrf52.h"
#include "nrf52_bitfields.h"
 
/*********************************************************************
*							函数
**********************************************************************/
 
/**
* @brief 配置输出模式
* @param pin: 引脚号	
*/
 
void drv_gpio_config_output(uint8_t pin)
{
	NRF_P0->PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos) | 
				 (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | 
				 (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | 
				 (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | 
				 (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos);
}
 
/**
* @brief 配置输入模式
* @param pin: 引脚号	
* @param pull_mode: 上拉模式
*/
 
void drv_gpio_config_input(uint8_t pin, GPIO_Pull_Mode pull_mode)
{
	NRF_P0->PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos)
                           | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)
                           | (pull_mode << GPIO_PIN_CNF_PULL_Pos)
                           | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
                           | (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos);
}
 
/**
* @brief 输出高电平
* @param pin: 引脚号	
*/
 
void drv_gpio_set_high(uint8_t pin)
{
	NRF_P0->OUTSET = 1 << pin;
}
 
/**
* @brief 输出低电平
* @param pin: 引脚号	
*/
 
void drv_gpio_set_low(uint8_t pin)
{
	NRF_P0->OUTCLR = 1 << pin;
}
 
/**
* @brief GPIO输出翻转
* @param pin: 引脚号	
*/
 
void drv_gpio_toggle(uint8_t pin)
{
    uint32_t pins_state = NRF_P0->OUT;
 
    NRF_P0->OUTSET = (~pins_state & (1UL << pin));
    NRF_P0->OUTCLR = (pins_state & (1UL << pin));
}
 
/**
* @brief 读取引脚电平
* @param pin: 引脚号	
# @retval true: 高电平.false: 低电平
*/
 
bool drv_gpio_read(uint8_t pin)
{
	return ((NRF_P0->IN >> pin) & 0x1);


}


温馨提示:本文由网友投稿,经网站编辑整理发布,转载请注明出处和本文链接,如有侵犯您的权益,请及时与我们联系,我们将核实情况后进行相关处理!
关注

关注采芯网

回复型号,查元件信息

采芯网 FindIC 用户意见反馈
问题类型
网站页面问题或建议
数据问题或错误
元器件采购询价
其他
意见建议
联系方式
反馈和联系