完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
11 个讨论
|
|
|
如果使用ISR的模式,根据例程看起来是要有清空标志位的操作的。
/*********************************************************************************** * @fn UART0_TX_ISR * * @brief Function which completes the UART transmit session, that is it * sends the rest of the UART0 packet. * * @param void * */ #pragma vector = UTX0_VECTOR __interrupt void UART0_TX_ISR(void) [ // Clear UART0 TX Interrupt Flag (IRCON2.UTX0IF = 0). UTX0IF = 0; // Send next UART byte. U0DBUF = uartTxBuffer[uartTxIndex++]; // If no UART byte left to transmit, stop this UART TX session if (uartTxIndex >= SIZE_OF_UART_TX_BUFFER) [ // Note: // In order to start another UART TX session the application just needs // to prepare the source buffer, and trigger the TX isr. uartTxIndex = 0; IEN2 &= ~IEN2_UTX0IE; ] ] |
|
|
|
|
|
|
|
|
困惑啊,我用的是TI的协议栈,串口部分的代码为协议栈自带的,同样的程序,在开发板上能否正常的串口收发,目标板已经精简到只有一个CPU和调试接口了,依然问题存在。
#if (HAL_UART_DMA == 1) HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR ) #else HAL_ISR_FUNCTION( halUart1TxIsr, UTX1_VECTOR ) #endif [ HAL_ENTER_ISR(); if (dmaCfg.txHead == dmaCfg.txTail) [ IEN2 &= ~UTXxIE; dmaCfg.txMT = 1; ] else [ UTXxIF = 0; UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++]; if ((HAL_UART_DMA_TX_MAX != 256) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX)) [ dmaCfg.txHead = 0; ] ] HAL_EXIT_ISR(); ] #endif 第一次调用HalUARTWrite,能进入以上中断服务程序,UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++]; 向UxDBUF 写入一个字符后,就再也进不了中断,感觉移位寄存器没有工作一样,请问有哪些情况下会导致移位寄存器不工作呢? |
|
|
|
|
|
|
|
xncvywyerwe 发表于 2020-3-18 10:39 辛苦啊,终于找到原因了,原来是在POWER_SAVING模式下那个流控设置没有起作用 halUARTCfg_t uartConfig; // configure UART uartConfig.configured = TRUE; uartConfig.baudRate = HAL_UART_BR_115200; uartConfig.flowControl = HAL_UART_FLOW_OFF; uartConfig.flowControlThreshold = 48; uartConfig.rx.maxBufSize = DEFAULT_UART_BUF_SIZE; uartConfig.tx.maxBufSize = DEFAULT_UART_BUF_SIZE; uartConfig.idleTimeout = 6; uartConfig.intEnable = TRUE; uartConfig.callBackFunc = (halUARTCBack_t) GprsSerial_ProcessEvent; // Note: Assumes no issue opening UART port. (void)HalUARTOpen(APP_SERIAL_PORT , &uartConfig ); uartConfig.flowControl = HAL_UART_FLOW_OFF;未能起作用,导致移位寄存器没工作 if (DMA_PM || config->flowControl) [ UxUCR = UCR_FLOW | UCR_STOP; // 8 bits/char; no parity; 1 stop bit; stop bit hi. PxSEL |= HAL_UART_Px_CTS; // Enable Peripheral control of CTS flow control on Px. ] else [ UxUCR = UCR_STOP; // 8 bits/char; no parity; 1 stop bit; stop bit hi. ] 把条件判断改为if (DMA_PM &&config->flowControl)就可以了 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
545 浏览 0 评论
1609 浏览 0 评论
2045 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1507 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1331 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:46 , Processed in 1.315039 second(s), Total 67, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1765