大多数人实现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内部接收缓存则会导致数据被覆盖.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>