MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
目录
- 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相关推荐
- MSP432P401R TI Drivers 库函数学习笔记(八)ADC
目录 API (机翻) 上机实战 引脚配置 ADC引脚配置 串口引脚配置 指示工作状态的LED1引脚配置 代码部分 ADC初始化和读取函数 myADC.c myADC.h 获取数据并通过串口发送 ma ...
- MSP432P401R TI Drivers 库函数学习笔记(七)I2C驱动OLED屏幕
目录 API (机翻) 上机实战 引脚配置 I2C引脚配置 工作指示灯LED1引脚配置 文件结构 I2C 初始化.读写函数 myI2C.c myI2C.h OLED初始化和测试代码 main.c ma ...
- MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口
目录 API (机翻) 上机实战 配置 初始化和实验 实验结果 整体代码 myUart.c myUart.h myTask.c myTask.h main.c main.h 平台:Code Compo ...
- MSP432P401R TI Drivers 库函数学习笔记(五)PWM
目录 API (机翻) 函数 上机实战 配置引脚 PWM初始化,实现简易呼吸灯的效果 实验结果 完整代码 myPWM.c myPWM.h myTask.c myTask.h main.c main.h ...
- MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
目录 任务的简单创建 图形化配置上手 简简单单点个灯 配置引脚 建立任务 实验结果 整体代码 main.c myTask.c myTask.h 平台:Code Composer Studio 10.4 ...
- MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)
目录 简介 TI-RTOS FreeRTOS POSIX 运行时对象查看器 (Runtime Object Viewer) TI-POSIX 介绍 在源代码中使用 POSIX TI-POSIX支持的函 ...
- MSP432P401R TI Drivers 库函数学习笔记(一)导入工程模板
目录 从Resource Explorer中导入 从SDK导入 测试 平台:Code Composer Studio 10.4.0 MSP432P401R SimpleLink™ 微控制器 Launc ...
- STM32F103学习笔记四 时钟系统
STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...
- ROS学习笔记四:理解ROS节点
ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...
最新文章
- c#创建可以为空类型
- lua学习笔记-HelloWorld
- jquery 毫秒转换成日期_基于jQuery的时间戳与日期间的转化
- MS CRM 2011中,对于多实体数据文件的导入
- Eclipse 常用快捷键-java
- 开源系统管理资源大合辑
- BZOJ3387栅栏行动
- vue 后台重定向不成功_VUE 重定向不起效果了。
- [译] 手摸手教你如何轻松发布私有 App
- electron打包exe文件
- Metamask + remix:在ropsten测试链上取出已经部署的合约并进行一些操作
- 身份证号中提取性别、年龄、年月日的Excel(WPS)公式
- matlab 一榀框架,一榀框架(一榀框架的选取依据)
- 线性代数高频考题:判断含参数的线性方程组解的形式
- Java SSM商城系统
- 机械革命极光Pro 评测
- 谈谈自己关于阅读源码的一点鄙见
- Amlogic连续三年居中国OTT芯片市占率第一
- GROMACS运行参数之em.mdp文件详解
- C语言自学之路:养成写博客的习惯,记录自学之路
热门文章
- 解释spring,struts,hibernate优缺点
- android自动化框架简要剖析(一):运行原理+基本框架
- JAVA中线程同步的方法
- 如何备份 Outlook Express 项
- nessuss中文使用手册
- itchat 道歉_人类的“道歉”
- 自定义按钮动态变化_新闻价值的变化定义
- 581. 最短无序连续子数组
- leetcode 897. 递增顺序搜索树(中序遍历)
- leetcode 19. 删除链表的倒数第N个节点(双指针)