搜索
楼主: wjjontheway

[讨论] Cube下实现串口+DMA+空闲中断接收不定长数据

  [复制链接]

该用户从未签到

0

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2017-4-5 15:17:25 | 显示全部楼层
谢谢!  真心对我很有用啊!
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

95

帖子

4

蝴蝶豆

高级会员

最后登录
2019-9-22
发表于 2017-5-3 20:51:46 | 显示全部楼层

多谢分享,学习了
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2020-6-1
发表于 2017-5-24 16:45:37 | 显示全部楼层
Thanks!
回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

中级会员

最后登录
2017-6-14
发表于 2017-5-28 23:00:52 | 显示全部楼层
非常感谢楼主的方法,非常好用
如果在一次性接收的数据包比较大,大于设定的DMA接收Buf,用空闲中断则会丢掉之前的一整帧,对吧,这个问题如何解决呢?
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

15

帖子

0

蝴蝶豆

初级会员

最后登录
2018-12-20
发表于 2017-6-1 18:03:32 | 显示全部楼层
lynnxie 发表于 2017-5-28 23:00
非常感谢楼主的方法,非常好用
如果在一次性接收的数据包比较大,大于设定的DMA接收Buf,用空闲中断则会丢 ...

缓冲区要设置超过可能存在的最大数据包
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

871

帖子

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2017-6-1 18:32:26 | 显示全部楼层
空闲中断很有用,分享很赞!
回复 支持 反对

使用道具 举报

该用户从未签到

18

主题

334

帖子

1

蝴蝶豆

金牌会员

最后登录
2019-7-22
发表于 2017-6-1 18:43:04 | 显示全部楼层
对DMA的实时性好奇,以及中断优先级对DMA传输有没有影响,还有适用多大内存的片子
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

307

帖子

2

蝴蝶豆

金牌会员

最后登录
2021-6-4
发表于 2017-6-2 11:28:17 | 显示全部楼层
这个 需要配合 串口数据 收发 协议来,否则无法确认 到底接收多少数据。
                HAL_UART_Receive_DMA(&huart1, RX_DATA, RX_DATA_NUM);
                __HAL_DMA_DISABLE_IT(huart1.hdmarx, DMA_IT_TC | DMA_IT_HT | DMA_IT_TE);//关闭DMA 错误 传输一半 全部完成 中断

                __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能 串口 空闲中断

                HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);
                HAL_NVIC_EnableIRQ(USART1_IRQn);                        //使能中断

void USART1_IRQHandler(void)
{
        if((__HAL_DMA_GET_COUNTER(huart1.hdmarx) + RX_DATA[3]) == (RX_DATA_NUM - 6))
        {
                Flag_RX = 1;
        }
       
        __HAL_UART_CLEAR_IT(&huart1, UART_CLEAR_IDLEF);
       
        __HAL_DMA_DISABLE(huart1.hdmarx);
        huart1.hdmarx->Instance->CNDTR = RX_DATA_NUM;
        __HAL_DMA_ENABLE(huart1.hdmarx);                                //DMA接收数据 必须在 DMA 禁止 时 重新写入
}
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

0

主题

18

帖子

0

蝴蝶豆

中级会员

最后登录
2017-12-26
发表于 2017-8-23 09:47:50 | 显示全部楼层
救我一个发现了吗??接收的第二个数据覆盖不了第一个。也就是说第一次接收1234,第二次你发送12它还是显示1234.好气啊
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

7

帖子

0

蝴蝶豆

初级会员

最后登录
2018-10-10
发表于 2017-11-14 11:50:28 | 显示全部楼层
很好的教程,支持一下楼主
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-3 20:45 , Processed in 0.164340 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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