MSP430F5529 DriverLib 库函数学习笔记(二)GPIO

目录

  • 硬知识
    • 一、MSP430单片机端口概述
    • 二、通用IO端口输出特性
    • 三、端口P1和P2
      • 1.输入寄存器PxIN
      • 2.输出寄存器PxOUT
    • 3.方向寄存器PxDIR
      • 4.上拉/下拉电阻使能寄存器PxREN
      • 5.输出驱动能力调节寄存器PxDS
      • 6.功能选择寄存器PxSEL
      • 7.中断使能寄存器PxIE
      • 8.中断触发边沿选择寄存器PxIES
      • 9 .中断标志寄存器PxIFG
    • 四、端口P3~P11
    • 五、端口的应用
  • GPIO API
    • GPIO管脚配置
    • 处理GPIO中断
    • 访问GPIO引脚值
  • 上机实战
    • 扫描输入
    • 外部中断输入


平台:Code Composer Studio 10.3.1

MSP430F5529 LaunchPad™ Development Kit
(MSP‑EXP430F5529LP)

硬知识

一、MSP430单片机端口概述

        通用I/O端口是MSP430单片机最重要也是最常用的外设模块。通用I/O端口不仅可以直接用于输入/输出,而且可以为MSP430单片机应用系统提供必要的逻辑控制信号。
        MSP430F5xx/6xx系列单片机最多可以提供12个通用I/O端口(P1~P11和PJ),大部分端口有8个引脚,少数端口引脚数少于8个。每个I/O引脚都可以被独立地设置为输入或者输出引脚,并且每个I/O引脚都可以被独立地读取或者写入,所有的端口寄存器都可以被独立地置位或者清零。
        P1和P2引脚具有中断能力。从P1和P2端口的各个I/O引脚引入的中断可以独立地被使能,并且被设置为上升沿或者下降沿触发中断。所有P1端口的I/O引脚的中断都来源于同一个中断向量P1IV。同理,P2端口的中断源都来源于另一个中断向量P2IV。
        可以对每个独立的端口进行字节访问,或者将两个结合起来进行字访问。端口组合P1和P2、P3和P4、P5和P6、P7和P8可结合起来称为PA、PB、PC和PD端口。当进行字操作写入PA口时,所有的16位数据都被写入这个端口;利用字节操作写入PA端口低字节时,高字节保持不变;利用字节指令写入PA端口的高字节时,低字节保持不变。其他端口也是一样。当写入的数据长度小于端口的最大长度时,那些没有用到的位保持不变。应用这个规则来访问所有端口,除了中断向量寄存器P1IV和P2IV,它们只能进行字节操作。

二、通用IO端口输出特性

        MSP430单片机在默认输出驱动(PxDS.y=0,即欠驱动强度)且单片机供电电压VCC为3V条件下,端口低电平和高电平的输出特性分别如下两图所示,其中,电流输入为正,输出为负。
在这里插入图片描述

        当PxDS.y控制位被配置为1时,即单片机端口被配置为强驱动模式。在强驱动模式下,端口的低电平和高电平输出特性分别如下两图所示。

在这里插入图片描述

三、端口P1和P2

        端口P1和P2具有输入/输出、中断和外部模块功能,可以通过设置它们各自的9个控制寄存器来实现这些功能。下面所述Px代表P1和P2。

1.输入寄存器PxIN

        输入寄存器是CPU扫描I/O引脚信号的只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容获取I/O端口的输入信号,此时引脚的方向必须选定为输入。输入寄存器中某一位为0,表明该位输入为低;某一位为1,表明该位输入为高。

2.输出寄存器PxOUT

        该寄存器为I/O端口的输出缓冲寄存器。其内容可以像操作内存数据一样写入,以达到改变I/O口输出状态的目的。在读取时,输出缓存的内容与引脚方向定义无关。改变方向寄存器的内容,输出缓存的内容不受影响。
        0:输出为低; 1:输出为高。

3.方向寄存器PxDIR

        相互独立的8位分别定义了8个引脚的输入/输出方向。8位在PUC之后都被复位。使用输入或输出功能时,应先定义端口的方向,输入/输出才能满足设计者的要求。作为输入时,只能读;作为输出时,可读可写。
        0:输入模式; 1:输出模式。

4.上拉/下拉电阻使能寄存器PxREN

该寄存器的每一位可以使能相应I/O引脚的上拉/下拉电阻。该寄存器需和输出寄存器配合使用,才能完成上拉/下拉电阻的配置。
0:上拉/下拉电阻禁止; 1:上拉/下拉电阻使能。

5.输出驱动能力调节寄存器PxDS

        PxDS寄存器的每一位可使相关引脚选择全驱动模式和次驱动模式(减弱驱动能力)。默认的是次驱动模式。
        0:次驱动模式; 1:全驱动模式。

6.功能选择寄存器PxSEL

        P1和P2端口还有其他片内外设功能,为了减少引脚,将这些功能与芯片外的联系通过复用P1和P2引脚的方式来实现。PxSEL用来选择引脚的I/O端口功能与外围模块功能。
        0:选择引脚为普通I/O功能; 1:选择引脚为外围模块功能。

7.中断使能寄存器PxIE

        该寄存器的8位与该端口的8个引脚一一对应,其中每一位用以控制相应引脚的中断允许。

8.中断触发边沿选择寄存器PxIES

        如果允许Px口的某个引脚中断,还需定义该引脚的中断触发沿。该寄存器的8位分别定义了Px口的8个引脚的中断触发沿。

9 .中断标志寄存器PxIFG

        该寄存器有8个标志位,它们含有相应引脚是否有待处理中断的信息,即相应引脚是否有中断请求。如果Px的某个引脚允许中断,同时选择上升沿,则当该引脚发生由低电平向高电平跳变时,PxIFG的相应位就会置位,表明该引脚上有中断事件发生。

四、端口P3~P11

        这些端口没有中断能力,其余功能与P1、P2端口一样,能实现输入/输出功能和外围模块功能。每个端口有6个寄存器供用户使用,用户可通过这6个寄存器对它们进行访问和控制。每个端口的6个寄存器分别为:输入寄存器(PxIN)、输出寄存器(PxOUT)、方向选择寄存器(PxDIR)、输出驱动能力调节寄存器(PxDS)、上拉/下拉电阻使能寄存器(PxREN)和功能选择寄存器(PxSEL)。具体用法同P1和P2端口。

五、端口的应用

        端口是单片机中最经常使用的外设资源。一般在程序的初始化阶段对端口进行配置。配置时,先配置功能选择寄存器PxSEL,若为I/O端口功能,则继续配置方向寄存器PxDIR;若为输入,则继续配置中断使能寄存器PxIE;若允许中断,则继续配置中断触发沿选择寄存器PxIES。
        需要注意的是,P1和P2端口的中断为多源中断,即P1端口的8位共用一个中断向量P1IV,P2端口的8位也共用一个中断向量P2IV。当Px端口上的8个引脚中的任何一个引脚有中断触发时,都会进入同一个中断服务程序。在中断服务程序中,首先应该通过PxIFG判断是哪一个引脚触发的中断,再执行相应的程序,最后还要用软件清除相应的PxIFG标志位。

GPIO API

        GPIO APl被分成三组功能:
                处理配置GPIO引脚的功能,
                处理中断的功能,
                以及访问引脚值的功能。

GPIO管脚配置

GPIO_setAsOutputPin(uint8_t selectedPort, uint16_t selectedPins);
GPIO_setAsInputPin(uint8_t selectedPort, uint16_t selectedPins);
GPIO_setAsInputPinWithPullDownResistor(uint8_t selectedPort, uint16_t selectedPins);
GPIO_setAsInputPinWithPullUpResistor(uint8_t selectedPort, uint16_t selectedPins);
GPIO_setDriveStrength(uint8_t selectedPort, uint16_t selectedPins, uint8_t
driveStrength);
GPIO_setAsPeripheralModuleFunctionOutputPin(uint8_t selectedPort, uint16_t
selectedPins);
GPIO_setAsPeripheralModuleFunctionInputPin(uint8_t selectedPort, uint16_t
selectedPins);

selectedPort

//is the selected port. Valid values are:
GPIO_PORT_P1
GPIO_PORT_P2
GPIO_PORT_P3
GPIO_PORT_P4
GPIO_PORT_P5
GPIO_PORT_P6
GPIO_PORT_P7
GPIO_PORT_P8
GPIO_PORT_P9
GPIO_PORT_P10
GPIO_PORT_P11
GPIO_PORT_PA
GPIO_PORT_PB
GPIO_PORT_PC
GPIO_PORT_PD
GPIO_PORT_PE
GPIO_PORT_PF
GPIO_PORT_PJ

selectedPins

/*
is the specified pin in the selected port. Mask value is the logical OR of any of
the following:
*/
GPIO_PIN0
GPIO_PIN1
GPIO_PIN2
GPIO_PIN3
GPIO_PIN4
GPIO_PIN5
GPIO_PIN6
GPIO_PIN7
GPIO_PIN8
GPIO_PIN9
GPIO_PIN10
GPIO_PIN11
GPIO_PIN12
GPIO_PIN13
GPIO_PIN14
GPIO_PIN15
GPIO_PIN_ALL8
GPIO_PIN_ALL16

driveStrength

//specifies the drive strength of the pin Valid values are:
GPIO_REDUCED_OUTPUT_DRIVE_STRENGTH
GPIO_FULL_OUTPUT_DRIVE_STRENGTH

处理GPIO中断

GPIO_enableInterrupt(uint8_t selectedPort, uint16_t selectedPins);
GPIO_disableInterrupt(uint8_t selectedPort, uint16_t selectedPins);
GPIO_clearInterrupt(uint8_t selectedPort, uint16_t selectedPins);
GPIO_getInterruptStatus(uint8_t selectedPort, uint16_t selectedPins);
GPIO_selectInterruptEdge(uint8_t selectedPort, uint16_t selectedPins, uint8_t
edgeSelect);

edgeSelect

//specifies what transition sets the interrupt flag Valid values are:
GPIO_HIGH_TO_LOW_TRANSITION
GPIO_LOW_TO_HIGH_TRANSITION

访问GPIO引脚值

GPIO_setOutputHighOnPin(uint8_t selectedPort, uint16_t selectedPins);
GPIO_setOutputLowOnPin(uint8_t selectedPort, uint16_t selectedPins);
GPIO_toggleOutputOnPin(uint8_t selectedPort, uint16_t selectedPins);
GPIO_getInputPinValue(uint8_t selectedPort, uint16_t selectedPins);

上机实战

在这里插入图片描述

扫描输入

用户按键为P2.1、P1.1,LED为P4.7、P1.0
将P2.1设为内部上拉输入,P1.0设为输出,当按下S1时,反转LED1

    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN1);GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);while(1){if(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)){delay_ms(20);if(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)){GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);while(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1));}}}

整个main文件为

#include "driverlib.h"#define MCLK_IN_HZ      25000000#define delay_us(x)     __delay_cycles((MCLK_IN_HZ/1000000*(x)))
#define delay_ms(x)     __delay_cycles((MCLK_IN_HZ/1000*(x)))int main(void)
{WDT_A_hold(WDT_A_BASE);GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHZ_8MHZ);PMM_setVCore(PMM_CORE_LEVEL_3);UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);UCS_initFLLSettle(25000, 50);UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN1);GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);while(1){if(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)){delay_ms(20);if(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)){GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);while(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1));}}}
}

按下S1,LED1成功反转。
在这里插入图片描述

外部中断输入

    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN1);//P2.1 interrupt enabledGPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN1);	//使能中断//P2.1 Hi/Lo edgeGPIO_selectInterruptEdge(GPIO_PORT_P2, GPIO_PIN1, GPIO_HIGH_TO_LOW_TRANSITION);	//设置中断类型//P2.1 IFG clearedGPIO_clearInterrupt(GPIO_PORT_P2, GPIO_PIN1);	//清除中断标志位__bis_SR_register(GIE);	//启用可屏蔽中断while(1){}
//******************************************************************************
//
//This is the PORT2_VECTOR interrupt vector service routine
//
//******************************************************************************
#pragma vector=PORT2_VECTOR		// P2口中断源
__interrupt
void Port_2 (void)				// 声明一个中断服务程序,名为Port_2()
{if(GPIO_getInterruptStatus(GPIO_PORT_P2, GPIO_PIN1)){delay_ms(20);if(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)){//P1.0 = toggleGPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);while(!GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1));}//P2.1 IFG clearedGPIO_clearInterrupt(GPIO_PORT_P2, GPIO_PIN1);}
}

经烧录检验,外部中断输入配置成功。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MSP430F5529 DriverLib 库函数学习笔记(三)认识中断

目录一、硬知识中断的基本概念MSP430单片机中断源中断响应过程中断返回过程中断嵌套二、msp430f5529.h中所列的中断向量宏定义平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、硬知识 中断的基本概念 中断…

推荐系统相关算法

摘要: 热门推荐 协同过滤算法 矩阵分解 基于内容的推荐(文本,标签,特征/profile) 基于图的算法 内容: 热门推荐: 热门推荐本质上是一个排行榜,可能会考虑到时间衰减,商品…

冒泡排序的简单理解

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

司机和售票员问题 信号signal注册一例

#include <stdio.h> #include <stdlib.h> #include <signal.h>pid_t pid;void driver_handler(int signo) //司机的信号处理函数 {if (signo SIGUSR1)printf("Lets go!\n");if (signo SIGUSR2)printf("Stop the bus!\n");if (signo …

MSP430F5529 DriverLib 库函数学习笔记(四)UART通信

目录硬知识USCI通信模块USCI的UART模式1. USCI初始化和复位2. 异步通信字符格式3. 异步多机通信模式4. 自动波特率检测5. IrDA编码和解码6. 自动错误检测7. USCI接收使能8. USCI发送使能9. UART波特率的产生10. UART波特率的设置&#xff08;重要&#xff09;&#xff08;1&…

MSP430F5529 DriverLib 库函数学习笔记(四点五)printf打印输出

目录代码实现使相应工程支持打印浮点数实验结果平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)代码实现 重定向fputc(int ch, FILE *f)直接使用printf的方法只有字符串和%s打印正常&#xff0c;数字打印不出来…

flag

mark, to remember

MSP430F5529 DriverLib 库函数学习笔记(五)定时器A

目录硬知识定时器A 16位定时器原理&#xff08;1&#xff09;时钟源选择和分频器&#xff08;2&#xff09;Timer_A工作模式&#xff08;3&#xff09;捕获/比较模块&#xff08;4&#xff09;Timer_A中断&#xff08;重要&#xff09;定时器A API (机翻)定时器A配置和控制的函…

vim 常用快捷键(整理版)

最常用&#xff1a; x 删除后面的字符 X 删除前一个字符 删除3个字符就是3x dd:删除一行 D 删除到行尾 J:删除换行符&#xff0c;使下一行并上来。 nJ:连接后面的n行 u:撤销上一次操作 U:撤销当前行的所有修改 ctrlr:对撤消的撤消 I 在行首插入 a 在光标后插入 A…

MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM波

目录1.通过Timer_A_outputPWM配置产生PWM波初始化函数计算修改占空比的函数整体程序效果2.单定时器产生多路PWM信号初始化函数实验结果3.对称PWM信号的产生初始化程序实验结果平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EX…

Key_EXTI_Config:神舟IV

GPIO 输入上拉&#xff0c;按键按下&#xff0c;pin接地&#xff0c;触发中断 Key_Config 1 void Key_Config(void)2 {3 GPIO_InitTypeDef GPIO_InitStructure;4 5 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);6 7 /* Configure KEY1 Button PC4*/8 RCC_APB2…

Java 将HTML转为XML

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MSP430F5529 DriverLib 库函数学习笔记(七)定时器B

目录硬知识Timer_B特点及结构Timer_B寄存器定时器B API处理计时器配置和控制的函数参数处理计时器输出的函数参数管理定时器B中断的函数参数平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 硬知识 16位定时器B(…

ruoyi接口权限校验

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MSP430F5529 DriverLib 库函数学习笔记(八)模数转换模块(ADC12)

目录硬知识模数转换概述MSP430单片机ADC12模块介绍MSP430单片机ADC12模块操作ADC12的转换模式采样和转换转换存储器使用片内集成温度传感器ADC12模块寄存器ADC_12A API (机翻)处理初始化和转换的函数参数处理中断的函数参数处理ADC_12A的辅助功能的函数参数上机实战&#xff08…

有意思的鼠标指针交互探究

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

python基本数据类型——str

一、字符串的创建 test str() / "" test str("licheng") / "licheng" 无参数&#xff0c;创建空字符串一个参数&#xff0c;创建普通字符串两个参数&#xff0c;int&#xff08;字节&#xff0c;编码&#xff09;二、字符串的常用方法 #capita…

MSP430F5529 DriverLib 库函数学习笔记(九)SPI

目录硬知识USCI的同步模式SPI概述SPI特性及结构框图同步操作原理与操作USCI寄存器——SPI模式USCI_x_SPI API &#xff08;机翻&#xff09;处理状态和初始化的函数参数处理数据的函数参数管理中断的函数参数DMA相关参数平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5…

轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

深入理解Threadlocal

SUN公司早在JDK1.2的时候就为我们提供了java.lang.ThreadLocal,低版本的JDK所提供的get()返回的是Object对象&#xff0c;需要强制类型转换&#xff0c;使用起来不方便&#xff0c;而在JDK1.5引入了泛型&#xff0c;在一定程度地简化ThreadLocal的使用。 我们知道在spring容器中…