OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7969|回复: 9
打印 上一主题 下一主题

基于STM32的FreeRtos下开启DMA接收空闲中断系统卡死的问题

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-9-20
在线时间
9 小时
跳转到指定楼层
楼主
发表于 2020-5-26 14:01:02 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
9金钱
向大佬们求助!!在FreeRTOS系统上添加了三个任务,解析报文任务、打印函数任务、指示灯检测任务,每当串口来了个IDLE中断,其他任务都会先执行一次,但然后就卡住了。这是为啥呀?
//串口中断函数
void USART1_IRQHandler(void)                       
{
       
        uint32_t temp=0;
         if(__HAL_USART_GET_FLAG(&UART1_Handler, USART_FLAG_IDLE)!=RESET)
    {
        __HAL_UART_CLEAR_IDLEFLAG(&UART1_Handler);  
        HAL_UART_DMAStop(&UART1_Handler);  
        temp = UART1_Handler.hdmarx->Instance->NDTR;
        rx_len= USART_REC_LEN-temp;                       
        HAL_UART_Receive_DMA(&UART1_Handler,USART_RX_BUF,USART_REC_LEN);
        Comp_Flag=1;
         vTaskResume(Fetch_Da_task);
                          
    }


//解析报文任务
void Fetch_Da_task(void *pvParameters)
{
        const u8* qt = USART_RX_BUF;
        while(1)
        {
            if(Comp_Flag)
                  {
                          Buffer=My_ctoi(qt, Buffer);   //解析报文
                          Tak_Data();                         //提取报文
                                Comp_Flag=0;
                        }
                        else vTaskSuspend(Fetch_Da_task);
                       
                         vTaskDelay(500);
        }
}




回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-9-20
在线时间
9 小时
2#
 楼主| 发表于 2020-6-2 11:17:34 | 显示全部楼层
霸王猫 发表于 2020-5-26 14:01
提个小小的建议,在FREERTOS下编程你应该忘记前后台的编程方法。

   1、在串口中断服务程序中

你说的这些都是问题,还有个小问题是堆栈大小不够,一直被忽略了
回复

使用道具 举报

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

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-2-7 16:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表