stm32 usart在DMA模式下只能发送一次
来源:互联网 发布:淘宝哪家supreme复刻 编辑:程序博客网 时间:2024/05/17 18:23
问题描述:使用STM32 cube生成usart2 DMA direct mode(不使用FIFO,normal模式,STM32f407)配置代码,usart2可以使用阻塞方式发送,使用DMA发送则只能发送第一次,复位后还只能发送一次。
单步调试发现DMA方式下的发送在发送第一次之后,husart->State 标志变为 HAL_USART_STATE_BUSY就再也不变了。比较直接的解决思路就是在DMA发送中断中给这个标志修改为HAL_USART_STATE_READY,修改之后还是不好用(我认为是可以通过修改多个相关寄存器解决的,但是个人倾向于不深入了解其寄存器,而是用封装度更高的HAL系列函数)。
读stm32f4xx_hal_usart.c(V1.5.0)文件的前面关于如何使用HAL函数的部分并与配置代码比较并没有发现问题,但是看stm32f1xx_hal_usart.c(V1.0.0)在同样的位置多了如下文字:
(+++) Configure the USARTx interrupt priority and enable the NVIC USART IRQ handle
(used for last byte sending completion detection in DMA non circular mode)
翻看STM32F4系列早于1.5.0的文件都没有这句,可能是官方的疏忽或者是个人理解不到位,总之增加了USART2中断之后(cube生成的),usart DMA发送是完全正常了。
0 0
- stm32 usart在DMA模式下只能发送一次
- STM32 USART串口DMA接收和发送模式
- STM32 USART DMA发送 中断接收
- STM32 DMA USART ADC
- STM32 USART DMA
- STM32 USART 串口 DMA 接收和发送的源码详解!
- STM32 USART 串口 DMA 接收和发送的源码详解!
- STM32 USART 串口 DMA 接收和发送的源码详解!
- STM32 USART发送
- STM32实现USART+DMA接收未知长度的数据和发送
- STM32笔记---DMA(USART)的演示
- 实现STM32中USART的DMA
- 实现STM32中USART的DMA
- 实现STM32中USART的DMA
- STM32:DMA实例之串口(USART)通信
- STM32 USART的DMA模式针对不定长度数据帧的应用
- USART 串口 DMA 发送和接收
- STM32的串口1发送、接收DMA模式函数配置
- 11. Container With Most Water
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现表单设计
- Tsung笔记之IP地址和端口限制突破篇
- HDU5877 Weak Pair(树状数组+dfs)
- hdu1078 FatMouse and Cheese 搜索dfs&dp
- stm32 usart在DMA模式下只能发送一次
- TCP和UDP的区别
- ural 1542 字典树(思维)
- 二维数组动态分配and螺旋矩阵
- LeetCode-Delete Node in a Linked List
- Java NIO 教程
- 32位ubuntu停启动安卓模拟器出现:Failed to load libGL.so
- [verilog读书笔记]4.模块和端口
- angularJS路由跳转