TI论坛
直播中

李骏鹏

7年用户 1233经验值
私信 关注
[问答]

电脑发送字符串后,tm4c并没用回复是为什么?

根据已有电路(ch340连接了uart2的两个口),写了一段程序,想实现每次电脑向tm4c发送字符串时,tm4c向电脑发送相应字符串
程序如下,但是电脑发送字符串后,tm4c并没用回复
代码如下
void main()
[
char cThisChar;
// uint32_t ui32Ints;
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_XTAL_16MHZ|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; //解锁
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
ROM_GPIOPinConfigure(GPIO_PD6_U2RX);
ROM_GPIOPinConfigure(GPIO_PD7_U2TX);
ROM_GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_6|GPIO_PIN_7);
// ui32Ints = ROM_UARtintStatus(UART2_BASE, true);
// ROM_UARTIntClear(UART2_BASE, ui32Ints);
ROM_UARTConfigSetExpClk(UART2_BASE,ROM_SysCtlClockGet(),115200,UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
ROM_UARTCharPut(UART2_BASE,'!');
do
[
cThisChar=ROM_UARTCharGet(UART2_BASE);
ROM_UARTCharPut(UART2_BASE,cThisChar);
]while((cThisChar!='n')&&(cThisChar!='r'));

]
望前辈帮帮忙!!!谢谢

回帖(16)

韦明

2020-8-25 06:52:17
代码是应该没有问题的,是标准的官方电路,你把串口0改为串口2而已了。你把解锁放在外设初始化之前看看。
举报

李骏鹏

2020-8-25 06:58:46
解锁位置调整试了下,没有变化,我进行下面修改,将

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
改为
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
修改后电脑可以收到由tm4c发来的‘!’了
但是还是不能显示由电脑发送的字符串
在调试时发现,do while 第一周期cThisChar被赋值为‘/0’
而do while 第二周期 时在
cThisChar=ROM_UARTCharGet(UART2_BASE);
这条语句执行时停止,用电脑向TM4C发送字符依然没有回应。。。卡死在词语处
举报

李骏鹏

2020-8-25 07:14:37
引用: ljmlvmd 发表于 2020-8-25 06:52
代码是应该没有问题的,是标准的官方电路,你把串口0改为串口2而已了。你把解锁放在外设初始化之前看看。

下一步我应该怎么调呢
举报

韦明

2020-8-25 07:23:21
引用: 雪大大11 发表于 2020-8-25 06:58
解锁位置调整试了下,没有变化,我进行下面修改,将
<span/>
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);

看来TI对时序的要求果然好严格,必须先使能GPIO,才能继续使能串口外设。
cThisChar=ROM_UARTCharGet(UART2_BASE);
进去里面的函数,看看再哪个寄存器那里停止了。你再看看UART 数据寄存器(UARTDR)中有没有值了,应该是接收出错了,你再试试用UARTCharGet试试,不要用ROM中的函数,我晚上试试这个例子。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分