MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
生活随笔
收集整理的這篇文章主要介紹了
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 設置引腳輸出為0GPIO_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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp中使用colorUI说明文档
- 下一篇: 【预测模型】基于Elman神经网络预测电