电子产业一站式赋能平台

PCB联盟网

搜索
查看: 3354|回复: 1
收起左侧

STM32 HAL UART中断中调用CDC串口会导致卡死

[复制链接]

585

主题

910

帖子

4977

积分

四级会员

Rank: 4

积分
4977
发表于 2022-11-14 10:17:44 | 显示全部楼层 |阅读模式
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{


    // UserTxBufferFS[0] = 0;
    // USB_send(UserTxBufferFS, 1) ;


//在这里如果加一个


    if(uart1_en!=0 && huart->Instance==USART1)
    {

        if(huart->RxState==HAL_UART_STATE_READY)
        {

            uart1_num=0;
        }
        else
        {
            uartdata[uart1_num]=uartdata_one;
            uart1_num++;

        }
        while(HAL_UART_Receive_IT(&huart1, (uint8_t *)&uartdata_one, 1)!=HAL_OK)
        {
            huart->RxState=HAL_UART_STATE_READY;
            __HAL_UNLOCK(&huart1);
        }
    }
    USB_send(uartdata, uart1_num) ;


}
回复

使用道具 举报

578

主题

936

帖子

4943

积分

四级会员

Rank: 4

积分
4943
发表于 2022-11-14 10:18:39 | 显示全部楼层
while (CDC_Transmit_FS(Buf, Len) != USBD_OK)
发送函数是这样。
如果在中断回调用就会导致卡死。
放在HAL_UART_Receive_IT(&huart1, (uint8_t *)&uartdata_one, 1)之后则没事。
这是为什么?
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表