5788|3

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

第三篇 MSP-EXP430F5529LP的通用GPIO操作 [复制链接]



一、        通用I/O的简单操作
参见MSP430X5XX datasheet.pdf

1.1   I/O的简介
特点:
l  多种复用和设置(即可控制是否输入、是否输出、是否接上拉电阻、是否接下拉电阻、是否可接受中断);
l  独立的可编程的单独的I / o   
l  输入或输出的任意组合  
l  单独配置P1和P2中断。一些设备可能包括额外的端口中断。  
l  独立的输入和输出数据寄存器  
1.2  I/O的简单配置
MSP430的I/O的配置是用软件来实现的,是通过相应的配置寄存器来实现的。(用到某个I/O时,一定要先配置好该I/O,否则易出错)
1.2.1 I/O方向设定寄存器PXDIR
如设定P1.1和P1.2为输出状态操作为:P1DIR |=(BIT1+BIT2),拉高设定为输出,拉低设定为输入(默认)。
1.2.2  I/O输入设定寄存器PXIN
如设定P1.1和P1.2的输入为低电平操作为:P1IN &=~(BIT1+BIT2)。
1.2.3  I/O输出设定寄存器PXOUT
l  当只用为简单的输出时:
如设定P1.1和P1.2输出高电平操作为:P1OUT |=(BIT1+BIT2)。
l  如果该引脚为正常
I/O功能,且当前已设定为输入方向,且上拉/下拉电阻寄存器是有效地。那么PXOUT可以用来配置上拉和下拉电阻:低电平为下拉电阻;高电平为上拉电阻;
1.2.4 上拉下拉电阻使能寄存器PXREN
l  低电平该寄存器为无效状态;
l  高电平该寄存器为有效状态;
1.2.5 输出驱动能力设置寄存器PXDS
弱化驱动可以减弱电磁干扰EMI,全力驱动会增强电磁干扰。默认为减弱驱动。低电平表示减弱的驱动(默认);高电平表示全力的驱动;
1.2.6  功能选择寄存器PXSEL
用来声明该端口是要应用于外围电路的特殊功能(不决定输入输出方向),默认为低电平。低电平表示普通的I/O(默认);高电平表示该引脚将有连接外围电路的特殊用途;
如:开发板初始化函数HAL_Board.c中有这样一句程序:
P5SEL |=(BIT2+BIT3)(=00001100);
这句话的意思就是声明P5.2和P5.3将有特殊用途,实际上这两个I/O接的是外部的高频时钟晶振(之后还要设定为输入状态才可以)。此外需要注意的是,一旦某个I/O的PXSEL置高了,那么该引脚将不能再被用为中断引脚。总结,简单的程序应用:
/*实现LED的闪烁*/
//****************************************************************************/
//              MSP430F5529LP
//             ----------------------
//            |                 |
//            |                 |
//         -- |RST          P4.7|-->LED2
//            |                 |
//            |             P1.0|-->LED1
//  2014-7-7
//  IAR Embedded Workbench Version: 5.60
//****************************************************************************/
#include   //该头文件内部包含430各个寄存器的配置情况
int main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD;           // 关闭看门狗
P1DIR |= BIT0;                           // P1.0设置为输出
P4DIR |= BIT7;                           // P4.7设置为输出  
while(1)                                
  {
   P1OUT ^= BIT0;                        // 异或 P1.0
   for(i=50000;i>0;i--);                      // 延时
   P4OUT ^= BIT7;                        // 异或 P4.7
   for(i=50000;i>0;i--);                      // 延时
  }
}

/*实现按键的控制*/
//*****************************************************************************/
// Description: Button1-->P2.1 Button2-->P1.1
//
//              MSP430F5529LP
//            -----------------
//       /|\|              XIN|-
//        | |                 |
//        --|RST          XOUT|-
//    /|\   |                 |
//     --o--|P2.1         P1.0|-->LED1
//    \|/   |                 |
//     --o--|P1.1         P4.7|-->LED2
//  2014-7-7
//  IAR Embedded Workbench Version: 5.60
//****************************************************************************/
#include
int main(void)
{
  inti;
WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗
P1DIR |= BIT0;                           // 设置P1.0为输出
P4DIR |= BIT7;                           // 设置P4.7为输出
P1DIR |=~BIT1;                           // 设置P1.1为输入
P2DIR |=~BIT1;                           // 设置P2.1为输入
while (1)                                
  {
   if (P1IN & BIT1)                       //判断P1.1是否为高,
    {
     for(i=0;i<1000;i++);
        if (P1IN & BIT1)
           P1OUT |= BIT0;                    
    }
   else
     P1OUT &= ~BIT0;                     
  }
}

MSP-EXP430F5529LP的通用GPIO操作.doc

16.27 KB, 下载次数: 19

售价: 1 分芯积分  [记录]

最新回复

啊,忘了说灯一直亮的  详情 回复 发表于 2015-1-30 14:23
 
点赞 关注

回复
举报

59

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
谢谢分享经验,问个问题,我把LED闪烁程序修改端口之后写入了EXP430F5529开发板后LED并没有闪烁,研究了一下午也没找出毛病,能麻烦帮我讲解一下吗?
以下是程序:

  1. #include "msp430f5529.h"  //该头文件内部包含430各个寄存器的配置情况
  2. int main(void)
  3. {
  4. unsigned int i;
  5. WDTCTL = WDTPW+WDTHOLD;         // 关闭看门狗
  6. P1DIR |= BIT0;                  // P1.0设置为输出
  7. P8DIR |= BIT1;                  // P8.1设置为输出
  8. P1DIR |= BIT3;                  // P1.3设置为输出
  9. while(1)
  10.   {
  11.    P1OUT ^= BIT0;                        // 异或 P1.0
  12.    for(i=50000;i>0;i--);                      // 延时
  13.    P8OUT ^= BIT1;                        // 异或 P8.1
  14.    for(i=50000;i>0;i--);                      // 延时
  15.    P1OUT ^= BIT3;                        // 异或 P1.3
  16.    for(i=50000;i>0;i--);
  17.   }
  18. }
复制代码

点评

使能一下上拉电阻,在设置一下复用功能选择试试  详情 回复 发表于 2015-2-1 11:15
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
啊,忘了说灯一直亮的
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

4
 
icebabycool 发表于 2015-1-30 14:12
谢谢分享经验,问个问题,我把LED闪烁程序修改端口之后写入了EXP430F5529开发板后LED并没有闪烁,研究了一下午也没找出毛病,能麻烦帮我讲解一下吗?
以下是程序:



使能一下上拉电阻,在设置一下复用功能选择试试
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表