工程师做单片机软件开发的时候必然要对所写的软件进行验证。其实就是我们让写的程序跑起来通过一定的手段来观察MCU的CPU与寄存器是否与我们的理论值相同的操作。通常采用的手段有如下几种:
仿真器(如J-link等)仿真;
IO口指示;
液晶屏信息输出;
串口输出。
以上几种方法中方法1仿真器仿真最直接,在仿真环境中可以清楚明确的看到自己想要的信息。但也有其局限性,如产品把芯片的引脚全部占满在调试最后的功能时正好用到了仿真的引脚;有些芯片进入低功耗模式为了降低功耗会关掉仿真接口等等。方法2最容易实现,只需在调试的时候使用MCU某一引脚为输出,程序中读取想要的内容做判断后在这个引脚输出即可。我们可以用示波器量这个引脚的电平,或直接接个指示灯来观察就可以。方法3的使用比较受限,比较适合有LCD显示的产品。方法4串口输出的方法是我们今天的重点。
就像前面所说的当仿真接口不方便的时候可以用串口来调试,那有没有什么情况下串口调试效率会比仿真器高呢?答案是肯定的。举个例子,做平衡系统时调节PID参数,我们是会选择 修改参数–>编译–>烧录–>运行–>修改…,还是做一个功能可以一边运行一边修改参数呢?显然一边运行一边修改效率会高很多,而通常的仿真器仿真时都要设置断点来观察值,如果要修改参数,则要重新编译–>烧录–>运行,想要边运行边修改很难。现在的应用开发都讲究交互试设计,我们在调试程序的时候是否也可以呢?还用上面的例子,我们可以加下两个按键分别定义为“加”和“减”用来修改参数,当然不要这两个按键也是可以的,只要把参数按一定的规律做变化就可以,参数和运行的结果都通过串口输出,这样我们就可以很直观的看到哪组参数是合适的。
用串口输出就要编写串口代码,大家知道如果用串口输出的数据比较容易,但是不是很直观,有没有什么方法可以像我们学C语言时候直接用printf()。来输出我们想要的内容呢?这是个非常好的问题,华大单片机实现起来十分简单。现在就以国产超低功耗华大单片机HC32F003为例向大家介绍如何来实现printf()的输出。
还是用之前建立好的空工程,闲话少说直接上代码。
#define DEBUG
#include "gpio.h"
int main()
{
Clk_SetPeripheralGate(ClkPeripheralUart0, TRUE); //开UART0外设时钟
Clk_SetPeripheralGate(ClkPeripheralBt, TRUE); //开定时器外设时钟
Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE); //开GPIO外设时钟
#ifdef DEBUG
Debug_UartInit(); //调试串口初始化
#endif
#ifdef DEBUG
printf("This is a UART Test!"); //输出调试内容
#。
国产低功耗华大单 QQ 1017142325 电话 15818662231 微信 |