关于延时的一个很简单的程序, 但是输出很诡异的结果

MCU 用的是CH32V203C8T6, 不能再简单的程序吧, 应该是5秒输出一个"hello/", 但实际却一直在连续输出, 基本没有任何延时?

请问是哪里出错了呢?


#include "debug.h"
int main(void)
{
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);

    while(1)
    {
        printf("hello/");
        Delay_Ms(5000);
    }
}

系统滴答定时器没有初始化,你这水平,一看就是刚接触单片机


调用

Delay_Init();

进行初始化,试试看~~参考代码中有


Delay_Init();

这句忘记加了,参考代码里有。另外提一下,以后用了RTOS,是不能在RTOS运行后使用这个Delay的,要换RTOS的。


感谢楼上两位, 确实加上Delay_Init() 就可以了, 一直用Arduinio, 还没养成什么设备都要初始化的编程习惯 ^v^


这段程序看来还有别的问题,  printf 如果不加 "\r\n" 会导致意想不到的后果, 比如下面的这段程序, 本以为会先打印出来一个 "Hello " 5秒后再打印 "world!", 实际运行情况是: 10秒后 "Hello world!" 一起打印出来的!! 

这是在Arduino 里面是不敢想象的....


int main(void)

{

    Delay_Init();

    USART_Printf_Init(115200);

    printf("SystemClk:%d\r\n", SystemCoreClock);

    printf("GPIO Toggle TEST\r\n");


    while(1)

    {

        Delay_Ms(5000);

        printf("Hello ");

        Delay_Ms(5000);

        printf("world!\r\n");

    }

}



这是很正常的。换行在c语言的printf里会清空缓冲区,全部输出(建议自行百度了解一下)。个人不建议把arduino的习惯代入常规C语言开发。


https://blog.csdn.net/cxsjabcabc/article/details/107136400,可以参考这篇文章学习一下。


只有登录才能回复,可以选择微信账号登录