This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

GPIO问题

#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#define PINS GPIO_PIN_6
void delay(int d)
{
 for(;d;--d);
}
void SysCtlClockSet(unsigned long ulConfig)
{}

void   SysCtlPeripheralEnable (unsigned long ulPeripheral)
{}

void GPIODirModeSet(unsigned long ulPort,unsigned char ucPins,unsigned long ulPinIO)
{}

void GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal)
{}

int main(void)
{
 unsigned int i;

   SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);//直接使用外部晶振
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能GPIO的PB模块
   GPIODirModeSet(GPIO_PORTB_BASE,PINS,GPIO_DIR_MODE_OUT);//设置PB6输出
   for(i=0;i<10;i++)
   {
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6,1);//置PB6低电平
    delay(20000);
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6,0);//置PB6高电平
    delay(20000);
   }
   SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);//使用PLL
   for(i=0;i<10;i++)
   {GPIOPinWrite(GPIO_PORTB_BASE,PINS,~PINS);
   delay(20000);
   GPIOPinWrite(GPIO_PORTB_BASE,PINS,PINS);
   delay(20000);
   }
   while(1);

  // return 0;

}

GPIOB相应的寄存器数据不改变,单步运行没反应。板子是LM3S9B92  开发环境CCSV5

  • GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6,0);

    这个函数你什么都没定义,咋个可能有反应呢?

  • 麻烦你说的详细一点好吗?我是新手这个问题卡两个多礼拜了  不知道怎么定义

  • 他的意思是你写0和1是对应的第0为,要在第六位写1要写(1《6)写零同样对应的第六位要为零。不知道表述清楚没

  • 您好,谢谢您的回复。我用HWREG(0x400FE000)=0x2//使能GPIOB模块

    确实能正确执行,是不是说明我调用的头文件中没有包含GPIOPinWrite函数 ?那我改怎么改进一下呢  使能函数  配置输入输出函数单步执行都不改变, 我也包含了该包含的  头文件了?不清楚为什么还是出现这个问题?

     

  • 谢谢 明白。但是我感觉好像不是这个问题,因为运行这个程序,单步执行过使能函数后 GPIOB  RCG2中的数据,没有相应改变。所以不单单是这个问题。谢谢您的回复

  • #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/gpio.h"
    #include "driverlib/sysctl.h"
    //#define HWREG(x)
    void main(void)
    {

     HWREG(0x400FE108)=1<<1;//使能GPIOB模块
     HWREG(0x40005400)=0x00000040;//P6为输出
      
         HWREG(0x400053FC)=0x00000040;//输出1
         HWREG(0x400053FC)=0x00000000;//输出0
         HWREG(0x400053FC)=1<<6;//输出1
         HWREG(0x400053FC)=0<<6;//输出0
         HWREG(0x400053FC)=0x1<<6;//输出1
         HWREG(0x400053FC)=0x0<<6;//输出0
         }

    可以运行了,但是我想用GPIOPinWrite之类的语句写?怎么办呢

  • //基于驱动库的开发

    //1、使能外设,以PA口为例子
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    // 2、设置PA口引脚方向为输出
    MAP_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_6);

    //3、设置PA6输出低电平

    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6, 0x00);

    //3、设置PA6输出高电平
    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6, 0xFF);

  • Hi zhetao,

      这个是你调用GPIOPinWrite的参数设置没有使用正确。换句话说是你赋值没有成功造成的。

    在我们针对GPIO写操作的API函数中,对应的赋值操作时一个类似于位合集的一个操作,如果你要操作GPIO_6的值为 1时,你不能简单的就写1,你需要赋值的是1<<6的值。

    谢谢

    ken

  • 谢谢各位回复,明白了  谢谢

  • 谢谢您的回复