MSP430F5529库函数GPIO学习

这篇具有很好参考价值的文章主要介绍了MSP430F5529库函数GPIO学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入MSP430Ware,查看例程;数据手册以及原理图获取

建议不是很了解寄存器的看完我的MSP430F5529学习笔记 

目录

GPIO_setAsOutputPin()

函数声明

作用

参数

selectedPort

selectedPins

修改的寄存器

使用

与GPIO_setAsOutputPin()参数一致的函数

 GPIO_setOutputHighOnPin()

GPIO_setOutputLowOnPin()

GPIO_toggleOutputOnPin()

GPIO_setAsInputPin()

GPIO_setAsInputPinWithPullDownResistor()

 GPIO_setAsInputPinWithPullUpResistor()

GPIO_getInputPinValue()

GPIO_enableInterrupt()

GPIO_disableInterrupt() 

GPIO_getInterruptStatus()

GPIO_clearInterrupt()

GPIO_selectInterruptEdge()

函数声明

作用

参数

selectedPort和selectedPins

edgeSelect

修改寄存器

使用

GPIO_setDriveStrength()

函数声明

作用

参数

selectedPort和selectedPins

driveStrength

修改寄存器

使用

实操

开发板和库函数文件

目的

代码

实验1

中断服务函数

 实验2


注意:

(1)使用库函数之前,要导入MSP430Ware。

(2)如果只想看中断部分,直接看实验2。

(3)因为部分库函数MSP430F5529不支持(列在下面),所以我就不讲。

GPIO_setAsPeripheralModuleFunctionOutputPin()

GPIO_setAsPeripheralModuleFunctionInputPin()

GPIO_setAsOutputPin()

函数声明

void GPIO_setAsOutputPin(uint8_t selectedPort, uint16_t selectedPins);

作用

让指定引脚为输出

参数

selectedPort

selectedPort表示哪个端口,可选参数如下

//!        - \b GPIO_PORT_P1
//!        - \b GPIO_PORT_P2
//!        - \b GPIO_PORT_P3
//!        - \b GPIO_PORT_P4
//!        - \b GPIO_PORT_P5
//!        - \b GPIO_PORT_P6
//!        - \b GPIO_PORT_P7
//!        - \b GPIO_PORT_P8
//!        - \b GPIO_PORT_P9
//!        - \b GPIO_PORT_P10
//!        - \b GPIO_PORT_P11
//!        - \b GPIO_PORT_PA
//!        - \b GPIO_PORT_PB
//!        - \b GPIO_PORT_PC
//!        - \b GPIO_PORT_PD
//!        - \b GPIO_PORT_PE
//!        - \b GPIO_PORT_PF
//!        - \b GPIO_PORT_PJ

selectedPins

selectedPins表示哪个具体的Pin,可选参数如下

//!        - \b GPIO_PIN0
//!        - \b GPIO_PIN1
//!        - \b GPIO_PIN2
//!        - \b GPIO_PIN3
//!        - \b GPIO_PIN4
//!        - \b GPIO_PIN5
//!        - \b GPIO_PIN6
//!        - \b GPIO_PIN7
//!        - \b GPIO_PIN8
//!        - \b GPIO_PIN9
//!        - \b GPIO_PIN10
//!        - \b GPIO_PIN11
//!        - \b GPIO_PIN12
//!        - \b GPIO_PIN13
//!        - \b GPIO_PIN14
//!        - \b GPIO_PIN15
//!        - \b GPIO_PIN_ALL8
//!        - \b GPIO_PIN_ALL16

修改的寄存器

 修改了PxDIR ,PxSEL 

使用

现在我们让P1.0为输出 

    //P1.0为输出
    GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);

与GPIO_setAsOutputPin()参数一致的函数

 GPIO_setOutputHighOnPin()

让指定引脚输出高电平,例如让P1.0输出高电平

寄存器修改了PxOUT

        //P1.0输出高电平
        GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);

GPIO_setOutputLowOnPin()

让指定引脚输出低电平,例如让P1.0输出低电平

寄存器修改了PxOUT

        //P1.0输出低电平
        GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);

GPIO_toggleOutputOnPin()

反转指定引脚电平,引脚如果为高电平,使用函数之后就是低电平。引脚如果为低电平,使用函数之后为高电平。例如让P1.0电平反转。

寄存器修改了PxOUT

        //反转P1.0电平
        GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);

GPIO_setAsInputPin()

让指定引脚为输入,例如让P2.1为输入。

寄存器修改了PxDIR ,PxREN ,PxSEL 

    //P2.1为输入
    GPIO_setAsInputPin(GPIO_PORT_P2,GPIO_PIN1);

GPIO_setAsInputPinWithPullDownResistor()

让指定引脚为上拉输入。注意,使用这个函数之前,不需要先使用GPIO_setAsInputPin()让引脚为输入。我们与GPIO_setAsInputPin()对比发现,他多修改了一个PxOUT寄存器

寄存器修改了PxDIR ,PxOUTPxSEL ,PxREN 

让P2.1为下拉输入。

    //P2.1为下拉输入
    GPIO_setAsInputPinWithPullDownResistor(GPIO_PORT_P2,GPIO_PIN1);

 GPIO_setAsInputPinWithPullUpResistor()

与GPIO_setAsInputPinWithPullDownResistor()几乎一致,不过他这个PxOUT设置的是上拉。

作用就是让指定引脚为上拉输入。

让P2.1为下拉输入。

    //P2.1为上拉输入
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN1);

GPIO_getInputPinValue()

获取引脚输入值,比如说按键按下为低电平,那么我们读取电平就要使用这个函数。

没有修改寄存器,而是读取PxIN寄存器。如果为高电平返回GPIO_INPUT_PIN_HIGH(值为1),低电平返回GPIO_INPUT_PIN_LOW(值为0)。

例如检测P2.1电平

        if(GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1) == GPIO_INPUT_PIN_HIGH)
        {
            ...
        }
        else
        {
            ...
        }

GPIO_enableInterrupt()

使能指定引脚上的中断。例如使能P2.1上中断

寄存器修改了PxIE 

    //使能P2.1引脚中断
    GPIO_enableInterrupt(GPIO_PORT_P2,GPIO_PIN1);

GPIO_disableInterrupt() 

与GPIO_enableInterrupt()一致,不过是失能中断。例如失能P2.1上中断

    //失能P2.1引脚中断
    GPIO_disableInterrupt(GPIO_PORT_P2,GPIO_PIN1);

GPIO_getInterruptStatus()

获取中断状态,并且返回相应的Pin。比如我现在设置了P2.1为上升沿中断,现在P2.1接收到一个上升沿之后。我们使用GPIO_getInterruptStatus()函数读取P2.1中断标识位,会返回GPIO_PIN1。如果P2.1没有发生上升沿,则返回一个0。

举例,我们读取P2.1,P1.1,P2.2三个引脚的中断标志位。你有两种写法,第一种更加规范,第二种也可以,因为0000 0010也是非0,也可以进入if语句。

        //读取P2.1中断标志位
        if(GPIO_getInterruptStatus(GPIO_PORT_P2,GPIO_PIN1) == GPIO_PIN1)
        {
        }
        if(GPIO_getInterruptStatus(GPIO_PORT_P2,GPIO_PIN1))
        {
        }
        
        //读取P1.1中断标志位
        if(GPIO_getInterruptStatus(GPIO_PORT_P1,GPIO_PIN1) == GPIO_PIN1)
        {
        }
        if(GPIO_getInterruptStatus(GPIO_PORT_P1,GPIO_PIN1))
        {
        }
        
        //读取P2.2中断标志位
        if(GPIO_getInterruptStatus(GPIO_PORT_P2,GPIO_PIN2) == GPIO_PIN2)
        {
        }
        if(GPIO_getInterruptStatus(GPIO_PORT_P2,GPIO_PIN2))
        {
        }

GPIO_clearInterrupt()

 清除中断标志位,操作的寄存器为PxIFG 。例如清除P2.1的中断标志位

        //清除P2.1中断标志位
        GPIO_clearInterrupt(GPIO_PORT_P2,GPIO_PIN1);

GPIO_selectInterruptEdge()

函数声明

void GPIO_selectInterruptEdge(uint8_t selectedPort, uint16_t selectedPins,uint8_t edgeSelect)

作用

选择指定引脚进行中断检测,只能上升沿或下降沿检测,无法进行双边沿检测

注意,使用中断之前要将引脚设置为输入,同时要使能中断

参数

selectedPort和selectedPins

selectedPort和selectedPins参数与GPIO_setAsOutputPin()一致

edgeSelect

选择上升沿触发或者下降沿触发,无法进行双边沿检测。可选参数如下

GPIO_HIGH_TO_LOW_TRANSITION       //下降沿触发
GPIO_LOW_TO_HIGH_TRANSITION       //上升沿触发

修改寄存器

仅修改了PxIES 

使用

 让P2.1为上升沿触发,注意,如果是上升沿触发,需要设置为下拉输入如果是下降沿触发,需要提前设置为上拉输入


        //P2.1为上升沿触发
        GPIO_selectInterruptEdge(GPIO_PORT_P2,GPIO_PIN1,GPIO_LOW_TO_HIGH_TRANSITION);

GPIO_setDriveStrength()

函数声明

void GPIO_setDriveStrength(uint8_t selectedPort, uint16_t selectedPins,uint8_t driveStrength) 

作用

增强IO口驱动能力

参数

selectedPort和selectedPins

selectedPort和selectedPins参数与GPIO_setAsOutputPin()一致

driveStrength

设置强驱动还是弱驱动。系统默认的是弱驱动能力。参数如下

GPIO_REDUCED_OUTPUT_DRIVE_STRENGTH   //弱驱动
GPIO_FULL_OUTPUT_DRIVE_STRENGTH      //强驱动

修改寄存器

寄存器修改了PxDS 

使用

例如让P1.1为强驱动

    //P1.0为强驱动
    GPIO_setDriveStrength(GPIO_PORT_P1,GPIO_PIN0,GPIO_FULL_OUTPUT_DRIVE_STRENGTH);

实操

开发板和库函数文件

我们以TI官方的MSP430F5529开发板作为例子实操,原理图在最上面链接里面有。导入库函数文件,使用MSP430Ware中找到Empty开头的那个例程。

gpio_setasoutputpin,MSP430F5529,学习,单片机

目的

实验1:让LED1和LED2闪烁。LED1闪烁频率为1s1次,LED2为2s一次。 

 实验2:按下s1并且松开,LED1亮。按下s1不松开,再按下s2,LED2亮(以中断方式实现)。

这两个实验将会把上述所说的绝大多数函数包含,少部分不怎么使用或者两者类似的的不说。

代码

实验1

自己看代码研究,我上面库函数已经说的很清楚了,还看不懂就是你自己的问题。

#include "driverlib.h"


#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))


//******************************************************************************
//!
//!   Empty Project that includes driverlib
//!
//******************************************************************************

void main()
{
    //Stop WDT
    WDT_A_hold(WDT_A_BASE);
    //P1.0为输出
    GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
    //P4.7为输出
    GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN7);
    while(1)
    {
        //反转P1.0电平
        GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN7);
        //P1.0输出高电平
        GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
        delay_ms(1000);
        //P1.0输出低电平
        GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
        delay_ms(1000);
    }
}

中断服务函数

MSP430F5529——中断理解文章来源地址https://www.toymoban.com/news/detail-558075.html

 实验2

#include "driverlib.h"


#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))


//******************************************************************************
//!
//!   Empty Project that includes driverlib
//!
//******************************************************************************

void main (void)
{    //Stop WDT
    WDT_A_hold(WDT_A_BASE);
    //P1.0为输出
    GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
    //P4.7为输出
    GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN7);
    //P2.1为上拉输入
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN1);
    //P1.1为下降沿触发
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);
    GPIO_selectInterruptEdge(GPIO_PORT_P1,GPIO_PIN1,GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);
    GPIO_clearInterrupt(GPIO_PORT_P1,GPIO_PIN1);
    _BIS_SR(GIE);//开启中断使能
    while(1)
    {
        if(GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1) == GPIO_INPUT_PIN_LOW)
        {
            delay_ms(20);
            if(GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1) == GPIO_INPUT_PIN_LOW)
                GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
            while(GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1) == GPIO_INPUT_PIN_LOW);
        }
    }
}

#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
{
    //读取P1.1中断标志位
    if(GPIO_getInterruptStatus(GPIO_PORT_P1,GPIO_PIN1))
    {
        if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1) == GPIO_INPUT_PIN_LOW)
        {
            delay_ms(20);
            if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1) == GPIO_INPUT_PIN_LOW)
                GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN7);
            while(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1) == GPIO_INPUT_PIN_LOW);
        }
        GPIO_clearInterrupt(GPIO_PORT_P1,GPIO_PIN1);
    }
}

到了这里,关于MSP430F5529库函数GPIO学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • msp430f5529学习笔记(2)时钟系统

    写在前~本章将会详细的讲解msp430f5529单片机的时钟系统及其使用方法。如有不妥的地方欢迎各位大佬斧正!!! 目录 什么是时钟系统和时钟源 MSP430f5529时钟源和时钟系统介绍 产生时钟信号的时钟源: 时钟配置        在单片机中,单片机每开始一个周期的工作就需要一个节

    2024年02月17日
    浏览(45)
  • MSP430F5529库函数定时器A——捕获实验

    需提前学习:MSP430F5529库函数学习——串口;MSP430F5529库函数定时器A——硬件PWM 目录 引脚手册获取 实验目的 代码 代码解析 串口数据发送部分 数据捕获部分 定时器部分可选参数 设置定时器部分 捕获部分可选参数 设置捕获引脚部分 中断处理 TA2IV_TACCR2解析 TA2IV_TAIFG解析 主函

    2024年02月13日
    浏览(40)
  • MSP430F5529学习笔记(6)——导入MSP430Ware,查看例程

    MSP430WARE下载; 目录 在线版本 下载MSP430Ware 查看例程 导入例程  离线版本 下载MSP430Ware  查看例程 导入例程 MSP430Ware里面有很多例程和库函数使用手册,我们可以查看学习。非常重要 (1) 打开CCS——view——Resource Explorer  之后我们会进入如下界面 (2)  点击MSP430——Embe

    2024年02月13日
    浏览(54)
  • MSP430F5529学习笔记(五)——串口|UART

            我们在使用MSP430的时候大家会发现插上usb线后电脑上有两个端口标识,那么在进行串口通信时选择哪个呢。其实如图所示,上面的端口是用来进行串口通信的,下面的则是用来进行程序的下载,大家在使用的时候多加分辨即可。          当然熟悉单片机操作的

    2024年02月16日
    浏览(46)
  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看:MSP430F5529库函数学习——串口   目录 代码 ADC初始化部分 引脚复位 ADC12_A_init() 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable() ADC12_A_setupSamplingTimer() ADC12_A_configureMemory() memoryBufferControlIndex  inputSourceSelect positiveRefVolta

    2024年02月16日
    浏览(49)
  • MSP430F5529库函数定时器A——硬件PWM

    需提前学习:MSP430F5529库函数定时器A——定时中断;引脚手册获取; 目录 先上代码 详解 引脚复用 选择引脚 获取引脚手册 看手册  时钟选择 分频 周期 REGISTER选择 比较输出模式 模式类型  增计数模式下的比较输出 连续计数模式下的比较输出 增减计数模式下的比较输出 占

    2024年02月16日
    浏览(59)
  • MSP430F5529单片机入门学习笔记1

    本笔记整理自B站教程 MSP430F5529单片机学习视频汇总 右边部分写错了,看的时候注意 注意#include“driverlib.h”头文件时要注意: 添加MSP430F5xx_6xx文件夹到当前工程下 MSP430F5xx_6xx文件夹是在导入的msp430ware_3_80_13_03包中找 把上述MSP430F5xx_6xx文件夹的路径包含进来 有三个系统时钟可

    2024年02月06日
    浏览(47)
  • 【2023电赛备赛】msp430f5529学习笔记(一)

    【写在前】 本人目前是大二在读生,第一次参加电赛,准备不充分,结果熬了四天,最后成绩却不如人意。有51和32的基础,然后想立一个flag系统的学习一下主打超低功耗的msp430f5529单片机为比赛做准备(毕竟电赛限制TI的板子)。另一方面也是给电协的后继者留下一些参考的

    2024年02月11日
    浏览(47)
  • MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕

    平台:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) P3.0为SDA,P3.1为SCL OLED.c OLED.h OLED_Font.h

    2024年02月15日
    浏览(36)
  • MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

    ​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包