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.
工具/软件:Code Composer Studio
尊敬的先生:
我在调试过程中遇到问题。 在步骤执行期间,当执行 GPIOPinConfigure ( GPIO_PA0_U0RX)这一行时出现问题,在执行之后,会跳转到启动程序中的无限循环。
我在下面给出了...
/这是处理器收到故障时调用的代码
//中断。 这只是进入一个无限循环、从而保持系统状态
//供调试器检查。
//
//
静态空
FaultISR (空)
{
//
//输入无限循环。
//
while (1)
{
}
}
我的代码是--
#include
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
//#include "driverlib/SysTick .h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/uart.h"
#include "driverlib/interrupt.h"
#include "utils/uartstdio.h"
void SetupUart0 (void);
字符 Uart0_receiver (void);
void UART5_Transmitter (无符号字符数据);
void SetupUart0 (void)
{
#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
uint32_t ui32SysClockFreqHz;
#endif
uint32_t SysClockFreqHz;
SysClockFreqHz = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
//
//启用用于 UART0引脚的 GPIO 端口 A。
// TODO:将其更改为您正在使用的 GPIO 端口。
SysCtlPeripheralEnable (GPIO_Porta_base);
//
//启用 UART0以便我们可以配置时钟。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
while (SysCtlPeripheralReady (SYSCTL_Periph_UART0)!= true)
{
}
//
//为端口 A0和 A1上的 UART0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
//GPIOPinConfigure (GPIO_PA0_U0RX);
//GPIOPinConfigure (GPIO_PA1_U0TX);
//GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//设置 UART 的配置
UARTConfigSetExpClk (UART0_BASE、SysClockFreqHz、115200、(UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8));
//将 UART 设置为在 Tx FIFO 几乎为空或接收到任何字符时中断
UARTFIFOEnable (UART0_BASE);
//UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX1_8、UART_FIFO_RX1_8);
//启用 UART
UARTEnable (UART0_BASE);
// IntEnable (INT_UART0);
// UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT | UART_INT_TX);
UARTStdioConfig (0、115200、40000000);
}
/*void Uart0InterruptHandler (void)
{
uint32_t InterruptFlags;
InterruptFlags = UARTIntStatus (UART0_BASE、false);
UARTIntClear (UART0_BASE、InterruptFlags);
IF (InterruptFlags & UART_INT_TX)
{
// Tx FIFO 中的空间
while (UARTSpaceAvail (UART0_BASE))
{
// UARTCharPutNonBlocking (UART0_BASE、BufGet (&Tx));
}
}
IF (InterruptFlags &(UART_INT_RX | UART_INT_RT))
{
// Rx FIFO 中的数据
while (UARTCharsAvail (UART0_BASE))
{
// BufPut (&Rx、UARTCharGetNonBlocking (UART0_BASE));
}
}
}*/
// char 接收函数
字符 Uart0_receiver (void)
{
字符数据;
while (UARTCharsAvail (UART0_BASE)!=错误)
{
DATA=UARTCharGet (UART0_BASE);
}
返回(unsigned char)数据;
}
空 UART5_Transmitter (无符号字符数据)
{
// unsigned char peta;
while (UARTSpaceAvail (UART0_BASE)!=错误)
{
UARTCharPut (UART0_BASE、DATA);
}
}
/**
* main.c
*
int main (空)
{
SetupUart0();
UARTprintf ("test");
//返回0;
}
请帮帮我。 我如何解决这个问题? 实际上,我正在测试板上发送的字符(A)(如中断),它将处于 LED 状态。 当我发送 B 时、它将关闭 LED。
Imtiaj Hossain
我怀疑您的问题是、在启用端口 GPIOA 后、您立即执行了"GPIOPinConfigure (GPIO_PA0_U0RX);"、并且没有为端口准备好提供足够的时间。 您可以添加 while 循环以等待 GPIOA 准备就绪。
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)) { } GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX);
或者、您只需更改代码的顺序、以便在启用端口和访问端口之间留出时间。
// //启用 UART 使用的 GPIO 外设。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //启用 UART0 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // //为 UART 模式配置 GPIO 引脚。 // ROM_GPIOPinConfigure (GPIO_PA0_U0RX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
尊敬的 Bob 先生:
很抱歉, 在设置 Uart0中,我执行了()。 但问题没有解决。 请注意、此部件是否正确?
void SetupUart0 (void)
{
#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
uint32_t ui32SysClockFreqHz;
#endif
uint32_t SysClockFreqHz;
SysClockFreqHz = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
//
//启用用于 UART0引脚的 GPIO 端口 A。
// TODO:将其更改为您正在使用的 GPIO 端口。
SysCtlPeripheralEnable (GPIO_Porta_base);
//
//启用 UART0以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA))
{
}
//
//为端口 A0和 A1上的 UART0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
//GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//设置 UART 的配置
UARTConfigSetExpClk (UART0_BASE、SysClockFreqHz、115200、(UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8));
//将 UART 设置为在 Tx FIFO 几乎为空或接收到任何字符时中断
UARTFIFOEnable (UART0_BASE);
//UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX1_8、UART_FIFO_RX1_8);
//启用 UART
UARTEnable (UART0_BASE);
// IntEnable (INT_UART0);
// UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT | UART_INT_TX);
UARTStdioConfig (0、115200、40000000);
}
不会从中产生
(while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)))
{
})这个循环。
我有一些类似的东西
Cortex_M4_0:GEL 输出:
内存映射初始化完成
Cortex_M4_0:读取长度为0x4的第0页上0x4000c000处的存储器块时出现问题:发生调试端口错误。
Cortex_M4_0:读取长度为0x4的第0页上0x4000c004处的存储器块时遇到问题:发生调试端口错误。
Cortex_M4_0:读取长度为0x4的第0页上0x4000c004处的存储器块时遇到问题:发生调试端口错误。
Cortex_M4_0:读取长度为0x4的第0页上0x4000c018处的内存块时出现问题:发生调试端口错误。
Cortex_M4_0:读取长度为0x4的第0页上0x4000c020处的存储器块时出现问题:发生调试端口错误。
如何解决此问题。
谨随信
Imtiaj
实际上、您的代码有几个问题。 您好像采用了一个工作示例并进行了更改。 如果不起作用、您进行了更多更改。
第一个错误是在启用到 GPIOA 的时钟时使用了错误的参数。 它应该是:
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
不是:
SysCtlPeripheralEnable (GPIO_Porta_base);
您有几个不必要的 UART 调用,但使用 错误的频率值调用 UARTStdioConfig()。
我建议您返回到 TivaWare 中的这个示例、从那里开始。
C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c129exl\hello