STM32F103VET6串口1+DMA实现printf函数(调用了vsnprintf) 空闲中断+DMA实现接收

2019-07-20 22:20发布

大多数人实现printf基本上采用函数重定位的方法,1个字节1个字节的发送,效率不高;还有在用串口接收不定长度数据时也一般采用在数据中额外添加长度信息或终止信息,也有采用定时器定时接收的方法. 而这里给大家分享一个用STM32F103VET6串口1+DMA实现printf函数(调用了vsnprintf),与利用STM32串口特有的空闲中断+DMA实现接收的代码,开发环境是IAR6.3.如果要移植到UCOSII,只要把其中STM32F1_USART1.c文件里操作sendDoneFlag和recvDoneFlag变量置1或清0部分改成UCOSII的标志组操作即可,个人觉得DMA运行在多任务系统上才能充分体现它的效率,因为在DMA传输的过程中系统可以调度运行其他任务.
使用串口助手(波特率:115200,其他默认)向串口1发送任意长度数据,若超过串口1内部接收缓存则会导致数据被覆盖.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
M3初学者
1楼-- · 2019-07-22 06:41
 精彩回答 2  元偷偷看……
wdliming
2楼-- · 2019-07-22 11:21
相见恨晚。。。。
秋天
3楼-- · 2019-07-22 15:58
 精彩回答 2  元偷偷看……
fanaijun
4楼-- · 2019-07-22 17:14
楼主,我用的是KEIL的,在定时器中断里发,本应该一直发送数据的,为什么我发完一个后就一直卡在   while(!sendDoneFlag);//等待发送完    成这条语句里
opk666
5楼-- · 2019-07-22 18:36
谢谢分享。
烟蓝
6楼-- · 2019-07-22 21:44
 精彩回答 2  元偷偷看……

一周热门 更多>