软件平台:Code Composer Studio CCS12.4.0.00007
Driverlib版本:MSP430Ware_3_80_14_01
硬件开发板:MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)
学习MSP430F5529 Drivelib库函数 GPIO模块使用
1.实现LED点灯 亮灭,
2. 按键控制LED亮灭, 软件延时消抖
3. GPIO 引脚复用,输出MCLK SMCLK ACLK时钟频率
时钟频率需要用示波器查看,MCLK为1.05MHz, SMCLK 为1.05MHz,ACLK为32.768kHz
#include "driverlib.h"
int main(void)
{
WDT_A_hold(WDT_A_BASE);//关闭看门狗
/* 第一步,设置GPIO方向,输出或者输入
* GPIO引脚为输出,调用函数GPIO_setAsOutputPin()
* GPIO引脚为输入,使能上下拉电阻功能
* 设置上拉电阻,调用函数GPIO_setAsInputPinWithPullUpResistor()
* 设置下拉电阻,调用函数GPIO_setAsInputPinWithPullDownResistor()
* 如果使用按键,软件延时调用函数GPIO_getInputPinValue()获取GPIO端口状态
* 中断消抖,需设置中断入口函数
* 或者根据需要调用函数GPIO_setAsInputPin()
*
* 说明:上拉电阻和下拉电阻的作用是解决CMOS工艺问题产生引脚悬空的问题,
* 上拉电阻与GPIO输入模式对应,可确保GPIO状态无输入信号时高电平,同时可以提高驱动能力
* 下拉电阻与GPIO输模式对应,可确保GPIO状态无输入信号时是低电平
* 具体可以CSDN或者百度更多内容
*/
GPIO_setAsOutputPin( GPIO_PORT_P1 , GPIO_PIN0 );//开发板LED1连接了P1.0
GPIO_setAsOutputPin( GPIO_PORT_P4 , GPIO_PIN7 );//开发板LED2连接了P4.7
GPIO_setAsInputPin( GPIO_PORT_P2 , GPIO_PIN1); //按键S1连接了P2.1
GPIO_setAsInputPin( GPIO_PORT_P1 , GPIO_PIN1); //按键S2连接了P1.1
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2 , GPIO_PIN1);
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1 , GPIO_PIN1);
/* 第二步,输出引脚可以设置高电平、低电平、取反,调用函数 GPIO_setOutputHighOnPin(),
* GPIO_setOutputLowOnPin(), GPIO_toggleOutputOnPin(),
* 输入引脚可以调用函数GPIO_getInputPinValue()读取GPIO引脚状态
*/
GPIO_setOutputHighOnPin( GPIO_PORT_P1 , GPIO_PIN0 );//LED1点亮
GPIO_setOutputLowOnPin( GPIO_PORT_P4 , GPIO_PIN7 );//LED2熄灭
/* GPIO引脚复用函数,若想将芯片内部信号对外输出或外部信号读取到芯片内部
* 可调用GPIO_setAsPeripheralModuleFunctionInputPin()、GPIO_setAsPeripheralModuleFunctionOutputPin();
* 例如,初接触5529,系统时钟频率是需要明确,可复用引脚输出查看频率,再如定时器PWM输出、串口引脚定义等
*/
//数据手册P9引脚图可知,P1.0对应ACLK,P2.2对应SMCLK,P7.7对应MCLK
//因为LanchPad开发板P1.0已连接到LED1,此处不设置对外输出ACLK
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2 , GPIO_PIN2);
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7 , GPIO_PIN7);
while(1)
{
//按键控制,软件延时消抖,按键未按下时是GPIO是高电平,按下是低电平
if( GPIO_getInputPinValue(GPIO_PORT_P2 , GPIO_PIN1) == GPIO_INPUT_PIN_LOW
|| GPIO_getInputPinValue(GPIO_PORT_P1 , GPIO_PIN1) == GPIO_INPUT_PIN_LOW )
{
__delay_cycles(10000);//延时消抖,10000约为10ms,MCLK是1.05MHz,1us左右
if( GPIO_getInputPinValue(GPIO_PORT_P2 , GPIO_PIN1) == GPIO_INPUT_PIN_LOW )
{
GPIO_toggleOutputOnPin( GPIO_PORT_P1 , GPIO_PIN0 );//按键S1控制LED1亮灭
//等待按键松开
while(GPIO_getInputPinValue(GPIO_PORT_P2 , GPIO_PIN1) == GPIO_INPUT_PIN_LOW);
}
}
GPIO_toggleOutputOnPin( GPIO_PORT_P4 , GPIO_PIN7 );//取反,LED2亮灭
__delay_cycles(50000);//MCLK是1.05MHz
}
}