#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:
根据第五条,看起来是板子不稳定。
建议从电源,时钟,复位等因素逐个排查。