进行串口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,再初始化为特殊功能外设。
TI中文支持网
