TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C123BH6PGE的所有GPIO无法翻转输出矩形波,求解。

#define TARGET_IS_BLIZZARD_RB1

#include <stdint.h>
#include <stdbool.h>

#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/HW_GPIO.h"
//
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"

#include "driverlib/rom.h"
#include "driverlib/rom_map.h"

int main(void)
  {
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);

    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTM_BASE, GPIO_PIN_1);

    while(1)
    {
        ROM_GPIOPinWrite(GPIO_PORTM_BASE,  GPIO_PIN_1,GPIO_PIN_1);
        ROM_SysCtlDelay(ROM_SysCtlClockGet()/300);

        ROM_GPIOPinWrite(GPIO_PORTM_BASE,  GPIO_PIN_1, 0);
        ROM_SysCtlDelay(ROM_SysCtlClockGet()/300);
    };

}
问题描述:

1.我有一块TM4C123BH6PGE的板子,使用上面的代码使PM1输出一个矩形波。通过示波器观察,发现一开始确实有矩形波产生,过了4秒左右后矩形波消失,PM1输出高电平。重新复位,PM1又输出矩形波,过了4秒左右,矩形波又消失了,PM1输出高电平。

2.我随机测试了其他几个引脚(PM5 PF3 PD0 PD5 PP1),发现都是这个情况。

3.我把上面的两句ROM_SysCtlDelay(ROM_SysCtlClockGet()/300);改成ROM_SysCtlDelay(ROM_SysCtlClockGet()/3);,使得GPIO翻转周期变长,发现这时输出正常。但是我把周期再缩短,改成ROM_SysCtlDelay(ROM_SysCtlClockGet()/30);,输出再次不正常。

4.我把上述代码全部换成TIVA自带的库函数,不使用ROM库函数,发现情况更严重:不论翻转周期多长,GPIO始终输出高电平=。=

5.我更换了另外一块一模一样的板子进行测试,发现一切正常,不论什么情况下GPIO都能持续输出矩形波。

因此小弟感到很困惑,特来求教,谢谢。

xyz549040622:

我更换了另外一块一模一样的板子进行测试,发现一切正常,你这个板子的硬件有问题吧

Robin wu:

回复 xyz549040622:

谢谢您的回答。我感觉我的板子硬件应该没问题。。。就是那种最小系统板,板子没虚焊,正常下载,晶振正常起振,复位也正常。。。就是GPIO翻转有问题。我现在在想是不是由于什么干扰导致程序跑飞啥的。勘误表上也没看到类似问题。

Michael Sun:

根据第五条,看起来是板子不稳定。

建议从电源,时钟,复位等因素逐个排查。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123BH6PGE的所有GPIO无法翻转输出矩形波,求解。
分享到: 更多 (0)