完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
根据已有电路(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 个讨论
|
|
|
解锁位置调整试了下,没有变化,我进行下面修改,将
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发送字符依然没有回应。。。卡死在词语处 |
|
|
|
|
|
|
|
雪大大11 发表于 2020-8-25 06:58 看来TI对时序的要求果然好严格,必须先使能GPIO,才能继续使能串口外设。 cThisChar=ROM_UARTCharGet(UART2_BASE); 进去里面的函数,看看再哪个寄存器那里停止了。你再看看UART 数据寄存器(UARTDR)中有没有值了,应该是接收出错了,你再试试用UARTCharGet试试,不要用ROM中的函数,我晚上试试这个例子。 |
|
|
|
|
|
|
|
ljmlvmd 发表于 2020-8-25 07:23 我不会进函数里面运行。。。点步入还是卡死。。。 不过我把ROM_UARTCharGet(UART2_BASE)改成了ROM_UARTCharGetNonbBocking(UART2_BASE); 读到cThisChar的第一值为‘/0’后面全为空,也就是说FIFO里面没有数据了 推断OM_UARTCharGet(UART2_BASE)卡死的原因是等待FIFO中有数 接下来怎么解决好呢??? |
|
|
|
|
|
|
|
|
do [ 断点1 if(ROM_UARTCharsAvail(UART2_BASE)) [ 断点2 cThisChar=ROM_UARTCharGet(UART2_BASE); ROM_UARTCharPut(UART2_BASE,cThisChar); ] ]while((cThisChar!='n')&&(cThisChar!='r')); 断点3 看到了吧,你判断程序停止没反应了,你要判断是在这三个断点的哪个地方停止了,然后才能进一步找到原因 |
|
|
|
|
|
|
|
|
关于
do [ 断点1 if(ROM_UARTCharsAvail(UART2_BASE)) [ 断点2 cThisChar=ROM_UARTCharGet(UART2_BASE); ROM_UARTCharPut(UART2_BASE,cThisChar); ] ]while((cThisChar!='n')&&(cThisChar!='r')); 断点3 现象是ROM_UARTCharsAvail(UART2_BASE)恒等于0 原来用ROM_UARTCharGet(UART2_BASE)会在这地方停止。。。因为没有数据。。。 现在的现象是这样的参考图片 这个问题怎么解决呢?谢谢 |
|
|
|
|
|
|
|
|
最终程序的整理
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) = 1<<7; ROM_GPIOPinConfigure(GPIO_PD6_U2RX); ROM_GPIOPinConfigure(GPIO_PD7_U2TX); ROM_GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_6|GPIO_PIN_7); 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')); ] 感谢多日来论坛朋友的关照 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
598 浏览 0 评论
1651 浏览 0 评论
2090 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1541 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1383 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1793浏览 29评论
2820浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1748浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1666浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1680浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 20:43 , Processed in 0.850051 second(s), Total 68, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2690