MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
生活随笔
收集整理的這篇文章主要介紹了
MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- API
- 頭文件
- 函數(shù) (機(jī)翻)
- 宏
- GPIO驅(qū)動程序api返回的通用狀態(tài)代碼
- GPIO_PinConfig輸出引腳配置宏
- GPIO_PinConfig輸入引腳配置宏
- GPIO_PinConfig中斷配置宏
- 特殊的GPIO_PinConfig配置宏
- 類型別名
- 示例
- 配置引腳示例
- 配置外部中斷示例
- 上機(jī)實戰(zhàn)
- 配置引腳
- main.c
- myTask.c
- myTask.h
- 實驗結(jié)果
平臺:Code Composer Studio 10.4.0
MSP432P401R SimpleLink? 微控制器 LaunchPad? 開發(fā)套件
(MSP-EXP432P401R)
API
GPIO API官方手冊
頭文件
#include <ti/drivers/GPIO.h>函數(shù) (機(jī)翻)
void GPIO_clearInt (uint_least8_t index) 清除GPIO管腳中斷標(biāo)志 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引腳的當(dāng)前配置 void GPIO_init () 初始化GPIO模塊 uint_fast8_t GPIO_read (uint_least8_t index) 讀取GPIO管腳的值 void GPIO_setCallback (uint_least8_t index, GPIO_CallbackFxn callback) 綁定回調(diào)函數(shù)到GPIO腳中斷 int_fast16_t GPIO_setConfig (uint_least8_t index, GPIO_PinConfig pinConfig) 配置gpio管腳 void GPIO_toggle (uint_least8_t index) 切換GPIO的當(dāng)前狀態(tài) void GPIO_write (uint_least8_t index, unsigned int value) 將該值寫入GPIO管腳宏
GPIO驅(qū)動程序api返回的通用狀態(tài)代碼
#define GPIO_STATUS_RESERVED (-32) //通用GPIO狀態(tài)碼保留偏移量 #define GPIO_STATUS_SUCCESS (0) //GPI_setConfig()返回成功的狀態(tài)代碼 #define GPIO_STATUS_ERROR (-1) //GPI_setConfig()返回的通用錯誤狀態(tài)代碼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 將輸出引腳輸出強(qiáng)度設(shè)置為低 #define GPIO_CFG_OUT_STR_MED 將輸出引腳輸出強(qiáng)度設(shè)置為中 #define GPIO_CFG_OUT_STR_HIGH 將輸出引腳輸出強(qiáng)度設(shè)置為高 #define GPIO_CFG_OUT_HIGH 設(shè)置引腳輸出為1 #define GPIO_CFG_OUT_LOW 設(shè)置引腳輸出為0GPIO_PinConfig輸入引腳配置宏
#define GPIO_CFG_INPUT 引腳是輸入引腳 #define GPIO_CFG_IN_NOPULL 輸入引腳不內(nèi)部上拉\下拉 #define GPIO_CFG_IN_PU 輸入引腳內(nèi)部上拉 #define GPIO_CFG_IN_PD 輸入引腳不內(nèi)部下拉GPIO_PinConfig中斷配置宏
#define GPIO_CFG_IN_INT_NONE 沒有中斷 #define GPIO_CFG_IN_INT_FALLING 在下降沿觸發(fā)中斷 #define GPIO_CFG_IN_INT_RISING 在上升沿觸發(fā)中斷 #define GPIO_CFG_IN_INT_BOTH_EDGES 在上升沿和下降沿觸發(fā)中斷 #define GPIO_CFG_IN_INT_LOW 低電平觸發(fā)中斷 #define GPIO_CFG_IN_INT_HIGH 高電平觸發(fā)中斷特殊的GPIO_PinConfig配置宏
#define GPIO_CFG_IN_INT_ONLY //GPIO_PinConfig參數(shù)中以或運(yùn)算通知GPIO_setConfig()只配置GPIO輸入引腳的中斷屬性 #define GPIO_DO_NOT_CONFIG //使用這個GPIO_PinConfig宏來通知GPIO_init()不要配置相應(yīng)的pin類型別名
typedef uint32_t GPIO_PinConfig GPIO管腳配置參數(shù) typedef void(* GPIO_CallbackFxn) (uint_least8_t index) GPIO回調(diào)函數(shù)名示例
// 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); }上機(jī)實戰(zhàn)
配置引腳
繼續(xù)在syscfg文件中配置引腳
build后會在
中生成對應(yīng)的映射
并在GPIO_init()中自動地初始化,因此若是不需要動態(tài)修改引腳配置,調(diào)用GPIO_init()就行。
main.c
實現(xiàn)兩個回調(diào)函數(shù),并在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); }本次實驗不需要建立其他任務(wù)
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_ */實驗結(jié)果
按下S1 LED1反轉(zhuǎn),按下S2 LED2反轉(zhuǎn)
總結(jié)
以上是生活随笔為你收集整理的MSP432P401R TI Drivers 库函数学习笔记(四)GPIO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp中使用colorUI说明文档
- 下一篇: 【我们都爱Paul Hegarty】斯坦