OpenEdv-开源电子网

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

STM32H7使用串口DMA空闲中断,能够收到数据并判断收到了多少,但是没有存在指定的数组里,不知道存在哪里去了,求指教

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-11-18
在线时间
3 小时
发表于 2020-1-11 11:18:13 | 显示全部楼层 |阅读模式
8金钱
下面是我的接收部分代码:
void UART4_IRQHandler(void)                       
{     
        uint32_t tmp_flag = 0;  
    uint32_t temp;

        HAL_UART_IRQHandler(&UART4_Handler);        //调用HAL库中断处理公用函数

                if(UART4== UART4_Handler.Instance)
                {
                        tmp_flag =__HAL_UART_GET_FLAG(&UART4_Handler,UART_FLAG_IDLE); //获取IDLE标志位
                        if((tmp_flag != RESET))//idle标志被置位
                        {

                REC_U4_FLAG = 0;  // 接收完成标志置1               
                                __HAL_UART_CLEAR_IDLEFLAG(&UART4_Handler);  //清除标志位
                                 HAL_UART_DMAStop(&UART4_Handler);                     //先停止DMA,暂停接收
                temp  =  __HAL_DMA_GET_COUNTER(&UART4RxDMA_Handler);// 获取DMA未传输个数
                                RX_U4_Count =  BUF4_LENGTH - temp ;//总数减去未传输个数,得到已接收数据的个数
                printf("UART4:%3d|%3d|%3d|\r\n",RX_U4_Count,temp,BUF4_LENGTH);               
                if(RX_U4_Count == 4)
                {
                    if(U4_BUF[0]== 'A')
                    {
                        LED_G_Toggle;
                        printf("GET\r\n");  
                    }
                  printf("S\r\n");               
                }
                 else if(RX_U4_Count == 8)
                {
//                        HAL_UART_Transmit(&UART3_Handler,USART4_BUF,8,50);                    
                        printf("B\r\n");
                }
                else if(RX_U4_Count == 9)
                {
//                    HAL_UART_Transmit(&UART3_Handler,USART4_BUF,9,50);                    
                    printf("A\r\n");
                }         

//                HAL_UART_Transmit(&UART3_Handler,USART4_BUF,9,50);//空闲状态查询
//                 if(USART4_BUF[3]==0X41 && USART4_BUF[7]==0X4F)
//                    {
//                        LED_G(0);
//                    }
                REC_U4_FLAG = 1;  // 接收完成标志置1
                HAL_UART_Receive_DMA(&UART4_Handler,U4_BUF,BUF4_LENGTH);        //打开DMA接收,指定接收缓存区和接收大小                 
                        }                       
                }
}


每次接收完成我都重新打开DMA接收,但是有收到数据并且知道收到了多少,但是指定的接收数组里面没有,下面是调试图片:


这是发送的测试数据

这是发送的测试数据

这是接收的回传数据

这是接收的回传数据

最佳答案

查看完整内容[请看2#楼]

解决了,是H7的二级cache问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-5-4
在线时间
7 小时
发表于 2020-1-11 11:18:14 | 显示全部楼层

解决了,是H7的二级cache问题
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-11-18
在线时间
3 小时
 楼主| 发表于 2020-1-11 11:27:34 | 显示全部楼层
目前使用调试模式,第一次直接运行接收的数据不在指定的数组内,但是我暂停一下,再打开又能够接收到指定数组了,复位之后又接收不进去了,暂停一下又好了
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-8-6
在线时间
6 小时
发表于 2021-4-3 02:01:44 | 显示全部楼层
楼主解决了吗?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2020-4-20
在线时间
8 小时
发表于 2021-8-5 11:36:26 | 显示全部楼层
那能请教楼主怎么解决的吗?
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2018-6-6
在线时间
126 小时
发表于 2022-4-19 14:16:06 | 显示全部楼层
请问楼主怎样解决二级缓存问题?我现在也是碰到一样情况
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-11-3
在线时间
4 小时
发表于 2022-7-13 11:13:14 | 显示全部楼层
怎们解决的啊
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-11-3
在线时间
4 小时
发表于 2022-10-14 14:33:06 | 显示全部楼层
cash缓存要设置一下
回复

使用道具 举报

2

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
954
金钱
954
注册时间
2014-11-2
在线时间
369 小时
发表于 2022-10-14 22:22:35 来自手机 | 显示全部楼层
mpu设置了就不会有问题了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 17:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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