三分钟学会国产低功耗华大单片机四(多种调试方法及printf输出)

工程师做单片机软件开发的时候必然要对所写的软件进行验证。其实就是我们让写的程序跑起来通过一定的手段来观察MCU的CPU与寄存器是否与我们的理论值相同的操作。通常采用的手段有如下几种:

  1. 仿真器(如J-link等)仿真;
  2. IO口指示;
  3. 液晶屏信息输出;
  4. 串口输出。

以上几种方法中方法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!");                           //输出调试内容
#endif	
    while(1)
    {
     ;
    }
}

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

本文旨在抛砖引玉,其余具体使用欢迎加群164973950交流。

 国产低功耗华大单片机主力型号如下:

HC32F003 HC32F005 HC32L110 HC32F030 HC32L136 HC32M140 HC32F146 HC32L150 HC32L156

芯片相关资料下载链接:https://blog.csdn.net/lvk/article/details/85260690

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

代码很简单先打开UART0,定时器,GPIO的外设时钟,因为我们使用串口这三个外设是必须用到的。

第二部分如果定义了DEBUG则对调试串口进行初始化。初始化在ddl.c文件中完成。

可以看到串口用到了芯片的P35为TX引脚,特率为19200bps。

如果定义了DEBUG则输出This is a UART Test!(这里的内容根据实际需要自己来定义。)

通过USB转TTL我们可以把数据传到电脑上,在电脑中我们打开串口调试工具可以看到程序跑起来后我们收到的数据与理论值相同。如下图所示:

我们在开发的时候只要在我们想要观察结果的位置加上以下语句就可以

#ifdef DEBUG
    printf();                             //输出调试内容
#endif

当程序全部OK以后这部分语句也可以不进行删除,只要把程序最开始的

#define DEBUG 语句注释掉,程序中所有的调试语句都不参考最终程序的编译,减小程序空间并提高程序运行效率。

其实在程序的开发过程中各种调试方法都有自己各自己的优缺点,要根据实际的情况综合运用最合适的调试方法,才能让保证开发最高效的进行。    

更多内容请点击链接加入群聊

【华大MCU应用交流】

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值