浅析TMS320F28035的GPIO模块

通用输入输出端口(General Purpose Input Output, GPIO)几乎是学习包括DSP,单片机在内的微处理器的第一步。GPIO的功能包括基本的输入,输出,也可以复用为其他外设功能。

GPIO简介

TMS320F28035具有45个GPIO引脚(不包括模拟输入输出引脚AIO),分为两大部分: Part A(0~31)Part B(32~44)。其中,每个引脚除了具备通用数字输入/输出功能外,还最多复用三个外设引脚功能,可以通过多路复用选择寄存器(GPxMUXn)进行配置。

GPIO的默认功能是通用数字输入/输出功能,在进行配置时,主要步骤如下:

  • 引脚的方向:输入/输出,0(输入) 1(输出),通过GPBDIR进行配置。

  • 引脚的电平:1(高电平),0(低电平),这个可选。

  • 引脚的复用:基本输入输出功能 or 外设复用功能。

比如我们要使用某个GPIO引脚,周期性输出高低电平,从而闪烁LED灯。那么,我们需要进行如下配置GPIO:

  • 方向:输出
  • 电平:周期性翻转电平
  • 复用:不进行复用,默认基本输入输出功能

硬件电路

在这里插入图片描述

可见,GPIO34引脚与LED的阴极相连,当GPIO34输出低电平时,LED亮; GPIO34输出高电平时,LED灭。

软件代码

  1. 一些初始化工作,包括系统配置,中断,看门狗等
InitSysCtrl();          // 初始化系统配置,关闭看门狗,开启外设时钟
DINT;                   // 关闭CPU级总中断:INTM(0:开启,1:关闭)
InitPieCtrl();          // 初始化外设中断扩展配置
IER = 0x0000;           // 关闭CPU级中断使能位
IFR = 0x0000;           // 关闭CPU级中断标志位
InitPieVectTable();     // 初始化PIE向量表
  1. 配置GPIO34引脚为输出引脚,默认基本输入输出功能

由前面可知,34引脚输入Group B,所以需要使用与Group B相关的寄存器,如GPBMUX1GPBDIR

 EALLOW;  // 开锁
 GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;   // GPIO34作为普通IO     0: GPIO
 GpioCtrlRegs.GPBDIR.bit.GPIO34  = 1;    // GPIO34方向为输出     0: 输入   1: 输出
 EDIS;   // 上锁
  1. 主循环中实现电平的翻转,延时函数实现LED灯闪烁的效果
while(1)
{
    // 延时1s
    DSP28x_usDelay(1000000);

    // 电平翻转
    GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;  
}

完整代码

#include "DSP28x_Project.h"     // Device Header file and Examples Include File

//------------------------- 硬件配置-----------------------------//
//
//        LED-----> GPIO34
//
//---------------------------------------------------------------//

/**
 * main.c
 */
void main(void)
{
    InitSysCtrl();          // 初始化系统配置,关闭看门狗,开启外设时钟

    DINT;                   // 关闭CPU级总中断:INTM(0:开启,1:关闭)

    InitPieCtrl();          // 初始化外设中断扩展配置

    IER = 0x0000;           // 关闭CPU级中断使能位
    IFR = 0x0000;           // 关闭CPU级中断标志位

    InitPieVectTable();     // 初始化PIE向量表

    //********************* code start here ****************************//
    EALLOW; // 开锁
    GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;   // GPIO34作为普通IO     0: GPIO
    GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;    // GPIO34方向为输出         0: 输入   1: 输出
    EDIS;   // 上锁

    while(1)
    {
        // 延时1s
        DSP28x_usDelay(1000000);

        // 电平翻转
        GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;
    }
    //********************* code end here ******************************//
}

总结

大致就是这样,GPIO的配置相对简单,也是学习DSP的第一步,加油。

STM32是一款常用的微控制器,GPIO是其中一个非常重要的外设之一。GPIO全称是General Purpose Input/Output,翻译过来就是通用输入/输出口。它可以作为输入口,也可以作为输出口,用于连接外部电路或者读取外部电路的信号。 在STM32中,GPIO有很多种不同的模式和配置。其中最常用的是输出模式,用于控制外部电路的高低电平。一般而言,使用GPIO输出需要先进行如下几个步骤: 1. 配置GPIO的模式:将GPIO模式设置为输出模式,可以使用STM32提供的库函数进行配置; 2. 配置GPIO的速率:可以设置GPIO的速率以达到节约功耗或提高带宽等目的; 3. 控制GPIO的状态:可以通过相应的库函数对GPIO的状态进行设置,如将GPIO设置为高电平或低电平。 以下是一个简单的GPIO输出示例代码: ``` #include "stm32f10x.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开GPIOA时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置GPIOA.0为输出口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA } int main(void) { GPIO_Configuration(); //配置GPIO while (1) { GPIO_SetBits(GPIOA, GPIO_Pin_0); //将GPIOA.0设置为高电平 Delay(500); //延时 GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将GPIOA.0设置为低电平 Delay(500); //延时 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rob月初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值