| 这两天在用STM32F429II做串口DMA发送,全速运行时会进入Hardfault。初始化代码是修改正点原子的探索者开发板DMA例程而来的,全速运行时,串口助手能收到一次我发的数据,之后就进入Hardfault了。 我在内层while(1)中设置断点后,每次运行到断点停一下的运行方式,串口助手能够反复收到我发的数据。
 用USART1和USART6都有同样的现象。
 我在内层while(1)加了点的延时,也没什么用,这种设断点和不设断点的问题很奇怪
 请大神帮忙看看这是什么原因?
 
 
 复制代码 while(1){
    USART_DMACmd(USART6,USART_DMAReq_Tx,ENABLE); 
    MyDMA_Enable(DMA2_Stream6,20);
    while(1)<font color="#ff0000">//这个while中,除了if中的清除标志位的语句以外的语句设置断点,就不会跳到Hardfault</font>
    {
        uint16_t pro = 0;
        if(DMA_GetFlagStatus(DMA2_Stream6,DMA_FLAG_TCIF6)!=RESET)
        { 
        DMA_ClearFlag(DMA2_Stream6,DMA_FLAG_TCIF6);<font color="#ff0000">//在除了这行以外的其他地方设置断点,就不会跳到Hardfault</font>
        break;
        } 
        pro=DMA_GetCurrDataCounter(DMA2_Stream6);
        pro=1-pro/USART6_TX_MAX_SIZE;
        pro*=100;
     }
 
 
 | 
评分
查看全部评分
1.进入Hardfault的问题找到了,是因为我的SystemTick中断中调用了FreeRTOS的心跳回调函数,
而我又没有开启任务,所以进入SystemTick_Handler()中的xPortSysTickHandler()之后才会进入
Hardfault,屏蔽掉这个就好了,串口DMA没问题。
2.在任务里执行,一个数据都传不出去的问题,是因为系统里还移植了STemWin,初始化函数中调用
GUI_Init()的话,就会出现这个问题。根本原因还不知道,目前我用的是STemWin5.22,准备换成
最新的5.30再试试。
小结下,就是STemWin的初始化函数和串口DMA有点冲突。