OpenEdv-开源电子网

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

F091片子上uart+dma_idle通信问题

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-9-9
在线时间
12 小时
发表于 2020-6-1 11:02:31 | 显示全部楼层 |阅读模式
最近遇到一个问题现象是这样的:
在F091芯片上,用uart+dma+idle实现uart接收发送不定长数据的功能,当串口用TTL通信的时候,没有任何问题;当串口和232通信的时候,或者串口和sim868(也是TTL电平)通信的时候,当uart初始化完成后,接着进行打开串口空闲中断以及DMA接收,这样就会出现第一帧FE的错误,接着进入中断处理函数,中断处理函数中会把DMAR关掉,这样后续DMA就会一直接收不到数据(DMA接收是circle模式,只在while之前打开一次);
如果uart初始化完成后,进行几毫秒的延时后,再打开空闲中断和DMA接收,这样程序运行就正常,虽然第一帧也会出现FE,但是因为延时的存在,uart中断处理函数会在这个延时中把FE处理掉,因为这个处理FE的时候,DMA还没打开,所以DMAR就不会被关掉,这样后续DMA接收就一直正常;不知道大家在用F0的单片机时有没有遇到过这种问题;代码如下:


start_uart1_dma() 和MX_USART1_UART_Init()之间的语句就相当于一个延时;如果按照图2的代码,在start_uart1_dma()之前加个delay_ms(100)延时也是也可以的。

不知道原子哥有没有发现这个问题呢?!!! 求回复!!!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2020-5-3
在线时间
0 小时
发表于 2020-6-1 11:02:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2020-6-1 16:19:06 | 显示全部楼层
帮顶~~
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 14:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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