LKS32mc081_083_088系统板+低中功率板学习之串口printf的使用
本次主要学习的内容是针对南京凌鸥推出的LKS32MC08系列的学习记录,后面慢慢上手搭建foc控制框架,调试一款电机。
串口模块
1.1 功能概述
凌鸥08系列芯片集成两路串口,每个串口都具有7/8数据位,0/1校验位,支持奇偶校验方式,带字节发送与接收缓存,即带缓存功能,
发送情况下,如果发送缓存区有数据,那么将发送缓存区的数据加载到TX然后发出,加载完成后会产生发送缓存区空中断,用户可以及时将下一个要发送的数据填入发送缓存区,每次发送完成都会产生发送完成中断。
接受情况下,同样的流程外部数据数据->RX->接收缓存区->用户读取
1.4 DMA传输
为了减轻DMA负担,凌鸥08系列支持dma搬移数据,发送和接受不能同时使用DMA,这里以发送为例,叙述DMA搬移的两种方案
数据进入发射队列,UARTx_IE.UARTx_BUFF 即为空,硬件自动会请求 DMA 搬移下一个字节,直至数据搬移完毕。DMA 搬移完毕后,将产生 DMA 完成中断,但是 UARTx 很可能没有发送完毕最后一个字节,若立即操作 UARTx,将可能会产生异常。建议在 DMA 中断处理程序中,开启UARTx_IE.TX_DONE_IE 中断,UARTx 将最后一个字节发送完毕,产生发送完成中断,在 UARTx 中断
处理函数里面,再关闭 UARTx_IE.TX_DONE_IE。
方案 2:若 UARTx_IE.TX_DONE_RE 配置有效。建议 UART 初始化阶段不要清除 TX_DONE 标志。当前传输的数据长度为 Len,DMA 配置传输的字节数为 Len,开启 DMA 中断,DMA 传输完毕后,UART也发送完毕后,软复位UART模块开启下一次传输
两种dma搬运数据的方案,个人理解第一种方案,是发一个传一个,可能会存在还没发完,就传了一个,第二种方案是传一个,发一个,具体dma的应用可以参照凌鸥官网的上的用户手册
2.串口重定向的实现
串口重定向的目的,是为了可以使用c语言内置的printf可以输出到串口助手上进行显示,也方便一下简单的调试。
重定向的使用,主要注意两点
fputc的定义,这里主要是更改了prinft底层的定义与硬件串口可以配合起来
Micolib的使用,这里简要学习了一下Micollib的作用,它属于C库的default库的备选库,相比default要少很多功能,而且不具备ISOC特性,这里的ISOC指的是ISO C就是 International Organization for Standardization 国际标准化组织为了提高C语言的移植性而设立的C语言标准,里面包含两部分:C语法及语义;C标准函数库。其中只是定义了C标准函数库的函数原型、函数功能,而并未定义函数的具体现,具体可以参考链接https://blog.csdn.net/jmh1996/article/details/80459787,在凌鸥芯片上应用printf,只需要注意将下面这个应用Micolib的复选框勾上就行了
以上两点都注意到了以后,就可以愉快的使用printf了
3.问题总结
在凌鸥芯片与keil开发环节的烧录适配上,会出现这样一个问题,寄存器的配置只有在硬件引脚复位或则上电复位才会恢复到默认值,而点击在线烧录的方式,不能够使得相关外设的寄存器配置复位,至少目前来看串口的配置是这样。
|