华大HC32L130J8串口UART1发送有问题
我用的HC32L130J8串口UART1发送函数会导致死循环,程序如下M0P_UART1->SBUF=0XAA;
while(FALSE == Uart_GetStatus(UARTCH1,UartTC))
{}
Uart_ClrStatus(UARTCH1,UartTC);
程序会卡在Uart_GetStatus里一直等待TC的标志位,一直死循环。这个是啥原因呢? 看看UART1的Uart_EnableFunc打开Tx_f没。 ddxx 发表于 2022-1-5 08:30
看看UART1的Uart_EnableFunc打开Tx_f没。
这个标志位没有使能的 查询发送不是有给你写好的库文件么,为什么要自己写,而且还没写对 这个TC标志位你使能没? 如果你使用了接收中断,但是在接收中断里面恰好也清零了TC标志,那么在全双工的时候,就可能卡死在查询发送的TC标志查询语句上。
建议仔细看看中断处理,是不是在查询发送的时候也有清零发送标志TC的语句 martinhu 发表于 2022-1-7 10:31
如果你使用了接收中断,但是在接收中断里面恰好也清零了TC标志,那么在全双工的时候,就可能卡死在查询发送 ...
void RxIntCallback1(void)//接收中断函数
{
uint8_t Res;
Res = Uart_ReceiveData(UARTCH1);
if(USART1_RX_STA<USART1_MAX_RECV_LEN) //还可以接收数据
{
if(USART1_RX_STA==0)
usart1_rx_flag = 1; //使能定时器计数
USART1_RX_BUF=Res; //记录接收到的值
USART1_RX_STA++;
usart1_rx_count=0;
}
else
{
USART1_RX_STA|=1<<15; //强制标记接收完成
}
}
中断接收函数是这样的,没有清除TC标志 wubangmi 发表于 2022-1-6 20:42
查询发送不是有给你写好的库文件么,为什么要自己写,而且还没写对
en_result_t Uart_SendData(uint8_t u8Idx, uint8_t u8Data)
{
stc_uart_instance_data_t *pstcData = NULL;
ASSERT(IS_VALID_CH(u8Idx));
pstcData = UartGetInternDataPtr(u8Idx);
if (NULL == pstcData)
{
return ErrorInvalidParameter;
}
Uart_ClrStatus(u8Idx,UartTC);
pstcData->pstcInstance->SBUF_f.DATA = u8Data;
while(FALSE == Uart_GetStatus(u8Idx,UartTC))
{}
Uart_ClrStatus(u8Idx,UartTC);
return Ok;
}
我用这个官方的发送函数也是不行的,也会卡死。
Uart_SendData(UARTCH1,13); andy93762 发表于 2022-1-10 12:17
en_result_t Uart_SendData(uint8_t u8Idx, uint8_t u8Data)
{
stc_uart_instance_data_t *pstcData...
/**
******************************************************************************
** \briefUART通道发送数据函数,查询方式调用此函数,中断方式发送不适用
**
** \param UARTx通道号,Data发送数据
**
** \retval Ok发送成功
** \retval ErrorInvalidParameter发送失败
******************************************************************************/
en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data)
{
while(FALSE == Uart_GetStatus(UARTx,UartTxe))
{}
UARTx->SBUF_f.DATA = u8Data;
while(FALSE == Uart_GetStatus(UARTx,UartTC))
{}
Uart_ClrStatus(UARTx,UartTC);
return Ok;
}
我看到的库里的函数是这样的 wubangmi 发表于 2022-1-10 13:53
/**
******************************************************************************
** \briefUA ...
是我的库函数比较老,我换成最新的库函数可以了。非常感谢
页:
[1]