蓝牙IC RF TXRX+MCU ISM>1GHZ
开发环境: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);
}