大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-7-11
|
本帖最后由 冷库的云 于 2017-8-16 23:52 编辑
我用的是HAL库,实现的串口1 的DMA传输。具体配置见附件代码。下面介绍下printf的DMA实现:
- /**
- *printf打印函数
- * @param format printf格式
- */
- void printf_dma(const char *format, ...)
- {
- uint32_t length;
- va_list args;
-
- while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
- va_start(args, format);
- length = vsnprintf((char*)print_buffer, sizeof(print_buffer), (char*)format, args);//格式化内容
- va_end(args);
- USART_DMA_SendData(&huart1, print_buffer, length);//发送
- }
复制代码 记得加这个头文件
其他就没有什么了!测试DMA传输解放CPU的效果,可以自己搞个大数组,在主函数中串口发送,并且让LED闪烁,就可以直观感受DMA带来的好处了。没用DMA的延时大,因为CPU大多时间浪费在串口通信发送等待上。自己动手试试。自己动手,丰衣足食。
|
|