目录

  • API
    • 头文件
    • 函数 (机翻)
      • GPIO驱动程序api返回的通用状态代码
      • GPIO_PinConfig输出引脚配置宏
      • GPIO_PinConfig输入引脚配置宏
      • GPIO_PinConfig中断配置宏
      • 特殊的GPIO_PinConfig配置宏
    • 类型别名
  • 示例
    • 配置引脚示例
    • 配置外部中断示例
  • 上机实战
    • 配置引脚
    • main.c
    • myTask.c
    • myTask.h
    • 实验结果

平台:Code Composer Studio 10.4.0
MSP432P401R SimpleLink™ 微控制器 LaunchPad™ 开发套件
(MSP-EXP432P401R)


API

GPIO API官方手册

头文件

#include <ti/drivers/GPIO.h>

函数 (机翻)

void     GPIO_clearInt (uint_least8_t index)
清除GPIO管脚中断标志
void    GPIO_disableInt (uint_least8_t index)
禁用GPIO脚中断
void    GPIO_enableInt (uint_least8_t index)
使能GPIO脚中断
void    GPIO_getConfig (uint_least8_t index, GPIO_PinConfig *pinConfig)
获取gpio引脚的当前配置
void    GPIO_init ()
初始化GPIO模块
uint_fast8_t    GPIO_read (uint_least8_t index)
读取GPIO管脚的值
void    GPIO_setCallback (uint_least8_t index, GPIO_CallbackFxn callback)
绑定回调函数到GPIO脚中断
int_fast16_t    GPIO_setConfig (uint_least8_t index, GPIO_PinConfig pinConfig)
配置gpio管脚
void    GPIO_toggle (uint_least8_t index)
切换GPIO的当前状态
void    GPIO_write (uint_least8_t index, unsigned int value)
将该值写入GPIO管脚

GPIO驱动程序api返回的通用状态代码

#define  GPIO_STATUS_RESERVED   (-32)
//通用GPIO状态码保留偏移量
#define     GPIO_STATUS_SUCCESS   (0)
//GPI_setConfig()返回成功的状态代码
#define     GPIO_STATUS_ERROR   (-1)
//GPI_setConfig()返回的通用错误状态代码

GPIO_PinConfig输出引脚配置宏

#define  GPIO_CFG_OUTPUT
引脚是输出引脚
#define     GPIO_CFG_OUT_STD
引脚是是主动输出高/低
#define     GPIO_CFG_OUT_OD_NOPULL
输出引脚是开漏模式
#define     GPIO_CFG_OUT_OD_PU
输出引脚是开漏上拉
#define     GPIO_CFG_OUT_OD_PD
输出引脚是开漏下拉
#define     GPIO_CFG_OUT_STR_LOW
将输出引脚输出强度设置为低
#define     GPIO_CFG_OUT_STR_MED
将输出引脚输出强度设置为中
#define     GPIO_CFG_OUT_STR_HIGH
将输出引脚输出强度设置为高
#define     GPIO_CFG_OUT_HIGH
设置引脚输出为1
#define     GPIO_CFG_OUT_LOW
设置引脚输出为0

GPIO_PinConfig输入引脚配置宏

#define  GPIO_CFG_INPUT
引脚是输入引脚
#define     GPIO_CFG_IN_NOPULL
输入引脚不内部上拉\下拉
#define     GPIO_CFG_IN_PU
输入引脚内部上拉
#define     GPIO_CFG_IN_PD
输入引脚不内部下拉

GPIO_PinConfig中断配置宏

#define  GPIO_CFG_IN_INT_NONE
没有中断
#define     GPIO_CFG_IN_INT_FALLING
在下降沿触发中断
#define     GPIO_CFG_IN_INT_RISING
在上升沿触发中断
#define     GPIO_CFG_IN_INT_BOTH_EDGES
在上升沿和下降沿触发中断
#define     GPIO_CFG_IN_INT_LOW
低电平触发中断
#define     GPIO_CFG_IN_INT_HIGH
高电平触发中断

特殊的GPIO_PinConfig配置宏

#define  GPIO_CFG_IN_INT_ONLY
//GPIO_PinConfig参数中以或运算通知GPIO_setConfig()只配置GPIO输入引脚的中断属性
#define     GPIO_DO_NOT_CONFIG
//使用这个GPIO_PinConfig宏来通知GPIO_init()不要配置相应的pin

类型别名

typedef uint32_t     GPIO_PinConfig
GPIO管脚配置参数
typedef void(*  GPIO_CallbackFxn) (uint_least8_t index)
GPIO回调函数名

示例

// Import GPIO Driver definitions
#include <ti/drivers/GPIO.h>
// Define names for GPIO pin indexes
#define BUTTON 0
#define LED    1
// One-time init of GPIO driver
GPIO_init();
// Read GPIO pin
unsigned int state = GPIO_read(BUTTON);
// Write to GPIO pin
GPIO_write(LED, state);

配置引脚示例

// Driver header file
#include <ti/drivers/GPIO.h>
// TI Driver configuration
#include "ti_drivers_config.h"
#define LED    CONFIG_GPIO_LED0
#define BUTTON CONFIG_GPIO_BUTTON0
void main()
{// One-time init of GPIO driverGPIO_init();// Configure a button input pinGPIO_setConfig(BUTTON, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);// Configure an LED output pinGPIO_setConfig(LED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
}

配置外部中断示例

// Driver header file
#include <ti/drivers/GPIO.h>
// TI Drivers Configuration
#include "ti_drivers_config.h"
// Board file
#include <ti/drivers/Board.h>
// GPIO button call back function
void gpioButton0Fxn(uint_least8_t index);
main()
{// One-time Board initializationBoard_init();// One-time init of GPIO driverGPIO_init();// Turn on user LEDGPIO_write(CONFIG_GPIO_LED0, CONFIG_GPIO_LED_ON);// install Button callbackGPIO_setCallback(CONFIG_GPIO_BUTTON0, gpioButton0Fxn);// Enable interruptsGPIO_enableInt(CONFIG_GPIO_BUTTON0);
}
//
//  ======== gpioButton0Fxn ========
//  Callback function for the GPIO interrupt on CONFIG_GPIO_BUTTON0
//
//  Note: index is the GPIO id for the button which is not used here
//
void gpioButton0Fxn(uint_least8_t index)
{// Toggle the LEDGPIO_toggle(CONFIG_GPIO_LED0);
}

上机实战

配置引脚


继续在syscfg文件中配置引脚



build后会在

中生成对应的映射


并在GPIO_init()中自动地初始化,因此若是不需要动态修改引脚配置,调用GPIO_init()就行。

main.c

实现两个回调函数,并在mainThread中启用中断

/**  ======== main_tirtos.c ========*/
#include <stdint.h>/* POSIX Header files */
#include <pthread.h>/* RTOS header files */
#include <ti/sysbios/BIOS.h>/* Driver configuration */
#include <ti/drivers/Board.h>
#include <ti/drivers/GPIO.h>#include "./inc/myTask.h"/* Driver configuration */
#include "ti_drivers_config.h"void S1_Callback_Function(void)
{usleep(100000);if(!GPIO_read(S1)){GPIO_toggle(LED1);while(!GPIO_read(S1));}
}void S2_Callback_Function(void)
{usleep(100000);if(!GPIO_read(S2)){GPIO_toggle(LED2);while(!GPIO_read(S2));}
}/**  ======== main ========*/
int main(void)
{/* Call driver init functions */Board_init();GPIO_init();My_Task_Init(mainThread, 1, 1024);BIOS_start();return (0);
}/**  ======== mainThread ========*/
void *mainThread(void *arg0)
{GPIO_enableInt(S1);GPIO_enableInt(S2);while(1){}return (NULL);
}

本次实验不需要建立其他任务

myTask.c

/** myTask.c**  Created on: 2021年8月2日*      Author: Royic*/#include <stdint.h>/* POSIX Header files */
#include <pthread.h>/* RTOS header files */
#include <ti/sysbios/BIOS.h>/* Driver configuration */
#include "ti_drivers_config.h"#include "./inc/myTask.h"/* Driver Header files */
#include <ti/drivers/GPIO.h>
// #include <ti/drivers/I2C.h>
// #include <ti/drivers/SPI.h>
// #include <ti/drivers/UART.h>
// #include <ti/drivers/Watchdog.h>void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize)
{pthread_t           thread;pthread_attr_t      attrs;struct sched_param  priParam;int                 retc;/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);/* Set priority, detach state, and stack size attributes */priParam.sched_priority = priority;retc = pthread_attr_setschedparam(&attrs, &priParam);retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);retc |= pthread_attr_setstacksize(&attrs, stacksize);if (retc != 0){/* failed to set attributes */while (1){}}retc = pthread_create(&thread, &attrs, startroutine, NULL);if (retc != 0){/* pthread_create() failed */while (1){}}
}

myTask.h

/** myTask.h**  Created on: 2021年8月2日*      Author: Royic*/#ifndef INC_MYTASK_H_
#define INC_MYTASK_H_/* For usleep() */
#include <unistd.h>
#include <stdint.h>
#include <stddef.h>void *mainThread(void *arg0);
void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize);#endif /* INC_MYTASK_H_ */

实验结果

按下S1 LED1反转,按下S2 LED2反转

MSP432P401R TI Drivers 库函数学习笔记(四)GPIO相关推荐

  1. MSP432P401R TI Drivers 库函数学习笔记(八)ADC

    目录 API (机翻) 上机实战 引脚配置 ADC引脚配置 串口引脚配置 指示工作状态的LED1引脚配置 代码部分 ADC初始化和读取函数 myADC.c myADC.h 获取数据并通过串口发送 ma ...

  2. MSP432P401R TI Drivers 库函数学习笔记(七)I2C驱动OLED屏幕

    目录 API (机翻) 上机实战 引脚配置 I2C引脚配置 工作指示灯LED1引脚配置 文件结构 I2C 初始化.读写函数 myI2C.c myI2C.h OLED初始化和测试代码 main.c ma ...

  3. MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口

    目录 API (机翻) 上机实战 配置 初始化和实验 实验结果 整体代码 myUart.c myUart.h myTask.c myTask.h main.c main.h 平台:Code Compo ...

  4. MSP432P401R TI Drivers 库函数学习笔记(五)PWM

    目录 API (机翻) 函数 上机实战 配置引脚 PWM初始化,实现简易呼吸灯的效果 实验结果 完整代码 myPWM.c myPWM.h myTask.c myTask.h main.c main.h ...

  5. MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置

    目录 任务的简单创建 图形化配置上手 简简单单点个灯 配置引脚 建立任务 实验结果 整体代码 main.c myTask.c myTask.h 平台:Code Composer Studio 10.4 ...

  6. MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)

    目录 简介 TI-RTOS FreeRTOS POSIX 运行时对象查看器 (Runtime Object Viewer) TI-POSIX 介绍 在源代码中使用 POSIX TI-POSIX支持的函 ...

  7. MSP432P401R TI Drivers 库函数学习笔记(一)导入工程模板

    目录 从Resource Explorer中导入 从SDK导入 测试 平台:Code Composer Studio 10.4.0 MSP432P401R SimpleLink™ 微控制器 Launc ...

  8. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  9. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

最新文章

  1. c#创建可以为空类型
  2. lua学习笔记-HelloWorld
  3. jquery 毫秒转换成日期_基于jQuery的时间戳与日期间的转化
  4. MS CRM 2011中,对于多实体数据文件的导入
  5. Eclipse 常用快捷键-java
  6. 开源系统管理资源大合辑
  7. BZOJ3387栅栏行动
  8. vue 后台重定向不成功_VUE 重定向不起效果了。
  9. [译] 手摸手教你如何轻松发布私有 App
  10. electron打包exe文件
  11. Metamask + remix:在ropsten测试链上取出已经部署的合约并进行一些操作
  12. 身份证号中提取性别、年龄、年月日的Excel(WPS)公式
  13. matlab 一榀框架,一榀框架(一榀框架的选取依据)
  14. 线性代数高频考题:判断含参数的线性方程组解的形式
  15. Java SSM商城系统
  16. 机械革命极光Pro 评测
  17. 谈谈自己关于阅读源码的一点鄙见
  18. Amlogic连续三年居中国OTT芯片市占率第一
  19. GROMACS运行参数之em.mdp文件详解
  20. C语言自学之路:养成写博客的习惯,记录自学之路

热门文章

  1. 解释spring,struts,hibernate优缺点
  2. android自动化框架简要剖析(一):运行原理+基本框架
  3. JAVA中线程同步的方法
  4. 如何备份 Outlook Express 项
  5. nessuss中文使用手册
  6. itchat 道歉_人类的“道歉”
  7. 自定义按钮动态变化_新闻价值的变化定义
  8. 581. 最短无序连续子数组
  9. leetcode 897. 递增顺序搜索树(中序遍历)
  10. leetcode 19. 删除链表的倒数第N个节点(双指针)