嵌入式学习网_振兴网【官网】
请选择 进入手机版 | 继续访问电脑版

嵌入式学习网_振兴网【官网】

 找回密码
 立即注册

QQ登录

只需一步,快速开始

STM32单片机用Printf()函数打印输出

2016-11-26 11:03| 发布者: 振兴| 查看: 761| 评论: 0|原作者: 振兴

摘要: 在学习单片机的过程中,学会使用仿真器,用仿真器设置断点、单步调试是一种非常快速和有效的查找问题的方法,但是手边没有仿真器、没有预留仿真接口,要查看变量的变化该怎么办?这时候也是有办法的,通常的做法,我 ...
在学习单片机的过程中,学会使用仿真器,用仿真器设置断点、单步调试是一种非常快速和有效的查找问题的方法,但是手边没有仿真器、没有预留仿真接口,要查看变量的变化该怎么办?这时候也是有办法的,通常的做法,我们把串口引出来,把串口寄存器配置好,通过RS232或者RS485来查看变量的状态和程序的运行方法,这时候只需要将数据发送函数添加到需要查看变量的下发即可,程序执行数据发送函数就可以将变量的值发送到调试助手中,供我们查看。如下所示,就可以通过Data_Send(pllmull)来查看pllmull的值。
  1.       if (pllmull != 0x0D)
  2.       {
  3.       pllmull += 2;
  4.       }
  5.       else
  6.       { /* PLL multiplication factor = PLL input clock * 6.5 */
  7.       pllmull = 13 / 2;
  8.       Data_Send(pllmull);
  9.       }</font>
复制代码
除此之外,还有一种非常简便的方法,就是使用Printf()函数,这个函数我们都不陌生。在C语言的第一堂课,我们都学过“Hello world”这个程序,这个程序就是通过Printf()函数来实现的。再来怀旧一下:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.       printf("hello world");
  5.       return 0;
  6. }
复制代码
使用单片机同样可以使用printf()函数,下面来介绍使用方法。

1. 添加头文件支持
printf()函数位于“stdio.h”文件中,所以第一步就是要添加该头文件;
2. 添加重定向函数
需要添加的重定向函数如下:
  1. /*打印函数的重定向*/
  2. int fputc(int ch, FILE *f)
  3. {      
  4.         while((USART1->SR&0X40)==0);//直到发送完毕
  5.         USART1->DR = (uint8_t) ch;      
  6.         return ch;
  7. }
复制代码
重定向函数写法固定,但是根据单片机不同、串口号不同,需要修改,以上函数使用的是片上资源USART1。
之所以需要重定向是因为printf()是格式化输出函数,可以按规定格式向标准设备输出打印信息,但是单片机并不是一个标准的输出设备,所以在使用的时候需要借助重定向,将printf()重定向至UART中。所以上面代码的作用就是将重定向指向UART。
3. 配置串口寄存器
这一步就是配置串口通信的参数,所涉及的参数如波特率、数据长度、停止位、校验位等,这一块就是纯单片机的配置方式,大家可以参考下面这篇文章:STM32单片机串口通信波特率计算方法
4. keil的设置

最后一步,需要对keil做一下设置,

在Target标签中,勾选USE MicroLIB选项.

通过以上三部就可以实现单片机的串口打印了。效果如下:




1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

相关分类

发布主题 联系我们 官方QQ群
返回顶部