1. 概述
本篇主要介绍使用MM32的MindSDK开发串口的驱动程序以及重定向printf函数所需要关心的注意事项,由于是使用库开发,比较简单,过程中会着重讲一些注意点,代码的编写仅以代码展示来表现。
2. 初始化UART
2.1 配置GPIO
评估板上使用的是UART1,用到的引脚是PB6和PB7,将这两个引脚配置位复用输出以及浮空输入:
1 | /* PB6 -- UART1 TX |
2.2 配置UART参数
调试串口使用的是UART1,波特率选择115200,数据位8位,1位停止位,没有校验位:
1 |
|
MM32的库还需要配置UART的时钟,一般选择为UART所在总线APB1/2的时钟,我的系统里APB总线时钟是系统时钟2分频后输出的:
1 | /* 配置系统时钟、AHB、APB时钟 */ |
3. 重定向printf
3.1 重定向__FILE结构体
在ARM的C/C++用户手册中提到,要想重定向printf需要重定向__FILE结构体,但是在MDK下,V6版编译器已经内置重定向了,而V5是没有的,所以我们需要根据所选择的编译器版本来决定是否重定向__FILE结构体:
1 |
|
3.2 重定向fputc
在MDK下重定向fputc:
1 | FILE __stdout; |
fputc的函数参数、返回值是固定形式的,只需要在函数体内调用UART的发送函数,将参数ch发送出去即可。
4. 使用
我们在main函数内初始化UART后,调用printf打印输出:
1 |
|
5. 测试结果:
- 本文作者: 摘星星的小朋友
- 本文链接: http://slhking.github.io/2022/05/12/MM32-5-UartAndPrintf/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!