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

TM4C123BE6PZ进行UART6串口通讯

 进行串口UART6通讯实验,使用keil软件仿真时,单步运行到GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_4|GPIO_PIN_5)进入GPIODirModeSet(uint32_t ui32Port, uint8_t ui8Pins, uint32_t ui32PinIO)函数后,在HWREG(ui32Port + GPIO_O_DIR) = ((ui32PinIO & 1) ?
                                   (HWREG(ui32Port + GPIO_O_DIR) | ui8Pins) :
                                   (HWREG(ui32Port + GPIO_O_DIR) & ~(ui8Pins)));卡死,进入HardFault_Handler。

附带自己写的程序,希望大神不吝赐教!

xyz549040622:

ROM_GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_4|GPIO_PIN_5);

你用的是ROM中固话的函数,ROM中的函数是无法跟踪的,你如果想要跟踪,把ROM去掉,用库函数中的这个函数就好了。

user4935483:

回复 xyz549040622:

程序进入GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5);,程序死在GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_HW);函数中的这一句

HWREG(ui32Port + GPIO_O_DIR) = ((ui32PinIO & 1) ? (HWREG(ui32Port + GPIO_O_DIR) | ui8Pins) : (HWREG(ui32Port + GPIO_O_DIR) & ~(ui8Pins)));不知道为啥

xyz549040622:

回复 user4935483:

这是设置IO方向的,理论上,没加while循环,程序怎么会停在这里呢?太不科学了吧,你换个其他IO试试

user4935483:

已经解决了,初始化顺序由

usart2_config(); GPIOInit();systick_init();改为

GPIOInit();

systick_init();

usart2_config();就不会卡死,程序正常运行了,但不知道为啥???

user4935483:

回复 xyz549040622:

已经解决了,初始化顺序由

usart2_config();GPIOInit();systick_init();改为

GPIOInit();

systick_init();

usart2_config();就不会卡死,程序正常运行了,但不知道为啥???

user4935483:

回复 xyz549040622:

已经解决了,初始化顺序由

usart2_config();GPIOInit();systick_init();改为

GPIOInit();

systick_init();

usart2_config();就不会卡死,程序正常运行了,但不知道为啥???

xyz549040622:

回复 user4935483:

肯定会出问题,你先初始化串口,那么串口这两个IO的方向已经定了,配置为第二功能了,你再操作他的方向,肯定是不会允许了。所以一般先初始化IO,再初始化为特殊功能外设。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123BE6PZ进行UART6串口通讯
分享到: 更多 (0)