日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MSP432P401R TI Drivers 库函数学习笔记(四)GPIO

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。